Bug 1412456 - Allow CPOWs without interposition (r=aswan)

MozReview-Commit-ID: G1Y6ztyYKA6
This commit is contained in:
Bill McCloskey 2017-10-26 15:06:10 -07:00
parent f9b9902b91
commit 937af89369
2 changed files with 15 additions and 11 deletions

View File

@ -512,15 +512,17 @@ InstallLocation::InstallLocation(JSContext* cx, const JS::Value& value)
*****************************************************************************/
static void
EnableShims(const nsAString& addonId)
EnableShimsAndCPOWs(const nsAString& addonId, bool enableShims)
{
NS_ConvertUTF16toUTF8 id(addonId);
nsCOMPtr<nsIAddonInterposition> interposition =
do_GetService("@mozilla.org/addons/multiprocess-shims;1");
if (enableShims) {
nsCOMPtr<nsIAddonInterposition> interposition =
do_GetService("@mozilla.org/addons/multiprocess-shims;1");
if (!interposition || !xpc::SetAddonInterposition(id, interposition)) {
return;
if (!interposition || !xpc::SetAddonInterposition(id, interposition)) {
return;
}
}
Unused << xpc::AllowCPOWsInAddon(id, true);
@ -623,8 +625,8 @@ AddonManagerStartup::InitializeExtensions(JS::HandleValue locations, JSContext*
if (addon.Enabled() && !addon.Bootstrapped()) {
Unused << AddInstallLocation(addon);
if (enableInterpositions && addon.ShimsEnabled()) {
EnableShims(addon.Id());
if (addon.ShimsEnabled()) {
EnableShimsAndCPOWs(addon.Id(), enableInterpositions);
}
}
}

View File

@ -4215,10 +4215,12 @@ this.XPIProvider = {
let principal = Cc["@mozilla.org/systemprincipal;1"].
createInstance(Ci.nsIPrincipal);
if (!aMultiprocessCompatible && Services.prefs.getBoolPref(PREF_INTERPOSITION_ENABLED, false)) {
let interposition = Cc["@mozilla.org/addons/multiprocess-shims;1"].
getService(Ci.nsIAddonInterposition);
Cu.setAddonInterposition(aId, interposition);
if (!aMultiprocessCompatible) {
if (Services.prefs.getBoolPref(PREF_INTERPOSITION_ENABLED, false)) {
let interposition = Cc["@mozilla.org/addons/multiprocess-shims;1"].
getService(Ci.nsIAddonInterposition);
Cu.setAddonInterposition(aId, interposition);
}
Cu.allowCPOWsInAddon(aId, true);
}