fune/browser/base/content/test/general/browser_bug592338.js
2016-08-31 12:53:24 -04:00

164 lines
5.8 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
const TESTROOT = "http://example.com/browser/toolkit/mozapps/extensions/test/xpinstall/";
var tempScope = {};
Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope);
var LightweightThemeManager = tempScope.LightweightThemeManager;
function wait_for_notification(aCallback) {
PopupNotifications.panel.addEventListener("popupshown", function() {
PopupNotifications.panel.removeEventListener("popupshown", arguments.callee, false);
aCallback(PopupNotifications.panel);
}, false);
}
var TESTS = [
function test_install_http() {
is(LightweightThemeManager.currentTheme, null, "Should be no lightweight theme selected");
var pm = Services.perms;
pm.add(makeURI("http://example.org/"), "install", pm.ALLOW_ACTION);
gBrowser.selectedTab = gBrowser.addTab("http://example.org/browser/browser/base/content/test/general/bug592338.html");
gBrowser.selectedBrowser.addEventListener("pageshow", function() {
if (gBrowser.contentDocument.location.href == "about:blank")
return;
gBrowser.selectedBrowser.removeEventListener("pageshow", arguments.callee, false);
executeSoon(function() {
BrowserTestUtils.synthesizeMouse("#theme-install", 2, 2, {}, gBrowser.selectedBrowser);
is(LightweightThemeManager.currentTheme, null, "Should not have installed the test theme");
gBrowser.removeTab(gBrowser.selectedTab);
pm.remove(makeURI("http://example.org/"), "install");
runNextTest();
});
}, false);
},
function test_install_lwtheme() {
is(LightweightThemeManager.currentTheme, null, "Should be no lightweight theme selected");
var pm = Services.perms;
pm.add(makeURI("https://example.com/"), "install", pm.ALLOW_ACTION);
gBrowser.selectedTab = gBrowser.addTab("https://example.com/browser/browser/base/content/test/general/bug592338.html");
gBrowser.selectedBrowser.addEventListener("pageshow", function() {
if (gBrowser.contentDocument.location.href == "about:blank")
return;
gBrowser.selectedBrowser.removeEventListener("pageshow", arguments.callee, false);
BrowserTestUtils.synthesizeMouse("#theme-install", 2, 2, {}, gBrowser.selectedBrowser);
let notification;
let notificationBox = gBrowser.getNotificationBox(gBrowser.selectedBrowser);
waitForCondition(
() => (notification = notificationBox.getNotificationWithValue("lwtheme-install-notification")),
() => {
is(LightweightThemeManager.currentTheme.id, "test", "Should have installed the test theme");
LightweightThemeManager.currentTheme = null;
gBrowser.removeTab(gBrowser.selectedTab);
Services.perms.remove(makeURI("http://example.com/"), "install");
runNextTest();
}
);
}, false);
},
function test_lwtheme_switch_theme() {
is(LightweightThemeManager.currentTheme, null, "Should be no lightweight theme selected");
AddonManager.getAddonByID("theme-xpi@tests.mozilla.org", function(aAddon) {
aAddon.userDisabled = false;
ok(aAddon.isActive, "Theme should have immediately enabled");
Services.prefs.setBoolPref("extensions.dss.enabled", false);
var pm = Services.perms;
pm.add(makeURI("https://example.com/"), "install", pm.ALLOW_ACTION);
gBrowser.selectedTab = gBrowser.addTab("https://example.com/browser/browser/base/content/test/general/bug592338.html");
gBrowser.selectedBrowser.addEventListener("pageshow", function() {
if (gBrowser.contentDocument.location.href == "about:blank")
return;
gBrowser.selectedBrowser.removeEventListener("pageshow", arguments.callee, false);
executeSoon(function() {
wait_for_notification(function(aPanel) {
is(LightweightThemeManager.currentTheme, null, "Should not have installed the test lwtheme");
ok(aAddon.isActive, "Test theme should still be active");
let notification = aPanel.childNodes[0];
is(notification.button.label, "Restart Now", "Should have seen the right button");
ok(aAddon.userDisabled, "Should be waiting to disable the test theme");
aAddon.userDisabled = false;
Services.prefs.setBoolPref("extensions.dss.enabled", true);
gBrowser.removeTab(gBrowser.selectedTab);
Services.perms.remove(makeURI("http://example.com"), "install");
runNextTest();
});
BrowserTestUtils.synthesizeMouse("#theme-install", 2, 2, {}, gBrowser.selectedBrowser);
});
}, false);
});
}
];
function runNextTest() {
AddonManager.getAllInstalls(function(aInstalls) {
is(aInstalls.length, 0, "Should be no active installs");
if (TESTS.length == 0) {
AddonManager.getAddonByID("theme-xpi@tests.mozilla.org", function(aAddon) {
aAddon.uninstall();
Services.prefs.setBoolPref("extensions.logging.enabled", false);
Services.prefs.setBoolPref("extensions.dss.enabled", false);
finish();
});
return;
}
info("Running " + TESTS[0].name);
TESTS.shift()();
});
}
function test() {
waitForExplicitFinish();
Services.prefs.setBoolPref("extensions.logging.enabled", true);
AddonManager.getInstallForURL(TESTROOT + "theme.xpi", function(aInstall) {
aInstall.addListener({
onInstallEnded: function(aInstall, aAddon) {
AddonManager.getAddonByID("theme-xpi@tests.mozilla.org", function(aAddon) {
isnot(aAddon, null, "Should have installed the test theme.");
// In order to switch themes while the test is running we turn on dynamic
// theme switching. This means the test isn't exactly correct but should
// do some good
Services.prefs.setBoolPref("extensions.dss.enabled", true);
runNextTest();
});
}
});
aInstall.install();
}, "application/x-xpinstall");
}