mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 14:15:30 +00:00
e2b946adfc
We used to need explicit names for functions to make stack traces display properly. The JS engine is smarter now so doesn't need them and they just make the code messy and redundant. --HG-- extra : commitid : 4FEIiQYhRQu extra : rebase_source : 26689d5417f592d0f327f32076245cb4f154229a
114 lines
3.6 KiB
JavaScript
114 lines
3.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";
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
const Cr = Components.results;
|
|
|
|
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
|
|
const kMissingAPIMessage = "Unsupported blocklist call in the child process."
|
|
|
|
/*
|
|
* A lightweight blocklist proxy for the content process that traps plugin
|
|
* related blocklist checks and forwards them to the parent. This interface is
|
|
* primarily designed to insure overlays work.. it does not control plugin
|
|
* or addon loading.
|
|
*/
|
|
|
|
function Blocklist() {
|
|
this.init();
|
|
}
|
|
|
|
Blocklist.prototype = {
|
|
classID: Components.ID("{e0a106ed-6ad4-47a4-b6af-2f1c8aa4712d}"),
|
|
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
|
|
Ci.nsIBlocklistService]),
|
|
|
|
init: function() {
|
|
Services.cpmm.addMessageListener("Blocklist:blocklistInvalidated", this);
|
|
Services.obs.addObserver(this, "xpcom-shutdown", false);
|
|
},
|
|
|
|
uninit: function() {
|
|
Services.cpmm.removeMessageListener("Blocklist:blocklistInvalidated", this);
|
|
Services.obs.removeObserver(this, "xpcom-shutdown", false);
|
|
},
|
|
|
|
observe: function(aSubject, aTopic, aData) {
|
|
switch (aTopic) {
|
|
case "xpcom-shutdown":
|
|
this.uninit();
|
|
break;
|
|
}
|
|
},
|
|
|
|
// Message manager message handlers
|
|
receiveMessage: function(aMsg) {
|
|
switch (aMsg.name) {
|
|
case "Blocklist:blocklistInvalidated":
|
|
Services.obs.notifyObservers(null, "blocklist-updated", null);
|
|
Services.cpmm.sendAsyncMessage("Blocklist:content-blocklist-updated");
|
|
break;
|
|
default:
|
|
throw new Error("Unknown blocklist message received from content: " + aMsg.name);
|
|
}
|
|
},
|
|
|
|
/*
|
|
* A helper that queries key data from a plugin or addon object
|
|
* and generates a simple data wrapper suitable for ipc. We hand
|
|
* these directly to the nsBlockListService in the parent which
|
|
* doesn't query for much.. allowing us to get away with this.
|
|
*/
|
|
flattenObject: function(aTag) {
|
|
// Based on debugging the nsBlocklistService, these are the props the
|
|
// parent side will check on our objects.
|
|
let props = ["name", "description", "filename", "version"];
|
|
let dataWrapper = {};
|
|
for (let prop of props) {
|
|
dataWrapper[prop] = aTag[prop];
|
|
}
|
|
return dataWrapper;
|
|
},
|
|
|
|
// We support the addon methods here for completeness, but content currently
|
|
// only calls getPluginBlocklistState.
|
|
|
|
isAddonBlocklisted: function(aAddon, aAppVersion, aToolkitVersion) {
|
|
return true;
|
|
},
|
|
|
|
getAddonBlocklistState: function(aAddon, aAppVersion, aToolkitVersion) {
|
|
return Components.interfaces.nsIBlocklistService.STATE_BLOCKED;
|
|
},
|
|
|
|
// There are a few callers in layout that rely on this.
|
|
getPluginBlocklistState: function(aPluginTag, aAppVersion, aToolkitVersion) {
|
|
return Services.cpmm.sendSyncMessage("Blocklist:getPluginBlocklistState", {
|
|
addonData: this.flattenObject(aPluginTag),
|
|
appVersion: aAppVersion,
|
|
toolkitVersion: aToolkitVersion
|
|
})[0];
|
|
},
|
|
|
|
getAddonBlocklistURL: function(aAddon, aAppVersion, aToolkitVersion) {
|
|
throw new Error(kMissingAPIMessage);
|
|
},
|
|
|
|
getPluginBlocklistURL: function(aPluginTag) {
|
|
throw new Error(kMissingAPIMessage);
|
|
},
|
|
|
|
getPluginInfoURL: function(aPluginTag) {
|
|
throw new Error(kMissingAPIMessage);
|
|
}
|
|
};
|
|
|
|
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([Blocklist]);
|