browser/base/content/test/social/browser_social_window.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // This Source Code Form is subject to the terms of the Mozilla Public
     2 // License, v. 2.0. If a copy of the MPL was not distributed with this
     3 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
     5 // Test the top-level window UI for social.
     7 let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
     9 // This function should "reset" Social such that the next time Social.init()
    10 // is called (eg, when a new window is opened), it re-performs all
    11 // initialization.
    12 function resetSocial() {
    13   Social.initialized = false;
    14   Social.providers = [];
    15   // *sob* - listeners keep getting added...
    16   SocialService._providerListeners.clear();
    17 }
    19 let createdWindows = [];
    21 function openWindowAndWaitForInit(parentWin, callback) {
    22   // this notification tells us SocialUI.init() has been run...
    23   let topic = "browser-delayed-startup-finished";
    24   let w = parentWin.OpenBrowserWindow();
    25   createdWindows.push(w);
    26   Services.obs.addObserver(function providerSet(subject, topic, data) {
    27     Services.obs.removeObserver(providerSet, topic);
    28     info(topic + " observer was notified - continuing test");
    29     executeSoon(() => callback(w));
    30   }, topic, false);
    31 }
    33 function closeWindow(w, cb) {
    34   waitForNotification("domwindowclosed", cb);
    35   w.close();
    36 }
    38 function closeOneWindow(cb) {
    39   let w = createdWindows.pop();
    40   if (!w || w.closed) {
    41     cb();
    42     return;
    43   }
    44   closeWindow(w, function() {
    45     closeOneWindow(cb);
    46   });
    47   w.close();
    48 }
    50 function postTestCleanup(cb) {
    51   closeOneWindow(cb);
    52 }
    54 let manifest = { // normal provider
    55   name: "provider 1",
    56   origin: "https://example.com",
    57   sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
    58   workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
    59   iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png"
    60 };
    61 let manifest2 = { // used for testing install
    62   name: "provider test1",
    63   origin: "https://test1.example.com",
    64   workerURL: "https://test1.example.com/browser/browser/base/content/test/social/social_worker.js",
    65   sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar.html",
    66   iconURL: "https://test1.example.com/browser/browser/base/content/test/general/moz.png",
    67 };
    69 function test() {
    70   waitForExplicitFinish();
    71   runSocialTests(tests, undefined, postTestCleanup);
    72 }
    74 let tests = {
    75   // check when social is totally disabled at startup (ie, no providers enabled)
    76   testInactiveStartup: function(cbnext) {
    77     is(Social.providers.length, 0, "needs zero providers to start this test.");
    78     ok(!SocialService.hasEnabledProviders, "no providers are enabled");
    79     resetSocial();
    80     openWindowAndWaitForInit(window, function(w1) {
    81       checkSocialUI(w1);
    82       // Now social is (re-)initialized, open a secondary window and check that.
    83       openWindowAndWaitForInit(window, function(w2) {
    84         checkSocialUI(w2);
    85         checkSocialUI(w1);
    86         cbnext();
    87       });
    88     });
    89   },
    91   // Check when providers are enabled and social is turned on at startup.
    92   testEnabledStartup: function(cbnext) {
    93     setManifestPref("social.manifest.test", manifest);
    94     ok(!SocialSidebar.opened, "sidebar is closed initially");
    95     SocialService.addProvider(manifest, function() {
    96       SocialService.addProvider(manifest2, function (provider) {
    97         SocialSidebar.show();
    98         waitForCondition(function() SocialSidebar.opened,
    99                      function() {
   100           ok(SocialSidebar.opened, "first window sidebar is open");
   101           openWindowAndWaitForInit(window, function(w1) {
   102             ok(w1.SocialSidebar.opened, "new window sidebar is open");
   103             ok(SocialService.hasEnabledProviders, "providers are enabled");
   104             checkSocialUI(w1);
   105             // now init is complete, open a second window
   106             openWindowAndWaitForInit(window, function(w2) {
   107               ok(w1.SocialSidebar.opened, "w1 sidebar is open");
   108               ok(w2.SocialSidebar.opened, "w2 sidebar is open");
   109               checkSocialUI(w2);
   110               checkSocialUI(w1);
   112               // disable social and re-check
   113               SocialService.removeProvider(manifest.origin, function() {
   114                 SocialService.removeProvider(manifest2.origin, function() {
   115                   ok(!Social.enabled, "social is disabled");
   116                   is(Social.providers.length, 0, "no providers");
   117                   ok(!w1.SocialSidebar.opened, "w1 sidebar is closed");
   118                   ok(!w2.SocialSidebar.opened, "w2 sidebar is closed");
   119                   checkSocialUI(w2);
   120                   checkSocialUI(w1);
   121                   Services.prefs.clearUserPref("social.manifest.test");
   122                   cbnext();
   123                 });
   124               });
   125             });
   126           });
   127         }, "sidebar did not open");
   128       }, cbnext);
   129     }, cbnext);
   130   },
   132   testGlobalState: function(cbnext) {
   133     setManifestPref("social.manifest.test", manifest);
   134     ok(!SocialSidebar.opened, "sidebar is closed initially");
   135     ok(!Services.prefs.prefHasUserValue("social.sidebar.provider"), "global state unset");
   136     // mimick no session state in opener so we exercise the global state via pref
   137     SessionStore.deleteWindowValue(window, "socialSidebar");
   138     ok(!SessionStore.getWindowValue(window, "socialSidebar"), "window state unset");
   139     SocialService.addProvider(manifest, function() {
   140       openWindowAndWaitForInit(window, function(w1) {
   141         w1.SocialSidebar.show();
   142         waitForCondition(function() w1.SocialSidebar.opened,
   143                      function() {
   144           ok(Services.prefs.prefHasUserValue("social.sidebar.provider"), "global state set");
   145           ok(!SocialSidebar.opened, "1. main sidebar is still closed");
   146           ok(w1.SocialSidebar.opened, "1. window sidebar is open");
   147           closeWindow(w1, function() {
   148             // this time, the global state should cause the sidebar to be opened
   149             // in the new window
   150             openWindowAndWaitForInit(window, function(w1) {
   151               ok(!SocialSidebar.opened, "2. main sidebar is still closed");
   152               ok(w1.SocialSidebar.opened, "2. window sidebar is open");
   153               w1.SocialSidebar.hide();
   154               ok(!w1.SocialSidebar.opened, "2. window sidebar is closed");
   155               ok(!Services.prefs.prefHasUserValue("social.sidebar.provider"), "2. global state unset");
   156               // global state should now be no sidebar gets opened on new window
   157               closeWindow(w1, function() {
   158                 ok(!Services.prefs.prefHasUserValue("social.sidebar.provider"), "3. global state unset");
   159                 ok(!SocialSidebar.opened, "3. main sidebar is still closed");
   160                 openWindowAndWaitForInit(window, function(w1) {
   161                   ok(!Services.prefs.prefHasUserValue("social.sidebar.provider"), "4. global state unset");
   162                   ok(!SocialSidebar.opened, "4. main sidebar is still closed");
   163                   ok(!w1.SocialSidebar.opened, "4. window sidebar is closed");
   164                   SocialService.removeProvider(manifest.origin, function() {
   165                     Services.prefs.clearUserPref("social.manifest.test");
   166                     cbnext();
   167                   });
   168                 });
   169               });
   170             });
   171           });
   172         });        
   173       });
   174     });
   175   },
   177   // Check per window sidebar functionality, including migration from using
   178   // prefs to using session state, and state inheritance of windows (new windows
   179   // inherit state from the opener).
   180   testPerWindowSidebar: function(cbnext) {
   181     function finishCheck() {
   182       // disable social and re-check
   183       SocialService.removeProvider(manifest.origin, function() {
   184         SocialService.removeProvider(manifest2.origin, function() {
   185           ok(!Social.enabled, "social is disabled");
   186           is(Social.providers.length, 0, "no providers");
   187           Services.prefs.clearUserPref("social.manifest.test");
   188           cbnext();
   189         });
   190       });
   191     }
   193     setManifestPref("social.manifest.test", manifest);
   194     ok(!SocialSidebar.opened, "sidebar is closed initially");
   195     SocialService.addProvider(manifest, function() {
   196       SocialService.addProvider(manifest2, function (provider) {
   197         // test the migration of the social.sidebar.open pref. We'll set a user
   198         // level pref to indicate it was open (along with the old
   199         // social.provider.current pref), then we'll open a window. During the
   200         // restoreState of the window, those prefs should be migrated, and the
   201         // sidebar should be opened.  Both prefs are then removed.
   202         Services.prefs.setCharPref("social.provider.current", "https://example.com");
   203         Services.prefs.setBoolPref("social.sidebar.open", true);
   205         openWindowAndWaitForInit(window, function(w1) {
   206           ok(w1.SocialSidebar.opened, "new window sidebar is open");
   207           ok(SocialService.hasEnabledProviders, "providers are enabled");
   208           ok(!Services.prefs.prefHasUserValue("social.provider.current"), "social.provider.current pref removed");
   209           ok(!Services.prefs.prefHasUserValue("social.sidebar.open"), "social.sidebar.open pref removed");
   210           checkSocialUI(w1);
   211           // now init is complete, open a second window, it's state should be the same as the opener
   212           openWindowAndWaitForInit(w1, function(w2) {
   213             ok(w1.SocialSidebar.opened, "w1 sidebar is open");
   214             ok(w2.SocialSidebar.opened, "w2 sidebar is open");
   215             checkSocialUI(w2);
   216             checkSocialUI(w1);
   218             // change the sidebar in w2
   219             w2.SocialSidebar.show(manifest2.origin);
   220             let sbrowser1 = w1.document.getElementById("social-sidebar-browser");
   221             is(manifest.origin, sbrowser1.getAttribute("origin"), "w1 sidebar origin matches");
   222             let sbrowser2 = w2.document.getElementById("social-sidebar-browser");
   223             is(manifest2.origin, sbrowser2.getAttribute("origin"), "w2 sidebar origin matches");
   225             // hide sidebar, w1 sidebar should still be open
   226             w2.SocialSidebar.hide();
   227             ok(w1.SocialSidebar.opened, "w1 sidebar is opened");
   228             ok(!w2.SocialSidebar.opened, "w2 sidebar is closed");
   229             ok(sbrowser2.parentNode.hidden, "w2 sidebar is hidden");
   231             // open a 3rd window from w2, it should inherit the state of w2
   232             openWindowAndWaitForInit(w2, function(w3) {
   233               // since the sidebar is not open, we need to ensure the provider
   234               // is selected to test we inherited the provider from the opener
   235               w3.SocialSidebar.ensureProvider();
   236               is(w3.SocialSidebar.provider, w2.SocialSidebar.provider, "w3 has same provider as w2");
   237               ok(!w3.SocialSidebar.opened, "w2 sidebar is closed");
   239               // open a 4th window from w1, it should inherit the state of w1
   240               openWindowAndWaitForInit(w1, function(w4) {
   241                 is(w4.SocialSidebar.provider, w1.SocialSidebar.provider, "w4 has same provider as w1");
   242                 ok(w4.SocialSidebar.opened, "w4 sidebar is opened");
   244                 finishCheck();
   245               });
   246             });
   248           });
   249         });
   250       }, cbnext);
   251     }, cbnext);
   252   }
   253 }

mercurial