gecko-dev/toolkit/mozapps/extensions/nsBlocklistServiceContent.js
Dave Townsend e2b946adfc Bug 1226386: Remove functions names where possible. r=rhelmer
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
2015-11-19 16:35:41 -08:00

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]);