Commit 17077953 authored by Kirk Steuber's avatar Kirk Steuber
Browse files

Bug 1429157 - Create an enterprise policy to prevent profile refreshes r=Felipe,Gijs

MozReview-Commit-ID: K7yxDm0H7eH

--HG--
extra : rebase_source : 200cd53aa37f41eeb85baaa78f93c70a80d18539
parent 0499d2f2
......@@ -291,6 +291,15 @@ var Policies = {
}
},
"DisableProfileRefresh": {
onBeforeUIStartup(manager, param) {
if (param) {
manager.disallowFeature("profileRefresh");
setAndLockPref("browser.disableResetPrompt", true);
}
}
},
"DisableSafeMode": {
onBeforeUIStartup(manager, param) {
if (param) {
......
......@@ -234,6 +234,13 @@
"type": "boolean"
},
"DisableProfileRefresh": {
"description": "Disables the \"Refresh Firefox\" button in about:support",
"first_available": "60.0",
"type": "boolean"
},
"DisableSafeMode": {
"description": "Prevents ability to restart in safe mode.",
"first_available": "60.0",
......
......@@ -37,6 +37,7 @@ support-files =
[browser_policy_disable_pocket.js]
[browser_policy_disable_popup_blocker.js]
[browser_policy_disable_privatebrowsing.js]
[browser_policy_disable_profile_reset.js]
[browser_policy_disable_safemode.js]
[browser_policy_disable_shield.js]
[browser_policy_disable_telemetry.js]
......
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
let {ResetProfile} = ChromeUtils.import("resource://gre/modules/ResetProfile.jsm", {});
// For this test to work properly, this profile actually needs to be
// "reset-able", which requires that it be recognized by the profile service
add_task(async function setup() {
let profileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile);
let profileName = profileDirectory.leafName;
let profileService = Cc["@mozilla.org/toolkit/profile-service;1"].
getService(Ci.nsIToolkitProfileService);
let createdProfile = profileService.createProfile(profileDirectory, profileName);
profileService.flush();
registerCleanupFunction(async function cleanup() {
// Pass false to remove it from the profile service without deleting files.
createdProfile.remove(false);
});
});
async function test_reset_disabled({disabled}) {
is(ResetProfile.resetSupported(), !disabled,
"Reset should only be supported if policy has not been applied");
is(Services.prefs.getBoolPref("browser.disableResetPrompt", undefined),
disabled, "Reset prompt should only be shown if policy has not been applied");
is(Services.prefs.prefIsLocked("browser.disableResetPrompt"), disabled,
"Reset prompt pref should be locked if the policy has been applied");
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:support");
// eslint-disable-next-line no-shadow
await ContentTask.spawn(tab.linkedBrowser, {disabled}, async function({disabled}) {
let resetBox = content.document.getElementById("reset-box");
let elementStyle = content.window.getComputedStyle(resetBox);
let expectedDisplayValue = disabled ? "none" : "block";
is(elementStyle.display, expectedDisplayValue,
"about:support Reset button box should be hidden");
});
await BrowserTestUtils.removeTab(tab);
}
add_task(async function test_initial_conditions() {
await test_reset_disabled({disabled: false});
});
add_task(async function test_policy_disable_reset() {
await setupPolicyEngineWithJson({
"policies": {
"DisableProfileRefresh": true
}
});
await test_reset_disabled({disabled: true});
});
......@@ -19,6 +19,9 @@ var ResetProfile = {
* @return boolean whether reset is supported.
*/
resetSupported() {
if (Services.policies && !Services.policies.isAllowed("profileRefresh")) {
return false;
}
// Reset is only supported if the self-migrator used for reset exists.
let migrator = "@mozilla.org/profile/migrator;1?app=" + MOZ_BUILD_APP +
"&type=" + MOZ_APP_NAME;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment