1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/browser/browser_bug586574.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,279 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +// Bug 586574 - Provide way to set a default for automatic updates 1.9 +// Bug 710064 - Make the "Update Add-ons Automatically" checkbox state 1.10 +// also depend on the extensions.update.enabled pref 1.11 + 1.12 +// TEST_PATH=toolkit/mozapps/extensions/test/browser/browser_bug586574.js make -C obj-ff mochitest-browser-chrome 1.13 + 1.14 +const PREF_UPDATE_ENABLED = "extensions.update.enabled"; 1.15 +const PREF_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault"; 1.16 + 1.17 +var gManagerWindow; 1.18 +var gProvider; 1.19 + 1.20 +var gUtilsBtn; 1.21 +var gUtilsMenu; 1.22 +var gDropdownMenu; 1.23 +var gSetDefault; 1.24 +var gResetToAutomatic; 1.25 +var gResetToManual; 1.26 + 1.27 +function test() { 1.28 + waitForExplicitFinish(); 1.29 + 1.30 + gProvider = new MockProvider(); 1.31 + 1.32 + gProvider.createAddons([{ 1.33 + id: "addon1@tests.mozilla.org", 1.34 + name: "addon 1", 1.35 + version: "1.0", 1.36 + applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE 1.37 + }]); 1.38 + 1.39 + open_manager("addons://list/extension", function(aWindow) { 1.40 + gManagerWindow = aWindow; 1.41 + 1.42 + gUtilsBtn = gManagerWindow.document.getElementById("header-utils-btn"); 1.43 + gUtilsMenu = gManagerWindow.document.getElementById("utils-menu"); 1.44 + 1.45 + run_next_test(); 1.46 + }); 1.47 +} 1.48 + 1.49 + 1.50 +function end_test() { 1.51 + close_manager(gManagerWindow, finish); 1.52 +} 1.53 + 1.54 + 1.55 +function wait_for_popup(aCallback) { 1.56 + if (gUtilsMenu.state == "open") { 1.57 + aCallback(); 1.58 + return; 1.59 + } 1.60 + 1.61 + gUtilsMenu.addEventListener("popupshown", function() { 1.62 + gUtilsMenu.removeEventListener("popupshown", arguments.callee, false); 1.63 + info("Utilities menu shown"); 1.64 + aCallback(); 1.65 + }, false); 1.66 +} 1.67 + 1.68 +function wait_for_hide(aCallback) { 1.69 + if (gUtilsMenu.state == "closed") { 1.70 + aCallback(); 1.71 + return; 1.72 + } 1.73 + 1.74 + gUtilsMenu.addEventListener("popuphidden", function() { 1.75 + gUtilsMenu.removeEventListener("popuphidden", arguments.callee, false); 1.76 + info("Utilities menu hidden"); 1.77 + aCallback(); 1.78 + }, false); 1.79 +} 1.80 + 1.81 +add_test(function() { 1.82 + gSetDefault = gManagerWindow.document.getElementById("utils-autoUpdateDefault"); 1.83 + gResetToAutomatic = gManagerWindow.document.getElementById("utils-resetAddonUpdatesToAutomatic"); 1.84 + gResetToManual = gManagerWindow.document.getElementById("utils-resetAddonUpdatesToManual"); 1.85 + 1.86 + info("Ensuring default prefs are set to true"); 1.87 + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, true); 1.88 + Services.prefs.setBoolPref(PREF_AUTOUPDATE_DEFAULT, true); 1.89 + 1.90 + wait_for_popup(function() { 1.91 + is(gSetDefault.getAttribute("checked"), "true", 1.92 + "#1 Set Default menuitem should be checked"); 1.93 + is_element_visible(gResetToAutomatic, 1.94 + "#1 Reset to Automatic menuitem should be visible"); 1.95 + is_element_hidden(gResetToManual, 1.96 + "#1 Reset to Manual menuitem should be hidden"); 1.97 + 1.98 + var listener = { 1.99 + onPropertyChanged: function(aAddon, aProperties) { 1.100 + AddonManager.removeAddonListener(listener); 1.101 + is(aAddon.id, gProvider.addons[0].id, 1.102 + "Should get onPropertyChanged event for correct addon"); 1.103 + ok(!("applyBackgroundUpdates" in aProperties), 1.104 + "Should have gotten applyBackgroundUpdates in properties array"); 1.105 + is(aAddon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT, 1.106 + "Addon.applyBackgroundUpdates should have been reset to default"); 1.107 + 1.108 + info("Setting Addon.applyBackgroundUpdates back to disabled"); 1.109 + aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE; 1.110 + 1.111 + wait_for_hide(run_next_test); 1.112 + } 1.113 + }; 1.114 + AddonManager.addAddonListener(listener); 1.115 + 1.116 + info("Clicking Reset to Automatic menuitem"); 1.117 + EventUtils.synthesizeMouseAtCenter(gResetToAutomatic, { }, gManagerWindow); 1.118 + }); 1.119 + 1.120 + info("Opening utilities menu"); 1.121 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.122 +}); 1.123 + 1.124 + 1.125 +add_test(function() { 1.126 + info("Disabling extensions.update.enabled"); 1.127 + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, false); 1.128 + 1.129 + wait_for_popup(function() { 1.130 + isnot(gSetDefault.getAttribute("checked"), "true", 1.131 + "#2 Set Default menuitem should not be checked"); 1.132 + is_element_visible(gResetToAutomatic, 1.133 + "#2 Reset to Automatic menuitem should be visible"); 1.134 + is_element_hidden(gResetToManual, 1.135 + "#2 Reset to Manual menuitem should be hidden"); 1.136 + 1.137 + wait_for_hide(run_next_test); 1.138 + 1.139 + info("Clicking Set Default menuitem to reenable"); 1.140 + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); 1.141 + }); 1.142 + 1.143 + info("Opening utilities menu"); 1.144 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.145 +}); 1.146 + 1.147 + 1.148 +add_test(function() { 1.149 + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), 1.150 + "extensions.update.enabled should be true after the previous test"); 1.151 + ok(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), 1.152 + "extensions.update.autoUpdateDefault should be true after the previous test"); 1.153 + 1.154 + info("Disabling both extensions.update.enabled and extensions.update.autoUpdateDefault"); 1.155 + Services.prefs.setBoolPref(PREF_UPDATE_ENABLED, false); 1.156 + Services.prefs.setBoolPref(PREF_AUTOUPDATE_DEFAULT, false); 1.157 + 1.158 + wait_for_popup(function() { 1.159 + isnot(gSetDefault.getAttribute("checked"), "true", 1.160 + "#3 Set Default menuitem should not be checked"); 1.161 + is_element_hidden(gResetToAutomatic, 1.162 + "#3 Reset to automatic menuitem should be hidden"); 1.163 + is_element_visible(gResetToManual, 1.164 + "#3 Reset to manual menuitem should be visible"); 1.165 + 1.166 + wait_for_hide(run_next_test); 1.167 + 1.168 + info("Clicking Set Default menuitem to reenable"); 1.169 + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); 1.170 + }); 1.171 + 1.172 + info("Opening utilities menu"); 1.173 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.174 +}); 1.175 + 1.176 + 1.177 +add_test(function() { 1.178 + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), 1.179 + "extensions.update.enabled should be true after the previous test"); 1.180 + ok(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), 1.181 + "extensions.update.autoUpdateDefault should be true after the previous test"); 1.182 + 1.183 + info("clicking the button to disable extensions.update.autoUpdateDefault"); 1.184 + wait_for_popup(function() { 1.185 + is(gSetDefault.getAttribute("checked"), "true", 1.186 + "#4 Set Default menuitem should be checked"); 1.187 + is_element_visible(gResetToAutomatic, 1.188 + "#4 Reset to Automatic menuitem should be visible"); 1.189 + is_element_hidden(gResetToManual, 1.190 + "#4 Reset to Manual menuitem should be hidden"); 1.191 + 1.192 + wait_for_hide(run_next_test); 1.193 + 1.194 + info("Clicking Set Default menuitem to disable"); 1.195 + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); 1.196 + }); 1.197 + 1.198 + info("Opening utilities menu"); 1.199 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.200 +}); 1.201 + 1.202 + 1.203 +add_test(function() { 1.204 + ok(Services.prefs.getBoolPref(PREF_UPDATE_ENABLED), 1.205 + "extensions.update.enabled should be true after the previous test"); 1.206 + is(Services.prefs.getBoolPref(PREF_AUTOUPDATE_DEFAULT), false, 1.207 + "extensions.update.autoUpdateDefault should be false after the previous test"); 1.208 + 1.209 + wait_for_popup(function() { 1.210 + isnot(gSetDefault.getAttribute("checked"), "true", 1.211 + "#5 Set Default menuitem should not be checked"); 1.212 + is_element_hidden(gResetToAutomatic, 1.213 + "#5 Reset to automatic menuitem should be hidden"); 1.214 + is_element_visible(gResetToManual, 1.215 + "#5 Reset to manual menuitem should be visible"); 1.216 + 1.217 + var listener = { 1.218 + onPropertyChanged: function(aAddon, aProperties) { 1.219 + AddonManager.removeAddonListener(listener); 1.220 + is(aAddon.id, gProvider.addons[0].id, 1.221 + "Should get onPropertyChanged event for correct addon"); 1.222 + ok(!("applyBackgroundUpdates" in aProperties), 1.223 + "Should have gotten applyBackgroundUpdates in properties array"); 1.224 + is(aAddon.applyBackgroundUpdates, AddonManager.AUTOUPDATE_DEFAULT, 1.225 + "Addon.applyBackgroundUpdates should have been reset to default"); 1.226 + 1.227 + info("Setting Addon.applyBackgroundUpdates back to disabled"); 1.228 + aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_DISABLE; 1.229 + 1.230 + wait_for_hide(run_next_test); 1.231 + } 1.232 + }; 1.233 + AddonManager.addAddonListener(listener); 1.234 + 1.235 + info("Clicking Reset to Manual menuitem"); 1.236 + EventUtils.synthesizeMouseAtCenter(gResetToManual, { }, gManagerWindow); 1.237 + 1.238 + }); 1.239 + 1.240 + info("Opening utilities menu"); 1.241 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.242 +}); 1.243 + 1.244 + 1.245 +add_test(function() { 1.246 + wait_for_popup(function() { 1.247 + isnot(gSetDefault.getAttribute("checked"), "true", 1.248 + "#6 Set Default menuitem should not be checked"); 1.249 + is_element_hidden(gResetToAutomatic, 1.250 + "#6 Reset to automatic menuitem should be hidden"); 1.251 + is_element_visible(gResetToManual, 1.252 + "#6 Reset to manual menuitem should be visible"); 1.253 + 1.254 + wait_for_hide(run_next_test); 1.255 + 1.256 + info("Clicking Set Default menuitem"); 1.257 + EventUtils.synthesizeMouseAtCenter(gSetDefault, { }, gManagerWindow); 1.258 + }); 1.259 + 1.260 + info("Opening utilities menu"); 1.261 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.262 +}); 1.263 + 1.264 + 1.265 +add_test(function() { 1.266 + wait_for_popup(function() { 1.267 + is(gSetDefault.getAttribute("checked"), "true", 1.268 + "#7 Set Default menuitem should be checked"); 1.269 + is_element_visible(gResetToAutomatic, 1.270 + "#7 Reset to Automatic menuitem should be visible"); 1.271 + is_element_hidden(gResetToManual, 1.272 + "#7 Reset to Manual menuitem should be hidden"); 1.273 + 1.274 + wait_for_hide(run_next_test); 1.275 + 1.276 + gUtilsMenu.hidePopup(); 1.277 + }); 1.278 + 1.279 + info("Opening utilities menu"); 1.280 + EventUtils.synthesizeMouseAtCenter(gUtilsBtn, { }, gManagerWindow); 1.281 +}); 1.282 +