You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.3 KiB
124 lines
4.3 KiB
6 years ago
|
/* This file modifies the preferences dialogs. It does the following:
|
||
|
* Removes private browsing from the pref UI if it is disabled
|
||
|
* Removes Sync from the pref UI if it is diabled
|
||
|
* Disables the crash reporter button if crash reporter is disabled
|
||
|
* Removed the master password UI if it is disabled
|
||
|
* Goes through the hiddenUI list and hides any UI
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
const EXPORTED_SYMBOLS = [];
|
||
|
|
||
|
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||
|
|
||
|
Cu.import("resource://gre/modules/Services.jsm");
|
||
|
Cu.import("resource://cck2/CCK2.jsm");
|
||
|
|
||
|
var configs = null;
|
||
|
|
||
|
var observer = {
|
||
|
observe: function observe(subject, topic, data) {
|
||
|
switch (topic) {
|
||
|
case "chrome-document-global-created":
|
||
|
var win = subject.QueryInterface(Components.interfaces.nsIDOMWindow);
|
||
|
win.addEventListener("load", function onLoad(event) {
|
||
|
win.removeEventListener("load", onLoad, false);
|
||
|
var doc = event.target;
|
||
|
var url = doc.location.href.split("?")[0].split("#")[0];
|
||
|
switch (url) {
|
||
|
case "chrome://browser/content/preferences/preferences.xul":
|
||
|
configs = CCK2.getConfigs();
|
||
|
win.addEventListener("paneload", function(event) {
|
||
|
updatePrefUI(event.target.ownerDocument);
|
||
|
}, false);
|
||
|
updatePrefUI(doc);
|
||
|
for (let id in configs) {
|
||
|
var config = configs[id];
|
||
|
if (!config.disableSync) {
|
||
|
continue;
|
||
|
}
|
||
|
var prefWindow = E("BrowserPreferences", doc);
|
||
|
var paneSyncRadio = doc.getAnonymousElementByAttribute(prefWindow, "pane", "paneSync");
|
||
|
hide(paneSyncRadio);
|
||
|
var paneDeck = doc.getAnonymousElementByAttribute(prefWindow, "anonid", "paneDeck");
|
||
|
var paneSync = E("paneSync", doc);
|
||
|
paneSync.removeAttribute("helpTopic");
|
||
|
var weavePrefsDeck = E("weavePrefsDeck", doc);
|
||
|
if (weavePrefsDeck)
|
||
|
weavePrefsDeck.parentNode.removeChild(weavePrefsDeck);
|
||
|
if (prefWindow.currentPane == E("paneSync", doc))
|
||
|
prefWindow.showPane(E("paneMain", doc));
|
||
|
}
|
||
|
break;
|
||
|
case "about:preferences":
|
||
|
case "chrome://browser/content/preferences/in-content/preferences.xul":
|
||
|
configs = CCK2.getConfigs();
|
||
|
for (let id in configs) {
|
||
|
var config = configs[id];
|
||
|
if (config.disableSync) {
|
||
|
hide(E("category-sync", doc));
|
||
|
}
|
||
|
}
|
||
|
updatePrefUI(doc);
|
||
|
break;
|
||
|
}
|
||
|
}, false);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Services.obs.addObserver(observer, "chrome-document-global-created", false);
|
||
|
|
||
|
// The IDs are the same, so I can reuse this for regular and in-content prefs
|
||
|
function updatePrefUI(doc) {
|
||
|
for (var id in configs) {
|
||
|
var config = configs[id];
|
||
|
if (config.disablePrivateBrowsing) {
|
||
|
hide(E("privateBrowsingAutoStart", doc));
|
||
|
var privateBrowsingMenu = doc.querySelector("menuitem[value='dontremember']");
|
||
|
hide(privateBrowsingMenu, doc);
|
||
|
}
|
||
|
if (config.disableCrashReporter) {
|
||
|
disable(E("submitCrashesBox", doc));
|
||
|
}
|
||
|
if (config.disableSync) {
|
||
|
hide(E("noFxaAccount", doc));
|
||
|
hide(E("hasFxaAccount", doc));
|
||
|
}
|
||
|
if (config.noMasterPassword == true) {
|
||
|
hide(E("useMasterPassword", doc));
|
||
|
hide(E("changeMasterPassword", doc));
|
||
|
}
|
||
|
if (config.hiddenUI) {
|
||
|
for (var i=0; i < config.hiddenUI.length; i++) {
|
||
|
// Don't use .hidden since it doesn't work sometimes
|
||
|
var style = doc.getElementById("cck2-hidden-style");
|
||
|
if (!style) {
|
||
|
style = doc.createElementNS("http://www.w3.org/1999/xhtml", "style");
|
||
|
style.setAttribute("id", "cck2-hidden-style");
|
||
|
style.setAttribute("type", "text/css");
|
||
|
doc.documentElement.appendChild(style);
|
||
|
}
|
||
|
style.textContent = style.textContent + config.hiddenUI[i] + "{display: none !important;}";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function E(id, context) {
|
||
|
var element = context.getElementById(id);
|
||
|
return element;
|
||
|
}
|
||
|
|
||
|
function hide(element) {
|
||
|
if (element) {
|
||
|
element.setAttribute("hidden", "true");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function disable(element) {
|
||
|
if (element) {
|
||
|
element.disabled = true;
|
||
|
}
|
||
|
}
|