Bug 1436165 - Change extensionControlled strings for home page and new tab page, r?mstriemer r?jaws
MozReview-Commit-ID: KcWiCm5nbeB
--- a/browser/components/preferences/in-content/extensionControlled.js
+++ b/browser/components/preferences/in-content/extensionControlled.js
@@ -91,70 +91,70 @@ function getControllingExtensionEls(sett
async function getControllingExtension(type, settingName) {
let info = await getControllingExtensionInfo(type, settingName);
let addon = info && info.id
&& await AddonManager.getAddonByID(info.id);
return addon;
}
-async function handleControllingExtension(type, settingName) {
+async function handleControllingExtension(type, settingName, stringId) {
let addon = await getControllingExtension(type, settingName);
// Sometimes the ExtensionSettingsStore gets in a bad state where it thinks
// an extension is controlling a setting but the extension has been uninstalled
// outside of the regular lifecycle. If the extension isn't currently installed
// then we should treat the setting as not being controlled.
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1411046 for an example.
if (addon) {
extensionControlledIds[settingName] = addon.id;
- showControllingExtension(settingName, addon);
+ showControllingExtension(settingName, addon, stringId);
} else {
let elements = getControllingExtensionEls(settingName);
if (extensionControlledIds[settingName]
&& !document.hidden
&& elements.button) {
showEnableExtensionMessage(settingName);
} else {
hideControllingExtension(settingName);
}
delete extensionControlledIds[settingName];
}
return !!addon;
}
-function getControllingExtensionFragment(settingName, addon, ...extraArgs) {
- let msg = document.getElementById("bundlePreferences")
- .getString(`extensionControlled.${settingName}`);
+function getControllingExtensionFragment(stringId, addon, ...extraArgs) {
+ let msg = document.getElementById("bundlePreferences").getString(stringId);
let image = document.createElement("image");
const defaultIcon = "chrome://mozapps/skin/extensions/extensionGeneric.svg";
image.setAttribute("src", addon.iconURL || defaultIcon);
image.classList.add("extension-controlled-icon");
let addonBit = document.createDocumentFragment();
addonBit.appendChild(image);
addonBit.appendChild(document.createTextNode(" " + addon.name));
return BrowserUtils.getLocalizedFragment(document, msg, addonBit, ...extraArgs);
}
-async function showControllingExtension(settingName, addon) {
+async function showControllingExtension(
+ settingName, addon, stringId = `extensionControlled.${settingName}`) {
// Tell the user what extension is controlling the setting.
let elements = getControllingExtensionEls(settingName);
let extraArgs = getExtensionControlledArgs(settingName);
elements.section.classList.remove("extension-controlled-disabled");
let description = elements.description;
// Remove the old content from the description.
while (description.firstChild) {
description.firstChild.remove();
}
let fragment = getControllingExtensionFragment(
- settingName, addon, ...extraArgs);
+ stringId, addon, ...extraArgs);
description.appendChild(fragment);
if (elements.button) {
elements.button.hidden = false;
}
// Show the controlling extension row and hide the old label.
elements.section.hidden = false;
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -36,16 +36,17 @@ const PREF_SHOW_PLUGINS_IN_LIST = "brows
const PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS =
"browser.download.hide_plugins_without_extensions";
// Strings to identify ExtensionSettingsStore overrides
const CONTAINERS_KEY = "privacy.containers";
const HOMEPAGE_OVERRIDE_KEY = "homepage_override";
const URL_OVERRIDES_TYPE = "url_overrides";
const NEW_TAB_KEY = "newTabURL";
+const NEW_TAB_STRING_ID = "extensionControlled.newTabURL2";
/*
* Preferences where we store handling information about the feed type.
*
* browser.feeds.handler
* - "bookmarks", "reader" (clarified further using the .default preference),
* or "ask" -- indicates the default handler being used to process feeds;
* "bookmarks" is obsolete; to specify that the handler is bookmarks,
@@ -354,20 +355,22 @@ var gMainPane = {
this.updatePerformanceSettingsBox({ duringChangeEvent: false });
// set up the "use current page" label-changing listener
this._updateUseCurrentButton();
window.addEventListener("focus", this._updateUseCurrentButton.bind(this));
this.updateBrowserStartupLastSession();
- handleControllingExtension(URL_OVERRIDES_TYPE, NEW_TAB_KEY);
+ handleControllingExtension(
+ URL_OVERRIDES_TYPE, NEW_TAB_KEY, NEW_TAB_STRING_ID);
let newTabObserver = {
observe(subject, topic, data) {
- handleControllingExtension(URL_OVERRIDES_TYPE, NEW_TAB_KEY);
+ handleControllingExtension(
+ URL_OVERRIDES_TYPE, NEW_TAB_KEY, NEW_TAB_STRING_ID);
},
};
Services.obs.addObserver(newTabObserver, "newtab-url-changed");
window.addEventListener("unload", () => {
Services.obs.removeObserver(newTabObserver, "newtab-url-changed");
});
let connectionSettingsLink = document.getElementById("connectionSettingsLearnMore");
@@ -767,17 +770,18 @@ var gMainPane = {
}
if (homePref.locked) {
// An extension can't control these settings if they're locked.
hideControllingExtension(HOMEPAGE_OVERRIDE_KEY);
setInputDisabledStates(false);
} else {
// Asynchronously update the extension controlled UI.
- handleControllingExtension(PREF_SETTING_TYPE, HOMEPAGE_OVERRIDE_KEY)
+ handleControllingExtension(
+ PREF_SETTING_TYPE, HOMEPAGE_OVERRIDE_KEY, "extensionControlled.homepage_override2")
.then(setInputDisabledStates);
}
// If the pref is set to about:home or about:newtab, set the value to ""
// to show the placeholder text (about:home title) rather than
// exposing those URLs to users.
let defaultBranch = Services.prefs.getDefaultBranch("");
let defaultValue = defaultBranch.getComplexValue("browser.startup.homepage",
@@ -1100,17 +1104,18 @@ var gMainPane = {
null, null, this.updateProxySettingsUI.bind(this));
},
// Update the UI to show the proper description depending on whether an
// extension is in control or not.
async updateProxySettingsUI() {
let controllingExtension = await getControllingExtension(PREF_SETTING_TYPE, PROXY_KEY);
let fragment = controllingExtension ?
- getControllingExtensionFragment(PROXY_KEY, controllingExtension, this._brandShortName) :
+ getControllingExtensionFragment(
+ "extensionControlled.proxyConfig", controllingExtension, this._brandShortName) :
BrowserUtils.getLocalizedFragment(
document,
this._prefsBundle.getString("connectionDesc.label"),
this._brandShortName);
let description = document.getElementById("connectionSettingsDescription");
// Remove the old content from the description.
while (description.firstChild) {
--- a/browser/components/preferences/in-content/tests/browser_extension_controlled.js
+++ b/browser/components/preferences/in-content/tests/browser_extension_controlled.js
@@ -101,17 +101,17 @@ add_task(async function testExtensionCon
// Install an extension that will set the homepage.
await installAddon("set_homepage.xpi");
await waitForMessageShown("browserHomePageExtensionContent");
// The homepage has been set by the extension, the user is notified and it isn't editable.
let controlledLabel = controlledContent.querySelector("description");
is(homepagePref(), extensionHomepage, "homepage is set by extension");
// There are two spaces before "set_homepage" because it's " <image /> set_homepage".
- is(controlledLabel.textContent, "An extension, set_homepage, controls your home page.",
+ is(controlledLabel.textContent, "An extension, set_homepage, is controlling your home page.",
"The user is notified that an extension is controlling the homepage");
is(controlledContent.hidden, false, "The extension controlled row is hidden");
is(doc.getElementById("browserHomePage").disabled, true, "The homepage input is disabled");
// Disable the extension.
let enableMessageShown = waitForEnableMessage(controlledContent.id);
doc.getElementById("disableHomePageExtension").click();
await enableMessageShown;
@@ -291,17 +291,17 @@ add_task(async function testExtensionCon
await installAddon("set_newtab.xpi");
await waitForMessageShown("browserNewTabExtensionContent");
// The new tab page has been set by the extension and the user is notified.
let controlledLabel = controlledContent.querySelector("description");
ok(aboutNewTabService.newTabURL.startsWith("moz-extension:"), "new tab url is set by extension");
// There are two spaces before "set_newtab" because it's " <image /> set_newtab".
- is(controlledLabel.textContent, "An extension, set_newtab, controls your New Tab page.",
+ is(controlledLabel.textContent, "An extension, set_newtab, is controlling your New Tab page.",
"The user is notified that an extension is controlling the new tab page");
is(controlledContent.hidden, false, "The extension controlled row is hidden");
// Disable the extension.
doc.getElementById("disableNewTabExtension").click();
// Verify the user is notified how to enable the extension.
await waitForEnableMessage(controlledContent.id);
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -270,21 +270,21 @@ searchResults.needHelp3=Need help? Visit
# LOCALIZATION NOTE (searchResults.needHelpSupportLink): %S will be replaced with the browser name.
searchResults.needHelpSupportLink=%S Support
# LOCALIZATION NOTE %S is the default value of the `dom.ipc.processCount` pref.
defaultContentProcessCount=%S (default)
# LOCALIZATION NOTE (extensionControlled.homepage_override):
# This string is shown to notify the user that their home page is being controlled by an extension.
-extensionControlled.homepage_override = An extension, %S, controls your home page.
+extensionControlled.homepage_override2 = An extension, %S, is controlling your home page.
# LOCALIZATION NOTE (extensionControlled.newTabURL):
# This string is shown to notify the user that their new tab page is being controlled by an extension.
-extensionControlled.newTabURL = An extension, %S, controls your New Tab page.
+extensionControlled.newTabURL2 = An extension, %S, is controlling your New Tab page.
# LOCALIZATION NOTE (extensionControlled.defaultSearch):
# This string is shown to notify the user that the default search engine is being controlled
# by an extension. %S is the icon and name of the extension.
extensionControlled.defaultSearch = An extension, %S, has set your default search engine.
# LOCALIZATION NOTE (extensionControlled.privacy.containers):
# This string is shown to notify the user that Container Tabs are being enabled by an extension