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