Bug 1332273 - Lock registered content scripts API method behind a preference.
MozReview-Commit-ID: DnGlyV3CsZw
--- a/toolkit/components/extensions/ext-registerContentScript.js
+++ b/toolkit/components/extensions/ext-registerContentScript.js
@@ -10,16 +10,21 @@ Cu.import("resource://gre/modules/Extens
var {
DefaultWeakMap,
} = ExtensionUtils;
XPCOMUtils.defineLazyServiceGetter(this, "uuidGen",
"@mozilla.org/uuid-generator;1",
"nsIUUIDGenerator");
+XPCOMUtils.defineLazyPreferenceGetter(
+ this, "registeredContentScriptsEnabled",
+ "extensions.webextensions.experimental.registeredContentScripts"
+);
+
function generateRegisteredScriptId() {
let uuid = uuidGen.generateUUID().number;
uuid = uuid.slice(1, -1); // Strip { and } off the UUID.
return uuid;
}
class RegisteredContentScript {
@@ -148,16 +153,22 @@ function initRegisteredContentScript(con
contextScriptIds.clear();
},
});
}
}
global.registerContentScript = async function(context, options) {
+ if (!registeredContentScriptsEnabled) {
+ return Promise.reject({
+ message: "registerContentScript has not been enabled in the user preferences",
+ });
+ }
+
initRegisteredContentScript(context);
const {extension} = context;
for (let origin of options.matches) {
if (!context.extension.whiteListedHosts.subsumes(new MatchPattern(origin))) {
return Promise.reject({
message: `Cannot register a content script for ${origin}`,
@@ -175,16 +186,22 @@ global.registerContentScript = async fun
contextScriptIds.add(scriptId);
extension.broadcast("Extension:RegisterContentScript", contentScript.serialize());
return scriptId;
};
global.unregisterContentScript = async function(context, scriptId) {
+ if (!registeredContentScriptsEnabled) {
+ return Promise.reject({
+ message: "registerContentScript has not been enabled in the user preferences",
+ });
+ }
+
initRegisteredContentScript(context);
const {extension} = context;
const extensionRegisteredScripts = registeredContentScripts.get(extension);
const contextScriptIds = contextRegisteredScriptIds.get(context);
if (!contextScriptIds.has(scriptId)) {
--- a/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_registering.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_contentscript_registering.js
@@ -8,16 +8,20 @@ AddonTestUtils.init(this);
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "49");
const server = createHttpServer();
server.registerDirectory("/data/", do_get_file("data"));
const BASE_URL = `http://localhost:${server.identity.primaryPort}/data`;
+add_task(function() {
+ Services.prefs.setBoolPref("extensions.webextensions.experimental.registeredContentScripts", true);
+});
+
add_task(async function test_registeredContentscripts() {
async function background() {
browser.runtime.onMessage.addListener(([msg, expectedStates, readyState], sender) => {
if (msg == "chrome-namespace-ok") {
browser.test.sendMessage(msg);
return;
}
@@ -291,8 +295,12 @@ add_task(async function test_registeredC
equal(unregisteredBlobStylesResults.registeredExtensionUrlStyleBG, "rgba(0, 0, 0, 0)",
"The expected style has been applied once extension url style has been unregistered");
equal(unregisteredBlobStylesResults.registeredExtensionBlobStyleBG, "rgba(0, 0, 0, 0)",
"The expected style has been applied once extension blob style has been unregistered");
await contentPage.close();
await extension.unload();
});
+
+add_task(function() {
+ Services.prefs.clearUserPref("extension.webextensions.experimental.registerContentScript");
+});