michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: runSocialTestWithProvider(gProviders, function (finishcb) { michael@0: SocialSidebar.provider = Social.providers[0]; michael@0: SocialSidebar.show(); michael@0: is(Social.providers[0].origin, SocialSidebar.provider.origin, "selected provider in sidebar"); michael@0: runSocialTests(tests, undefined, undefined, finishcb); michael@0: }); michael@0: } michael@0: michael@0: let gProviders = [ michael@0: { michael@0: name: "provider 1", michael@0: origin: "https://test1.example.com", michael@0: sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar.html?provider1", michael@0: workerURL: "https://test1.example.com/browser/browser/base/content/test/social/social_worker.js", michael@0: iconURL: "chrome://branding/content/icon48.png" michael@0: }, michael@0: { michael@0: name: "provider 2", michael@0: origin: "https://test2.example.com", michael@0: sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar.html?provider2", michael@0: workerURL: "https://test2.example.com/browser/browser/base/content/test/social/social_worker.js", michael@0: iconURL: "chrome://branding/content/icon48.png" michael@0: } michael@0: ]; michael@0: michael@0: var tests = { michael@0: testProviderSwitch: function(next) { michael@0: let menu = document.getElementById("social-statusarea-popup"); michael@0: let button = document.getElementById("social-sidebar-button"); michael@0: function checkProviderMenu(selectedProvider) { michael@0: let menuProviders = menu.querySelectorAll(".social-provider-menuitem"); michael@0: is(menuProviders.length, gProviders.length, "correct number of providers listed in the menu"); michael@0: // Find the selectedProvider's menu item michael@0: let el = menu.getElementsByAttribute("origin", selectedProvider.origin); michael@0: is(el.length, 1, "selected provider menu item exists"); michael@0: is(el[0].getAttribute("checked"), "true", "selected provider menu item is checked"); michael@0: } michael@0: michael@0: // the menu is not populated until onpopupshowing, so wait for popupshown michael@0: function theTest() { michael@0: menu.removeEventListener("popupshown", theTest, true); michael@0: menu.hidePopup(); // doesn't need visibility michael@0: // first provider should already be visible in the sidebar michael@0: is(Social.providers[0].origin, SocialSidebar.provider.origin, "selected provider in sidebar"); michael@0: checkProviderMenu(Social.providers[0]); michael@0: michael@0: // Now activate "provider 2" michael@0: onSidebarLoad(function() { michael@0: checkUIStateMatchesProvider(Social.providers[1]); michael@0: michael@0: onSidebarLoad(function() { michael@0: checkUIStateMatchesProvider(Social.providers[0]); michael@0: next(); michael@0: }); michael@0: michael@0: // show the menu again so the menu is updated with the correct commands michael@0: function doClick() { michael@0: // click on the provider menuitem to switch providers michael@0: let el = menu.getElementsByAttribute("origin", Social.providers[0].origin); michael@0: is(el.length, 1, "selected provider menu item exists"); michael@0: EventUtils.synthesizeMouseAtCenter(el[0], {}); michael@0: } michael@0: menu.addEventListener("popupshown", doClick, true); michael@0: EventUtils.synthesizeMouseAtCenter(button, {}); michael@0: michael@0: }); michael@0: SocialSidebar.provider = Social.providers[1]; michael@0: }; michael@0: menu.addEventListener("popupshown", theTest, true); michael@0: EventUtils.synthesizeMouseAtCenter(button, {}); michael@0: } michael@0: } michael@0: michael@0: function checkUIStateMatchesProvider(provider) { michael@0: // Sidebar michael@0: is(document.getElementById("social-sidebar-browser").getAttribute("src"), provider.sidebarURL, "side bar URL is set"); michael@0: } michael@0: michael@0: function onSidebarLoad(callback) { michael@0: let sbrowser = document.getElementById("social-sidebar-browser"); michael@0: sbrowser.addEventListener("load", function load() { michael@0: sbrowser.removeEventListener("load", load, true); michael@0: // give the load a chance to finish before pulling the rug (ie. calling michael@0: // next) michael@0: executeSoon(callback); michael@0: }, true); michael@0: }