diff --git a/browser/components/enterprisepolicies/Policies.jsm b/browser/components/enterprisepolicies/Policies.jsm index 010085e0dd11..8b39fa60139d 100644 --- a/browser/components/enterprisepolicies/Policies.jsm +++ b/browser/components/enterprisepolicies/Policies.jsm @@ -77,18 +77,6 @@ var Policies = { }, }, - AppAutoUpdate: { - onBeforeUIStartup(manager, param) { - // Logic feels a bit reversed here, but it's correct. If AppAutoUpdate is - // true, we disallow turning off auto updating, and visa versa. - if (param) { - manager.disallowFeature("app-auto-updates-off"); - } else { - manager.disallowFeature("app-auto-updates-on"); - } - }, - }, - AppUpdateURL: { onBeforeAddons(manager, param) { setDefaultPref("app.update.url", param.href); diff --git a/browser/components/enterprisepolicies/schemas/policies-schema.json b/browser/components/enterprisepolicies/schemas/policies-schema.json index cc5224bd5244..90164c17b589 100644 --- a/browser/components/enterprisepolicies/schemas/policies-schema.json +++ b/browser/components/enterprisepolicies/schemas/policies-schema.json @@ -17,10 +17,6 @@ } }, - "AppAutoUpdate": { - "type": "boolean" - }, - "AppUpdateURL": { "type": "URL" }, @@ -724,6 +720,9 @@ "type": "number", "enum": [-1, 0, 1] }, + "app.update.auto": { + "type": "boolean" + }, "browser.bookmarks.autoExportHTML": { "type": "boolean" }, diff --git a/browser/components/enterprisepolicies/tests/browser/browser.ini b/browser/components/enterprisepolicies/tests/browser/browser.ini index 410a2aca6aa5..f589e23abcc7 100644 --- a/browser/components/enterprisepolicies/tests/browser/browser.ini +++ b/browser/components/enterprisepolicies/tests/browser/browser.ini @@ -16,7 +16,6 @@ support-files = skip-if = os != 'mac' [browser_policies_notice_in_aboutpreferences.js] [browser_policies_setAndLockPref_API.js] -[browser_policy_app_auto_update.js] [browser_policy_app_update.js] [browser_policy_block_about.js] [browser_policy_block_set_desktop_background.js] diff --git a/browser/components/enterprisepolicies/tests/browser/browser_policy_app_auto_update.js b/browser/components/enterprisepolicies/tests/browser/browser_policy_app_auto_update.js deleted file mode 100644 index 5af081042b26..000000000000 --- a/browser/components/enterprisepolicies/tests/browser/browser_policy_app_auto_update.js +++ /dev/null @@ -1,79 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; -ChromeUtils.defineModuleGetter( - this, - "UpdateUtils", - "resource://gre/modules/UpdateUtils.jsm" -); - -async function test_app_update_auto(expectedEnabled, expectedLocked) { - let actualEnabled = await UpdateUtils.getAppUpdateAutoEnabled(); - is( - actualEnabled, - expectedEnabled, - `Actual auto update enabled setting should match the expected value of ${expectedEnabled}` - ); - - let actualLocked = UpdateUtils.appUpdateAutoSettingIsLocked(); - is( - actualLocked, - expectedLocked, - `Auto update enabled setting ${ - expectedLocked ? "should" : "should not" - } be locked` - ); - - let setSuccess = true; - try { - await UpdateUtils.setAppUpdateAutoEnabled(actualEnabled); - } catch (error) { - setSuccess = false; - } - is( - setSuccess, - !expectedLocked, - `Setting auto update ${expectedLocked ? "should" : "should not"} fail` - ); - - await BrowserTestUtils.withNewTab("about:preferences", browser => { - is( - browser.contentDocument.getElementById("updateSettingsContainer").hidden, - expectedLocked, - `When auto update ${ - expectedLocked ? "is" : "isn't" - } locked, the corresponding preferences entry ${ - expectedLocked ? "should" : "shouldn't" - } be hidden` - ); - }); -} - -add_task(async function test_app_auto_update_policy() { - let originalUpdateAutoValue = await UpdateUtils.getAppUpdateAutoEnabled(); - registerCleanupFunction(async () => { - await UpdateUtils.setAppUpdateAutoEnabled(originalUpdateAutoValue); - }); - - await UpdateUtils.setAppUpdateAutoEnabled(true); - await test_app_update_auto(true, false); - - await setupPolicyEngineWithJson({ - policies: { - AppAutoUpdate: false, - }, - }); - await test_app_update_auto(false, true); - - await setupPolicyEngineWithJson({}); - await UpdateUtils.setAppUpdateAutoEnabled(false); - await test_app_update_auto(false, false); - - await setupPolicyEngineWithJson({ - policies: { - AppAutoUpdate: true, - }, - }); - await test_app_update_auto(true, true); -}); diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js index 9cbe2e2aaf22..c49e91a5c60b 100644 --- a/browser/components/preferences/in-content/main.js +++ b/browser/components/preferences/in-content/main.js @@ -639,12 +639,10 @@ var gMainPane = { }); setEventListener("showUpdateHistory", "command", gMainPane.showUpdates); - let updateDisabled = - Services.policies && !Services.policies.isAllowed("appUpdate"); - if (updateDisabled || UpdateUtils.appUpdateAutoSettingIsLocked()) { + if (Services.policies && !Services.policies.isAllowed("appUpdate")) { document.getElementById("updateAllowDescription").hidden = true; - document.getElementById("updateSettingsContainer").hidden = true; - if (updateDisabled && AppConstants.MOZ_MAINTENANCE_SERVICE) { + document.getElementById("updateRadioGroup").hidden = true; + if (AppConstants.MOZ_MAINTENANCE_SERVICE) { document.getElementById("useService").hidden = true; } } else { diff --git a/browser/locales/en-US/browser/policies/policies-descriptions.ftl b/browser/locales/en-US/browser/policies/policies-descriptions.ftl index 64052363dbc4..d73012c31f0e 100644 --- a/browser/locales/en-US/browser/policies/policies-descriptions.ftl +++ b/browser/locales/en-US/browser/policies/policies-descriptions.ftl @@ -11,8 +11,6 @@ policy-3rdparty = Set policies that WebExtensions can access via chrome.storage.managed. -policy-AppAutoUpdate = Enable or disable automatic application update. - policy-AppUpdateURL = Set custom app update URL. policy-Authentication = Configure integrated authentication for websites that support it. diff --git a/toolkit/modules/UpdateUtils.jsm b/toolkit/modules/UpdateUtils.jsm index e9a56fabf6bb..3ffb8a5e1376 100644 --- a/toolkit/modules/UpdateUtils.jsm +++ b/toolkit/modules/UpdateUtils.jsm @@ -163,22 +163,12 @@ var UpdateUtils = { * has selected "Automatically install updates" in about:preferences. * * On Windows, this setting is shared across all profiles for the installation - * and is read asynchronously from the file. On other operating systems, this + * and is read asynchrnously from the file. On other operating systems, this * setting is stored in a pref and is thus a per-profile setting. * * @return A Promise that resolves with a boolean. */ getAppUpdateAutoEnabled() { - if (Services.policies) { - if (!Services.policies.isAllowed("app-auto-updates-off")) { - // We aren't allowed to turn off auto-update - it is forced on. - return Promise.resolve(true); - } - if (!Services.policies.isAllowed("app-auto-updates-on")) { - // We aren't allowed to turn on auto-update - it is forced off. - return Promise.resolve(false); - } - } if (AppConstants.platform != "win") { // On platforms other than Windows the setting is stored in a preference. let prefValue = Services.prefs.getBoolPref( @@ -240,7 +230,7 @@ var UpdateUtils = { // Fallthrough for if the value could not be read or migrated. return DEFAULT_APP_UPDATE_AUTO; }) - .then(maybeUpdateAutoConfigChanged); + .then(maybeUpdateAutoConfigChanged.bind(this)); updateAutoIOPromise = readPromise; return readPromise; }, @@ -252,13 +242,9 @@ var UpdateUtils = { * in about:preferences. * * On Windows, this setting is shared across all profiles for the installation - * and is written asynchronously to the file. On other operating systems, this + * and is written asynchrnously to the file. On other operating systems, this * setting is stored in a pref and is thus a per-profile setting. * - * If this method is called when the setting is locked, the returned promise - * will reject. The lock status can be determined with - * UpdateUtils.appUpdateAutoSettingIsLocked() - * * @param enabled If set to true, automatic download and installation of * updates will be enabled. If set to false, this will be * disabled. @@ -271,20 +257,11 @@ var UpdateUtils = { * this operation simply sets a pref. */ setAppUpdateAutoEnabled(enabledValue) { - if (this.appUpdateAutoSettingIsLocked()) { - return Promise.reject( - "setAppUpdateAutoEnabled: Unable to change value of setting because " + - "it is locked by policy" - ); - } if (AppConstants.platform != "win") { // Only in Windows do we store the update config in the update directory let prefValue = !!enabledValue; Services.prefs.setBoolPref(PREF_APP_UPDATE_AUTO, prefValue); - // Rather than call maybeUpdateAutoConfigChanged, a pref observer has - // been connected to PREF_APP_UPDATE_AUTO. This allows us to catch direct - // changes to the pref (which Firefox shouldn't be doing, but the user - // might do in about:config). + maybeUpdateAutoConfigChanged(prefValue); return Promise.resolve(prefValue); } // Justification for the empty catch statement below: @@ -312,25 +289,10 @@ var UpdateUtils = { throw e; } }) - .then(maybeUpdateAutoConfigChanged); + .then(maybeUpdateAutoConfigChanged.bind(this)); updateAutoIOPromise = writePromise; return writePromise; }, - - /** - * This function should be used to determine if the automatic application - * update setting is locked by an enterprise policy - * - * @return true if the automatic update setting is currently locked. - * Otherwise, false. - */ - appUpdateAutoSettingIsLocked() { - return ( - Services.policies && - (!Services.policies.isAllowed("app-auto-updates-off") || - !Services.policies.isAllowed("app-auto-updates-on")) - ); - }, }; // Used for serializing reads and writes of the app update json config file so @@ -360,7 +322,11 @@ async function writeUpdateAutoConfig(enabledValue) { // Notifies observers if the value of app.update.auto has changed and returns // the value for app.update.auto. function maybeUpdateAutoConfigChanged(newValue) { - if (newValue !== updateAutoSettingCachedVal) { + // Don't notify on the first read when updateAutoSettingCachedVal is null. + if ( + updateAutoSettingCachedVal !== null && + newValue != updateAutoSettingCachedVal + ) { updateAutoSettingCachedVal = newValue; Services.obs.notifyObservers( null, @@ -370,18 +336,6 @@ function maybeUpdateAutoConfigChanged(newValue) { } return newValue; } -// On non-Windows platforms, the Update Auto Config is still stored as a pref. -// On those platforms, the best way to notify observers of this setting is -// just to propagate it from a pref observer -if (AppConstants.platform != "win") { - Services.prefs.addObserver( - PREF_APP_UPDATE_AUTO, - async (subject, topic, data) => { - let value = await UpdateUtils.getAppUpdateAutoEnabled(); - maybeUpdateAutoConfigChanged(value); - } - ); -} /* Get the distribution pref values, from defaults only */ function getDistributionPrefValue(aPrefName) {