browser/base/content/test/social/browser_social_status.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 let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
     7 let manifest = { // builtin provider
     8   name: "provider example.com",
     9   origin: "https://example.com",
    10   sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
    11   workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
    12   iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png"
    13 };
    14 let manifest2 = { // used for testing install
    15   name: "provider test1",
    16   origin: "https://test1.example.com",
    17   workerURL: "https://test1.example.com/browser/browser/base/content/test/social/social_worker.js",
    18   statusURL: "https://test1.example.com/browser/browser/base/content/test/social/social_panel.html",
    19   iconURL: "https://test1.example.com/browser/browser/base/content/test/general/moz.png",
    20   version: 1
    21 };
    22 let manifest3 = { // used for testing install
    23   name: "provider test2",
    24   origin: "https://test2.example.com",
    25   sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar.html",
    26   iconURL: "https://test2.example.com/browser/browser/base/content/test/general/moz.png",
    27   version: 1
    28 };
    31 function openWindowAndWaitForInit(callback) {
    32   let topic = "browser-delayed-startup-finished";
    33   let w = OpenBrowserWindow();
    34   Services.obs.addObserver(function providerSet(subject, topic, data) {
    35     Services.obs.removeObserver(providerSet, topic);
    36     executeSoon(() => callback(w));
    37   }, topic, false);
    38 }
    40 function test() {
    41   waitForExplicitFinish();
    43   runSocialTestWithProvider(manifest, function (finishcb) {
    44     runSocialTests(tests, undefined, undefined, function () {
    45       Services.prefs.clearUserPref("social.remote-install.enabled");
    46       // just in case the tests failed, clear these here as well
    47       Services.prefs.clearUserPref("social.whitelist");
    48       ok(CustomizableUI.inDefaultState, "Should be in the default state when we finish");
    49       CustomizableUI.reset();
    50       finishcb();
    51     });
    52   });
    53 }
    55 var tests = {
    56   testNoButtonOnEnable: function(next) {
    57     // we expect the addon install dialog to appear, we need to accept the
    58     // install from the dialog.
    59     let panel = document.getElementById("servicesInstall-notification");
    60     PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
    61       PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
    62       info("servicesInstall-notification panel opened");
    63       panel.button.click();
    64     })
    66     let activationURL = manifest3.origin + "/browser/browser/base/content/test/social/social_activate.html"
    67     addTab(activationURL, function(tab) {
    68       let doc = tab.linkedBrowser.contentDocument;
    69       Social.installProvider(doc, manifest3, function(addonManifest) {
    70         // enable the provider so we know the button would have appeared
    71         SocialService.addBuiltinProvider(manifest3.origin, function(provider) {
    72           is(provider.origin, manifest3.origin, "provider is installed");
    73           let id = SocialStatus._toolbarHelper.idFromOrigin(provider.origin);
    74           let widget = CustomizableUI.getWidget(id);
    75           ok(!widget || !widget.forWindow(window).node, "no button added to widget set");
    76           Social.uninstallProvider(manifest3.origin, function() {
    77             gBrowser.removeTab(tab);
    78             next();
    79           });
    80         });
    81       });
    82     });
    83   },
    84   testButtonOnEnable: function(next) {
    85     let panel = document.getElementById("servicesInstall-notification");
    86     PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
    87       PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
    88       info("servicesInstall-notification panel opened");
    89       panel.button.click();
    90     });
    92     // enable the provider now
    93     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
    94     addTab(activationURL, function(tab) {
    95       let doc = tab.linkedBrowser.contentDocument;
    96       Social.installProvider(doc, manifest2, function(addonManifest) {
    97         SocialService.addBuiltinProvider(manifest2.origin, function(provider) {
    98           is(provider.origin, manifest2.origin, "provider is installed");
    99           let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
   100           let widget = CustomizableUI.getWidget(id).forWindow(window);
   101           ok(widget.node, "button added to widget set");
   102           checkSocialUI(window);
   103           gBrowser.removeTab(tab);
   104           next();
   105         });
   106       });
   107     });
   108   },
   109   testStatusPanel: function(next) {
   110     let icon = {
   111       name: "testIcon",
   112       iconURL: "chrome://browser/skin/Info.png",
   113       counter: 1
   114     };
   115     // click on panel to open and wait for visibility
   116     let provider = Social._getProviderFromOrigin(manifest2.origin);
   117     let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
   118     let widget = CustomizableUI.getWidget(id);
   119     let btn = widget.forWindow(window).node;
   120     ok(btn, "got a status button");
   121     let port = provider.getWorkerPort();
   123     port.onmessage = function (e) {
   124       let topic = e.data.topic;
   125       switch (topic) {
   126         case "test-init-done":
   127           ok(true, "test-init-done received");
   128           ok(provider.profile.userName, "profile was set by test worker");
   129           btn.click();
   130           break;
   131         case "got-social-panel-visibility":
   132           ok(true, "got the panel message " + e.data.result);
   133           if (e.data.result == "shown") {
   134             let panel = document.getElementById("social-notification-panel");
   135             panel.hidePopup();
   136           } else {
   137             port.postMessage({topic: "test-ambient-notification", data: icon});
   138             port.close();
   139             waitForCondition(function() { return btn.getAttribute("badge"); },
   140                        function() {
   141                          is(btn.style.listStyleImage, "url(\"" + icon.iconURL + "\")", "notification icon updated");
   142                          next();
   143                        }, "button updated by notification");
   144           }
   145           break;
   146       }
   147     };
   148     port.postMessage({topic: "test-init"});
   149   },
   150   testButtonOnDisable: function(next) {
   151     // enable the provider now
   152     let provider = Social._getProviderFromOrigin(manifest2.origin);
   153     ok(provider, "provider is installed");
   154     SocialService.removeProvider(manifest2.origin, function() {
   155       let id = SocialStatus._toolbarHelper.idFromOrigin(manifest2.origin);
   156       waitForCondition(function() { return !document.getElementById(id) },
   157                        function() {
   158                         Social.uninstallProvider(manifest2.origin, next);
   159                        }, "button does not exist after disabling the provider");
   160     });
   161   }
   162 }

mercurial