mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Backed out changeset 6c69f8021a5e (bug 1373853) for accidentially landing. r=backout
This commit is contained in:
parent
4e05ed9eef
commit
3e4bc7a1e3
@ -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;
|
||||
|
@ -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"
|
||||
|
Binary file not shown.
@ -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]
|
||||
|
@ -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);
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user