Files
tubestation/toolkit/modules/AsyncPrefs.jsm
Dana Keeler ba298e32e2 Bug 1681839 - remove nsISecurityReporter and implementation r=johannh,necko-reviewers,dragana
TLS error report sending was disabled by default in bug 1579906. The server
that ingested these reports has been decommissioned as well, so this patch
removes this dead code.

Differential Revision: https://phabricator.services.mozilla.com/D99405
2021-01-07 17:47:47 +00:00

184 lines
4.6 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
var EXPORTED_SYMBOLS = ["AsyncPrefs", "AsyncPrefsChild", "AsyncPrefsParent"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const kInChildProcess =
Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
const kAllowedPrefs = new Set([
// NB: please leave the testing prefs at the top, and sort the rest alphabetically if you add
// anything.
"testing.allowed-prefs.some-bool-pref",
"testing.allowed-prefs.some-char-pref",
"testing.allowed-prefs.some-int-pref",
"browser.contentblocking.report.hide_vpn_banner",
"browser.contentblocking.report.show_mobile_app",
"narrate.rate",
"narrate.voice",
"pdfjs.cursorToolOnLoad",
"pdfjs.database",
"pdfjs.defaultZoomValue",
"pdfjs.disablePageLabels",
"pdfjs.enabledCache.state",
"pdfjs.enablePermissions",
"pdfjs.enablePrintAutoRotate",
"pdfjs.enableWebGL",
"pdfjs.externalLinkTarget",
"pdfjs.historyUpdateUrl",
"pdfjs.ignoreDestinationZoom",
"pdfjs..migrationVersion",
"pdfjs.pdfBugEnabled",
"pdfjs.previousHandler.alwaysAskBeforeHandling",
"pdfjs.previousHandler.preferredAction",
"pdfjs.renderer",
"pdfjs.renderInteractiveForms",
"pdfjs.sidebarViewOnLoad",
"pdfjs.scrollModeOnLoad",
"pdfjs.spreadModeOnLoad",
"pdfjs.textLayerMode",
"pdfjs.useOnlyCssZoom",
"pdfjs.viewOnLoad",
"pdfjs.disableAutoFetch",
"pdfjs.disableFontFace",
"pdfjs.disableRange",
"pdfjs.disableStream",
"reader.font_size",
"reader.font_type",
"reader.color_scheme",
"reader.content_width",
"reader.line_height",
"security.tls.version.enable-deprecated",
"security.xfocsp.errorReporting.automatic",
]);
const kPrefTypeMap = new Map([
["boolean", Services.prefs.PREF_BOOL],
["number", Services.prefs.PREF_INT],
["string", Services.prefs.PREF_STRING],
]);
function maybeReturnErrorForReset(pref) {
if (!kAllowedPrefs.has(pref)) {
return `Resetting pref ${pref} from content is not allowed.`;
}
return false;
}
function maybeReturnErrorForSet(pref, value) {
if (!kAllowedPrefs.has(pref)) {
return `Setting pref ${pref} from content is not allowed.`;
}
let valueType = typeof value;
if (!kPrefTypeMap.has(valueType)) {
return `Can't set pref ${pref} to value of type ${valueType}.`;
}
let prefType = Services.prefs.getPrefType(pref);
if (
prefType != Services.prefs.PREF_INVALID &&
prefType != kPrefTypeMap.get(valueType)
) {
return `Can't set pref ${pref} to a value with type ${valueType} that doesn't match the pref's type ${prefType}.`;
}
return false;
}
class AsyncPrefsChild extends JSProcessActorChild {
set(pref, value) {
let error = maybeReturnErrorForSet(pref, value);
if (error) {
return Promise.reject(error);
}
return this.sendQuery("AsyncPrefs:SetPref", {
pref,
value,
});
}
reset(pref) {
let error = maybeReturnErrorForReset(pref);
if (error) {
return Promise.reject(error);
}
return this.sendQuery("AsyncPrefs:ResetPref", { pref });
}
}
var AsyncPrefs = {
set(pref, value) {
if (kInChildProcess) {
return ChromeUtils.domProcessChild
.getActor("AsyncPrefs")
.set(pref, value);
}
return AsyncPrefsParent.set(pref, value);
},
reset(pref, value) {
if (kInChildProcess) {
return ChromeUtils.domProcessChild.getActor("AsyncPrefs").reset(pref);
}
return AsyncPrefsParent.reset(pref);
},
};
const methodForType = {
number: "setIntPref",
boolean: "setBoolPref",
string: "setCharPref",
};
class AsyncPrefsParent extends JSProcessActorParent {
static set(pref, value) {
let error = maybeReturnErrorForSet(pref, value);
if (error) {
return Promise.reject(error);
}
let methodToUse = methodForType[typeof value];
try {
Services.prefs[methodToUse](pref, value);
} catch (ex) {
Cu.reportError(ex);
return Promise.reject(ex.message);
}
return Promise.resolve(value);
}
static reset(pref) {
let error = maybeReturnErrorForReset(pref);
if (error) {
return Promise.reject(error);
}
try {
Services.prefs.clearUserPref(pref);
} catch (ex) {
Cu.reportError(ex);
return Promise.reject(ex.message);
}
return Promise.resolve();
}
receiveMessage(msg) {
if (msg.name == "AsyncPrefs:SetPref") {
return AsyncPrefsParent.set(msg.data.pref, msg.data.value);
}
return AsyncPrefsParent.reset(msg.data.pref);
}
}