Bug 1295082 - BaseContext.extensionId -> BaseContext.extension.id
MozReview-Commit-ID: 2tFVUwjyJQu
--- a/toolkit/components/extensions/ExtensionContent.jsm
+++ b/toolkit/components/extensions/ExtensionContent.jsm
@@ -70,23 +70,24 @@ function isWhenBeforeOrSame(when1, when2
var api = context => {
return {
runtime: {
connect: function(extensionId, connectInfo) {
if (!connectInfo) {
connectInfo = extensionId;
extensionId = null;
}
+ extensionId = extensionId || context.extension.id;
let name = connectInfo && connectInfo.name || "";
- let recipient = extensionId ? {extensionId} : {extensionId: context.extensionId};
+ let recipient = {extensionId};
return context.messenger.connect(context.messageManager, name, recipient);
},
get id() {
- return context.extensionId;
+ return context.extension.id;
},
get lastError() {
return context.lastError;
},
getManifest: function() {
return Cu.cloneInto(context.extension.manifest, context.cloneScope);
@@ -105,18 +106,19 @@ var api = context => {
let extensionId, message, responseCallback;
if (args.length == 1) {
message = args[0];
} else if (args.length == 2) {
[message, responseCallback] = args;
} else {
[extensionId, message, options, responseCallback] = args;
}
+ extensionId = extensionId || context.extension.id;
- let recipient = extensionId ? {extensionId} : {extensionId: context.extensionId};
+ let recipient = {extensionId};
return context.messenger.sendMessage(context.messageManager, message, recipient, responseCallback);
},
},
extension: {
getURL: function(url) {
return context.extension.baseURI.resolve(url);
},
@@ -331,31 +333,31 @@ class ExtensionContext extends BaseConte
let prin;
let contentPrincipal = contentWindow.document.nodePrincipal;
let ssm = Services.scriptSecurityManager;
// copy origin attributes from the content window origin attributes to
// preserve the user context id. overwrite the addonId.
let attrs = contentPrincipal.originAttributes;
- attrs.addonId = this.extensionId;
+ attrs.addonId = this.extension.id;
let extensionPrincipal = ssm.createCodebasePrincipal(this.extension.baseURI, attrs);
Object.defineProperty(this, "principal",
{value: extensionPrincipal, enumerable: true, configurable: true});
if (ssm.isSystemPrincipal(contentPrincipal)) {
// Make sure we don't hand out the system principal by accident.
// also make sure that the null principal has the right origin attributes
prin = ssm.createNullPrincipal(attrs);
} else {
prin = [contentPrincipal, extensionPrincipal];
}
if (isExtensionPage) {
- if (ExtensionManagement.getAddonIdForWindow(this.contentWindow) != this.extensionId) {
+ if (ExtensionManagement.getAddonIdForWindow(this.contentWindow) != this.extension.id) {
throw new Error("Invalid target window for this extension context");
}
// This is an iframe with content script API enabled and its principal should be the
// contentWindow itself. (we create a sandbox with the contentWindow as principal and with X-rays disabled
// because it enables us to create the APIs object in this sandbox object and then copying it
// into the iframe's window, see Bug 1214658 for rationale)
this.sandbox = Cu.Sandbox(contentWindow, {
sandboxPrototype: contentWindow,
@@ -393,17 +395,17 @@ class ExtensionContext extends BaseConte
},
};
let url = contentWindow.location.href;
// The |sender| parameter is passed directly to the extension.
let sender = {id: this.extension.uuid, frameId, url};
// Properties in |filter| must match those in the |recipient|
// parameter of sendMessage.
- let filter = {extensionId: this.extensionId, frameId};
+ let filter = {extensionId: this.extension.id, frameId};
this.messenger = new Messenger(this, [mm], sender, filter, delegate);
this.chromeObj = Cu.createObjectIn(this.sandbox, {defineAs: "browser"});
// Sandboxes don't get Xrays for some weird compatibility
// reason. However, we waive here anyway in case that changes.
Cu.waiveXrays(this.sandbox).chrome = this.chromeObj;
@@ -698,17 +700,17 @@ DocumentManager = {
if (context) {
context.close();
extensions.delete(extensionId);
}
}
// Clean up iframe extension page contexts on extension shutdown.
for (let [winId, context] of this.extensionPageWindows) {
- if (context.extensionId == extensionId) {
+ if (context.extension.id == extensionId) {
context.close();
this.extensionPageWindows.delete(winId);
}
}
MessageChannel.abortResponses({extensionId});
this.extensionCount--;
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -164,17 +164,16 @@ let gContextId = 0;
class BaseContext {
constructor(extension) {
this.onClose = new Set();
this.checkedLastError = false;
this._lastError = null;
this.contextId = `${++gContextId}-${Services.appinfo.uniqueProcessID}`;
this.unloaded = false;
this.extension = extension;
- this.extensionId = extension.id;
this.jsonSandbox = null;
this.active = true;
this.docShell = null;
this.contentWindow = null;
this.innerWindowID = 0;
}
@@ -440,17 +439,17 @@ class BaseContext {
});
}
}
unload() {
this.unloaded = true;
MessageChannel.abortResponses({
- extensionId: this.extensionId,
+ extensionId: this.extension.id,
contextId: this.contextId,
});
for (let obj of this.onClose) {
obj.close();
}
}
}
--- a/toolkit/components/extensions/ext-runtime.js
+++ b/toolkit/components/extensions/ext-runtime.js
@@ -60,32 +60,34 @@ extensions.registerSchemaAPI("runtime",
AddonManager.getAddonByID(extension.id, addon => {
addon.reload();
});
}
},
connect: function(extensionId, connectInfo) {
let name = connectInfo !== null && connectInfo.name || "";
- let recipient = extensionId !== null ? {extensionId} : {extensionId: extension.id};
+ extensionId = extensionId || extension.id;
+ let recipient = {extensionId};
return context.messenger.connect(Services.cpmm, name, recipient);
},
sendMessage: function(...args) {
let options; // eslint-disable-line no-unused-vars
let extensionId, message, responseCallback;
if (args.length == 1) {
message = args[0];
} else if (args.length == 2) {
[message, responseCallback] = args;
} else {
[extensionId, message, options, responseCallback] = args;
}
- let recipient = {extensionId: extensionId ? extensionId : extension.id};
+ extensionId = extensionId || extension.id;
+ let recipient = {extensionId};
if (!GlobalManager.extensionMap.has(recipient.extensionId)) {
return context.wrapPromise(Promise.reject({message: "Invalid extension ID"}),
responseCallback);
}
return context.messenger.sendMessage(Services.cpmm, message, recipient, responseCallback);
},
--- a/toolkit/components/extensions/test/mochitest/file_teardown_test.js
+++ b/toolkit/components/extensions/test/mochitest/file_teardown_test.js
@@ -1,17 +1,17 @@
"use strict";
/* globals addMessageListener */
let {Management} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
let events = [];
function record(type, extensionContext) {
let eventType = type == "page-load" ? "load" : "unload";
let url = extensionContext.uri.spec;
- let {extensionId} = extensionContext;
+ let extensionId = extensionContext.extension.id;
events.push({eventType, url, extensionId});
}
Management.on("page-load", record);
Management.on("page-unload", record);
addMessageListener("cleanup", () => {
Management.off("page-load", record);
Management.off("page-unload", record);