diff options
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_bug586574.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/browser/browser_bug586574.js | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_bug586574.js b/toolkit/mozapps/webextensions/test/browser/browser_bug586574.js new file mode 100644 index 000000000..fb5ebf01b --- /dev/null +++ b/toolkit/mozapps/webextensions/test/browser/browser_bug586574.js @@ -0,0 +1,286 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Bug 586574 - Provide way to set a default for automatic updates +// Bug 710064 - Make the "Update Add-ons Automatically" checkbox state +// also depend on the extensions.update.enabled pref + +// TEST_PATH=toolkit/mozapps/extensions/test/browser/browser_bug586574.js make -C obj-ff mochitest-browser-chrome + +const PREF_UPDATE_ENABLED = "extensions.update.enabled"; +const PREF_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault"; + +var gManagerWindow; +var gProvider; + +var gUtilsBtn; +var gUtilsMenu; +var gDropdownMenu; +var gSetDefault; +var gResetToAutomatic; +var gResetToManual; + +// Make sure we don't accidentally start a background update while the prefs +// are enabled. +disableBackgroundUpdateTimer(); +registerCleanupFunction(() => { + enableBackgroundUpdateTimer(); +}); + +function test() { + waitForExplicitFinish(); + + gProvider = new MockProvider(); + + gProvider.createAddons([{ + id: "addon1@tests.mozilla.org", + name: "addon 1", + version: "1.0", + applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE + }]); + + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + + gUtilsBtn = gManagerWindow.document.getElementById("header-utils-btn"); + gUtilsMenu = gManagerWindow.document.getElementById("utils-menu"); + + run_next_test(); + }); +} + + +function end_test() { + close_manager(gManagerWindow, finish); +} + + +function wait_for_popup(aCallback) { + if (gUtilsMenu.state == "open") { + aCallback(); + return; + } + + gUtilsMenu.addEventListener("popupshown", function() { + gUtilsMenu.removeEventListener("popupshown", arguments.callee, false); + info("Utilities menu shown"); + aCallback(); + }, false); +} + +function wait_for_hide(aCallback) { + if (gUtilsMenu.state == "closed") { + aCallback(); + return; + } + + gUtilsMenu.addEventListener("popuphidden", function() { + gUtilsMenu.removeEventListener("popuphidden", arguments.callee, false); + info("Utilities menu hidden"); + aCallback(); + }, false); +} + +add_test(function() { + gSetDefault = gManagerWindow.document.getElementById("utils-autoUpdateDefault"); + gResetToAutomatic = gManagerWindow.document.getElementById("utils-resetAddonUpdatesToAutomatic"); + gResetToManual = gManagerWindow.document.getElementById("utils-resetAddonUpdatesToManual"); + + info("Ensuring default prefs are set to true"); + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, true); + Services.prefs.setBoolPref(PREF_AUTOUPDATE_DEFAULT, true); + + wait_for_popup(function() { + is(gSetDefault.getAttribute("checked"), "true", + "#1 Set Default menuitem should be checked"); + is_element_visible(gResetToAutomatic, + "#1 Reset to Automatic menuitem should be visible"); + is_element_hidden(gResetToManual, + "#1 Reset to Manual menuitem should be hidden"); + + var listener = { + onPropertyChanged: function(aAddon, aProperties) { + AddonManager.removeAddonListener(listener); + is(aAddon.id, gProvider.addons[0].id, + "Should get onPropertyChanged event for correct addon"); + ok(!("applyBackgroundUpdates" in aProperties), + "Should have gotten applyBackgroundUpdates in properties array"); + is(aAddon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT, + "Addon.applyBackgroundUpdates should have been reset to default"); + + info("Setting Addon.applyBackgroundUpdates back to disabled"); + aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE; + + wait_for_hide(run_next_test); + } + }; + AddonManager.addAddonListener(listener); + + info("Clicking Reset to Automatic menuitem"); + EventUtils.synthesizeMouseAtCenter(gResetToAutomatic, { }, gManagerWindow); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + info("Disabling extensions.update.enabled"); + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, false); + + wait_for_popup(function() { + isnot(gSetDefault.getAttribute("checked"), "true", + "#2 Set Default menuitem should not be checked"); + is_element_visible(gResetToAutomatic, + "#2 Reset to Automatic menuitem should be visible"); + is_element_hidden(gResetToManual, + "#2 Reset to Manual menuitem should be hidden"); + + wait_for_hide(run_next_test); + + info("Clicking Set Default menuitem to reenable"); + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), + "extensions.update.enabled should be true after the previous test"); + ok(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), + "extensions.update.autoUpdateDefault should be true after the previous test"); + + info("Disabling both extensions.update.enabled and extensions.update.autoUpdateDefault"); + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, false); + Services.prefs.setBoolPref(PREF_AUTOUPDATE_DEFAULT, false); + + wait_for_popup(function() { + isnot(gSetDefault.getAttribute("checked"), "true", + "#3 Set Default menuitem should not be checked"); + is_element_hidden(gResetToAutomatic, + "#3 Reset to automatic menuitem should be hidden"); + is_element_visible(gResetToManual, + "#3 Reset to manual menuitem should be visible"); + + wait_for_hide(run_next_test); + + info("Clicking Set Default menuitem to reenable"); + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), + "extensions.update.enabled should be true after the previous test"); + ok(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), + "extensions.update.autoUpdateDefault should be true after the previous test"); + + info("clicking the button to disable extensions.update.autoUpdateDefault"); + wait_for_popup(function() { + is(gSetDefault.getAttribute("checked"), "true", + "#4 Set Default menuitem should be checked"); + is_element_visible(gResetToAutomatic, + "#4 Reset to Automatic menuitem should be visible"); + is_element_hidden(gResetToManual, + "#4 Reset to Manual menuitem should be hidden"); + + wait_for_hide(run_next_test); + + info("Clicking Set Default menuitem to disable"); + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), + "extensions.update.enabled should be true after the previous test"); + is(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), false, + "extensions.update.autoUpdateDefault should be false after the previous test"); + + wait_for_popup(function() { + isnot(gSetDefault.getAttribute("checked"), "true", + "#5 Set Default menuitem should not be checked"); + is_element_hidden(gResetToAutomatic, + "#5 Reset to automatic menuitem should be hidden"); + is_element_visible(gResetToManual, + "#5 Reset to manual menuitem should be visible"); + + var listener = { + onPropertyChanged: function(aAddon, aProperties) { + AddonManager.removeAddonListener(listener); + is(aAddon.id, gProvider.addons[0].id, + "Should get onPropertyChanged event for correct addon"); + ok(!("applyBackgroundUpdates" in aProperties), + "Should have gotten applyBackgroundUpdates in properties array"); + is(aAddon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT, + "Addon.applyBackgroundUpdates should have been reset to default"); + + info("Setting Addon.applyBackgroundUpdates back to disabled"); + aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE; + + wait_for_hide(run_next_test); + } + }; + AddonManager.addAddonListener(listener); + + info("Clicking Reset to Manual menuitem"); + EventUtils.synthesizeMouseAtCenter(gResetToManual, { }, gManagerWindow); + + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + wait_for_popup(function() { + isnot(gSetDefault.getAttribute("checked"), "true", + "#6 Set Default menuitem should not be checked"); + is_element_hidden(gResetToAutomatic, + "#6 Reset to automatic menuitem should be hidden"); + is_element_visible(gResetToManual, + "#6 Reset to manual menuitem should be visible"); + + wait_for_hide(run_next_test); + + info("Clicking Set Default menuitem"); + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + + +add_test(function() { + wait_for_popup(function() { + is(gSetDefault.getAttribute("checked"), "true", + "#7 Set Default menuitem should be checked"); + is_element_visible(gResetToAutomatic, + "#7 Reset to Automatic menuitem should be visible"); + is_element_hidden(gResetToManual, + "#7 Reset to Manual menuitem should be hidden"); + + wait_for_hide(run_next_test); + + gUtilsMenu.hidePopup(); + }); + + info("Opening utilities menu"); + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); +}); + |