Bug 1436165 - Change extensionControlled strings for home page and new tab page, r?mstriemer r?jaws draft
authorBob Silverberg <bsilverberg@mozilla.com>
Wed, 07 Feb 2018 14:03:23 -0500
changeset 754629 1cf7426c02e2c1b7bfbf56a9aa6f7ecaba2e2854
parent 754572 e43f2f6ea111c2d059d95fa9a71516b869a69698
push id98953
push userbmo:bob.silverberg@gmail.com
push dateTue, 13 Feb 2018 22:56:09 +0000
reviewersmstriemer, jaws
bugs1436165
milestone60.0a1
Bug 1436165 - Change extensionControlled strings for home page and new tab page, r?mstriemer r?jaws MozReview-Commit-ID: KcWiCm5nbeB
browser/components/preferences/in-content/extensionControlled.js
browser/components/preferences/in-content/main.js
browser/components/preferences/in-content/tests/browser_extension_controlled.js
browser/locales/en-US/chrome/browser/preferences/preferences.properties
--- 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