Backed out changeset 6c69f8021a5e (bug 1373853) for accidentially landing. r=backout

This commit is contained in:
Sebastian Hengst 2017-09-22 16:54:27 +02:00
parent 4e05ed9eef
commit 3e4bc7a1e3
8 changed files with 107 additions and 175 deletions

View File

@ -6,8 +6,8 @@
/* import-globals-from ../../../../toolkit/mozapps/preferences/fontbuilder.js */
/* import-globals-from ../../../base/content/aboutDialog-appUpdater.js */
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionSettingsStore",
"resource://gre/modules/ExtensionSettingsStore.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionPreferencesManager",
"resource://gre/modules/ExtensionPreferencesManager.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AddonManager",
"resource://gre/modules/AddonManager.jsm");
@ -216,13 +216,6 @@ var gMainPane = {
this.updateBrowserStartupLastSession();
handleControllingExtension("url_overrides", "newTabURL");
Services.obs.addObserver({
observe(subject, topic, data) {
handleControllingExtension("url_overrides", "newTabURL");
},
}, "newtab-url-changed");
if (AppConstants.platform == "win") {
// Functionality for "Show tabs in taskbar" on Windows 7 and up.
try {
@ -256,11 +249,9 @@ var gMainPane = {
setEventListener("restoreDefaultHomePage", "command",
gMainPane.restoreDefaultHomePage);
setEventListener("disableHomePageExtension", "command",
gMainPane.makeDisableControllingExtension("prefs", "homepage_override"));
gMainPane.makeDisableControllingExtension("homepage_override"));
setEventListener("disableContainersExtension", "command",
gMainPane.makeDisableControllingExtension("prefs", "privacy.containers"));
setEventListener("disableNewTabExtension", "command",
gMainPane.makeDisableControllingExtension("url_overrides", "newTabURL"));
gMainPane.makeDisableControllingExtension("privacy.containers"));
setEventListener("chooseLanguage", "command",
gMainPane.showLanguages);
setEventListener("translationAttributionImage", "click",
@ -504,7 +495,7 @@ setEventListener("disableNewTabExtension", "command",
const containersEnabled = Services.prefs.getBoolPref("privacy.userContext.enabled");
const containersCheckbox = document.getElementById("browserContainersCheckbox");
containersCheckbox.checked = containersEnabled;
handleControllingExtension("prefs", "privacy.containers")
handleControllingExtension("privacy.containers")
.then((isControlled) => {
containersCheckbox.disabled = isControlled;
});
@ -676,7 +667,7 @@ setEventListener("disableNewTabExtension", "command",
this._updateUseCurrentButton();
// This is an async task.
handleControllingExtension("prefs", "homepage_override")
handleControllingExtension("homepage_override")
.then((isControlled) => {
// Disable or enable the inputs based on if this is controlled by an extension.
document.querySelectorAll("#browserHomePage, .homepage-button")
@ -770,7 +761,7 @@ setEventListener("disableNewTabExtension", "command",
useCurrent.label = useCurrent.getAttribute("label1");
// If the homepage is controlled by an extension then you can't use this.
if (await getControllingExtensionId("prefs", "homepage_override")) {
if (await getControllingExtensionId("homepage_override")) {
useCurrent.disabled = true;
return;
}
@ -818,9 +809,9 @@ setEventListener("disableNewTabExtension", "command",
homePage.value = homePage.defaultValue;
},
makeDisableControllingExtension(type, settingName) {
makeDisableControllingExtension(pref) {
return async function disableExtension() {
let id = await getControllingExtensionId(type, settingName);
let id = await getControllingExtensionId(pref);
let addon = await AddonManager.getAddonByID(id);
addon.userDisabled = true;
};
@ -2662,28 +2653,26 @@ function getLocalHandlerApp(aFile) {
let extensionControlledContentIds = {
"privacy.containers": "browserContainersExtensionContent",
"homepage_override": "browserHomePageExtensionContent",
"newTabURL": "browserNewTabExtensionContent",
};
/**
* Check if a pref is being managed by an extension.
*/
async function getControllingExtensionId(type, settingName) {
await ExtensionSettingsStore.initialize();
return ExtensionSettingsStore.getTopExtensionId(type, settingName);
function getControllingExtensionId(settingName) {
return ExtensionPreferencesManager.getControllingExtensionId(settingName);
}
function getControllingExtensionEl(settingName) {
return document.getElementById(extensionControlledContentIds[settingName]);
}
async function handleControllingExtension(type, settingName) {
let controllingExtensionId = await getControllingExtensionId(type, settingName);
async function handleControllingExtension(prefName) {
let controllingExtensionId = await getControllingExtensionId(prefName);
if (controllingExtensionId) {
showControllingExtension(settingName, controllingExtensionId);
showControllingExtension(prefName, controllingExtensionId);
} else {
hideControllingExtension(settingName);
hideControllingExtension(prefName);
}
return !!controllingExtensionId;

View File

@ -339,12 +339,6 @@
value="3"
id="browserStartupLastSession"/>
</radiogroup>
<hbox id="browserNewTabExtensionContent" align="center" hidden="true">
<description control="disableNewTabExtension" flex="1" />
<button id="disableNewTabExtension"
class="extension-controlled-button accessory-button"
label="&disableExtension.label;" />
</hbox>
</vbox>
</groupbox>
@ -354,7 +348,7 @@
hidden="true">
<caption><label>&homepage2.label;</label></caption>
<hbox id="browserHomePageExtensionContent" align="center" hidden="true">
<hbox id="browserHomePageExtensionContent" align="center">
<description control="disableHomePageExtension" flex="1" />
<button id="disableHomePageExtension"
class="extension-controlled-button accessory-button"

View File

@ -4,7 +4,6 @@ support-files =
privacypane_tests_perwindow.js
site_data_test.html
addons/set_homepage.xpi
addons/set_newtab.xpi
offline/offline.html
offline/manifest.appcache
@ -46,7 +45,6 @@ skip-if = os != "win" || (os == "win" && os_version == "6.1")
[browser_healthreport.js]
skip-if = true || !healthreport # Bug 1185403 for the "true"
[browser_homepages_filter_aboutpreferences.js]
[browser_extension_controlled.js]
[browser_layersacceleration.js]
[browser_masterpassword.js]
[browser_notifications_do_not_disturb.js]

View File

@ -1,131 +0,0 @@
XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
"@mozilla.org/browser/aboutnewtab-service;1",
"nsIAboutNewTabService");
const TEST_DIR = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
const CHROME_URL_ROOT = TEST_DIR + "/";
function getSupportsFile(path) {
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
let uri = Services.io.newURI(CHROME_URL_ROOT + path);
let fileurl = cr.convertChromeURL(uri);
return fileurl.QueryInterface(Ci.nsIFileURL);
}
function installAddon(xpiName) {
let filePath = getSupportsFile(`addons/${xpiName}`).file;
return new Promise((resolve, reject) => {
AddonManager.getInstallForFile(filePath, install => {
if (!install) {
throw new Error(`An install was not created for ${filePath}`);
}
install.addListener({
onDownloadFailed: reject,
onDownloadCancelled: reject,
onInstallFailed: reject,
onInstallCancelled: reject,
onInstallEnded: resolve
});
install.install();
});
});
}
function waitForMessageChange(messageId, cb) {
return new Promise((resolve) => {
let target = gBrowser.contentDocument.getElementById(messageId);
let observer = new MutationObserver(() => {
if (cb(target)) {
observer.disconnect();
resolve();
}
});
observer.observe(target, { attributes: true, attributeFilter: ["hidden"] });
});
}
function waitForMessageHidden(messageId) {
return waitForMessageChange(messageId, target => target.hidden);
}
function waitForMessageShown(messageId) {
return waitForMessageChange(messageId, target => !target.hidden);
}
add_task(async function testExtensionControlledHomepage() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
let doc = gBrowser.contentDocument;
is(gBrowser.currentURI.spec, "about:preferences#general",
"#general should be in the URI for about:preferences");
let homepagePref = () => Services.prefs.getCharPref("browser.startup.homepage");
let originalHomepagePref = homepagePref();
let extensionHomepage = "https://developer.mozilla.org/";
let controlledContent = doc.getElementById("browserHomePageExtensionContent");
// The homepage is set to the default and editable.
ok(originalHomepagePref != extensionHomepage, "homepage is empty by default");
is(doc.getElementById("browserHomePage").disabled, false, "The homepage input is enabled");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
// 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.",
"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.
doc.getElementById("disableHomePageExtension").click();
await waitForMessageHidden("browserHomePageExtensionContent");
is(homepagePref(), originalHomepagePref, "homepage is set back to default");
is(doc.getElementById("browserHomePage").disabled, false, "The homepage input is enabled");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
add_task(async function testExtensionControlledNewTab() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
let doc = gBrowser.contentDocument;
is(gBrowser.currentURI.spec, "about:preferences#general",
"#general should be in the URI for about:preferences");
let controlledContent = doc.getElementById("browserNewTabExtensionContent");
// The new tab is set to the default and message is hidden.
ok(!aboutNewTabService.newTabURL.startsWith("moz-extension:"), "new tab is not set");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
// Install an extension that will set the new tab page.
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.",
"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();
await waitForMessageHidden("browserNewTabExtensionContent");
ok(!aboutNewTabService.newTabURL.startsWith("moz-extension:"), "new tab page is set back to default");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -18,3 +18,94 @@ add_task(async function testSetHomepageUseCurrent() {
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
const TEST_DIR = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
const CHROME_URL_ROOT = TEST_DIR + "/";
function getSupportsFile(path) {
let cr = Cc["@mozilla.org/chrome/chrome-registry;1"]
.getService(Ci.nsIChromeRegistry);
let uri = Services.io.newURI(CHROME_URL_ROOT + path);
let fileurl = cr.convertChromeURL(uri);
return fileurl.QueryInterface(Ci.nsIFileURL);
}
function installAddon() {
let filePath = getSupportsFile("addons/set_homepage.xpi").file;
return new Promise((resolve, reject) => {
AddonManager.getInstallForFile(filePath, install => {
if (!install) {
throw new Error(`An install was not created for ${filePath}`);
}
install.addListener({
onDownloadFailed: reject,
onDownloadCancelled: reject,
onInstallFailed: reject,
onInstallCancelled: reject,
onInstallEnded: resolve
});
install.install();
});
});
}
function waitForMessageChange(cb) {
return new Promise((resolve) => {
let target = gBrowser.contentDocument.getElementById("browserHomePageExtensionContent");
let observer = new MutationObserver(() => {
if (cb(target)) {
observer.disconnect();
resolve();
}
});
observer.observe(target, { attributes: true, attributeFilter: ["hidden"] });
});
}
function waitForMessageHidden() {
return waitForMessageChange(target => target.hidden);
}
function waitForMessageShown() {
return waitForMessageChange(target => !target.hidden);
}
add_task(async function testExtensionControlledHomepage() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
let doc = gBrowser.contentDocument;
is(gBrowser.currentURI.spec, "about:preferences#general",
"#general should be in the URI for about:preferences");
let homepagePref = () => Services.prefs.getCharPref("browser.startup.homepage");
let originalHomepagePref = homepagePref();
let extensionHomepage = "https://developer.mozilla.org/";
let controlledContent = doc.getElementById("browserHomePageExtensionContent");
// The homepage is set to the default and editable.
ok(originalHomepagePref != extensionHomepage, "homepage is empty by default");
is(doc.getElementById("browserHomePage").disabled, false, "The homepage input is enabled");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
// Install an extension that will set the homepage.
await installAddon();
await waitForMessageShown();
// 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.",
"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.
doc.getElementById("disableHomePageExtension").click();
await waitForMessageHidden();
is(homepagePref(), originalHomepagePref, "homepage is set back to default");
is(doc.getElementById("browserHomePage").disabled, false, "The homepage input is enabled");
is(controlledContent.hidden, true, "The extension controlled row is hidden");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -282,10 +282,6 @@ defaultContentProcessCount=%S (default)
# 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.
# 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.
# LOCALIZATION NOTE (extensionControlled.privacy.containers):
# This string is shown to notify the user that Container Tabs are being enabled by an extension
# %S is the container addon controlling it

View File

@ -149,11 +149,6 @@ button > hbox > label {
padding-top: 32px;
}
#browserNewTabExtensionContent {
/* Indent the the extension info to match the radio buttons. */
margin-inline-start: 34px;
}
#browserHomePage {
margin-inline-start: 0;
margin-inline-end: 0;