Bug 1316396: Part 2 - Rename contexts to make it clearer how and where they're used. r=aswan

MozReview-Commit-ID: 25oSbulhCmX

--HG--
extra : rebase_source : 66a7160137e6824e7368be4fc087e7c16ee7e92d
This commit is contained in:
Kris Maglione 2016-11-09 12:08:42 -08:00
parent 5669335dd9
commit 322251a9ed
3 changed files with 48 additions and 27 deletions

View File

@ -750,11 +750,14 @@ class PseudoChildAPIManager extends ChildAPIManager {
}
}
class ExtensionContext extends BaseContext {
class ExtensionPageContextChild extends BaseContext {
/**
* This ExtensionContext represents a privileged addon execution environment
* that has full access to the WebExtensions APIs (provided that the correct
* permissions have been requested).
* This ExtensionPageContextChild represents a privileged addon
* execution environment that has full access to the WebExtensions
* APIs (provided that the correct permissions have been requested).
*
* This is the child side of the ExtensionPageContextParent class
* defined in ExtensionParent.jsm.
*
* @param {BrowserExtensionContent} extension This context's owner.
* @param {object} params
@ -770,7 +773,7 @@ class ExtensionContext extends BaseContext {
if (Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT) {
// This check is temporary. It should be removed once the proxy creation
// is asynchronous.
throw new Error("ExtensionContext cannot be created in child processes");
throw new Error("ExtensionPageContextChild cannot be created in child processes");
}
let {viewType, uri, contentWindow, tabId} = params;
@ -848,7 +851,7 @@ class ExtensionContext extends BaseContext {
}
}
defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
defineLazyGetter(ExtensionPageContextChild.prototype, "messenger", function() {
let filter = {extensionId: this.extension.id};
let optionalFilter = {};
// Addon-generated messages (not necessarily from the same process as the
@ -859,7 +862,7 @@ defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
filter, optionalFilter);
});
defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
defineLazyGetter(ExtensionPageContextChild.prototype, "childManager", function() {
let localApis = {};
apiManager.generateAPIs(this, localApis);
@ -981,7 +984,7 @@ ExtensionChild = {
// Map<nsIContentFrameMessageManager, ContentGlobal>
contentGlobals: new Map(),
// Map<innerWindowId, ExtensionContext>
// Map<innerWindowId, ExtensionPageContextChild>
extensionContexts: new Map(),
initOnce() {
@ -1031,12 +1034,12 @@ ExtensionChild = {
let uri = contentWindow.document.documentURIObject;
context = new ExtensionContext(extension, {viewType, contentWindow, uri, tabId});
context = new ExtensionPageContextChild(extension, {viewType, contentWindow, uri, tabId});
this.extensionContexts.set(windowId, context);
},
/**
* Close the ExtensionContext belonging to the given window, if any.
* Close the ExtensionPageContextChild belonging to the given window, if any.
*
* @param {number} windowId The inner window ID of the destroyed context.
*/

View File

@ -286,10 +286,13 @@ function getWindowMessageManager(contentWindow) {
var DocumentManager;
var ExtensionManager;
// Scope in which extension content script code can run. It uses
// Cu.Sandbox to run the code. There is a separate scope for each
// frame.
class ExtensionContext extends BaseContext {
/**
* An execution context for semi-privileged extension content scripts.
*
* This is the child side of the ContentScriptContextParent class
* defined in ExtensionParent.jsm.
*/
class ContentScriptContextChild extends BaseContext {
constructor(extension, contentWindow, contextOptions = {}) {
super("content_child", extension);
@ -441,7 +444,7 @@ class ExtensionContext extends BaseContext {
}
}
defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
defineLazyGetter(ContentScriptContextChild.prototype, "messenger", function() {
// The |sender| parameter is passed directly to the extension.
let sender = {id: this.extension.uuid, frameId: this.frameId, url: this.url};
let filter = {extensionId: this.extension.id};
@ -450,7 +453,7 @@ defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
return new Messenger(this, [this.messageManager], sender, filter, optionalFilter);
});
defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
defineLazyGetter(ContentScriptContextChild.prototype, "childManager", function() {
let localApis = {};
apiManager.generateAPIs(this, localApis);
@ -469,10 +472,10 @@ defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
DocumentManager = {
extensionCount: 0,
// Map[windowId -> Map[extensionId -> ExtensionContext]]
// Map[windowId -> Map[extensionId -> ContentScriptContextChild]]
contentScriptWindows: new Map(),
// Map[windowId -> ExtensionContext]
// Map[windowId -> ContentScriptContextChild]
extensionPageWindows: new Map(),
init() {
@ -671,7 +674,7 @@ DocumentManager = {
let extensions = this.contentScriptWindows.get(winId);
if (!extensions.has(extension.id)) {
let context = new ExtensionContext(extension, window);
let context = new ContentScriptContextChild(extension, window);
extensions.set(extension.id, context);
}
@ -683,7 +686,7 @@ DocumentManager = {
let context = this.extensionPageWindows.get(winId);
if (!context) {
let context = new ExtensionContext(extension, window, {isExtensionPage: true});
let context = new ContentScriptContextChild(extension, window, {isExtensionPage: true});
this.extensionPageWindows.set(winId, context);
}

View File

@ -267,7 +267,11 @@ class BrowserDocshellFollower {
}
}
class ProxyContext extends BaseContext {
/**
* The proxied parent side of a context in ExtensionChild.jsm, for the
* parent side of a proxied API.
*/
class ProxyContextParent extends BaseContext {
constructor(envType, extension, params, xulBrowser, principal) {
super(envType, extension);
@ -321,18 +325,29 @@ class ProxyContext extends BaseContext {
}
}
defineLazyGetter(ProxyContext.prototype, "apiObj", function() {
defineLazyGetter(ProxyContextParent.prototype, "apiObj", function() {
let obj = {};
GlobalManager.injectInObject(this, false, obj);
return obj;
});
defineLazyGetter(ProxyContext.prototype, "sandbox", function() {
defineLazyGetter(ProxyContextParent.prototype, "sandbox", function() {
return Cu.Sandbox(this.principal);
});
// The parent ProxyContext of an ExtensionContext in ExtensionChild.jsm.
class ExtensionChildProxyContext extends ProxyContext {
/**
* The parent side of proxied API context for extension content script
* running in ExtensionContent.jsm.
*/
class ContentScriptContextParent extends ProxyContextParent {
}
/**
* The parent side of proxied API context for extension page, such as a
* background script, a tab page, or a popup, running in
* ExtensionChild.jsm.
*/
class ExtensionPageContextParent extends ProxyContextParent {
constructor(envType, extension, params, xulBrowser) {
super(envType, extension, params, xulBrowser, extension.principal);
@ -451,9 +466,9 @@ ParentAPIManager = {
!target.contentPrincipal.subsumes(principal)) {
throw new Error(`Refused to create privileged WebExtension context for ${principal.URI.spec}`);
}
context = new ExtensionChildProxyContext(envType, extension, data, target);
context = new ExtensionPageContextParent(envType, extension, data, target);
} else if (envType == "content_parent") {
context = new ProxyContext(envType, extension, data, target, principal);
context = new ContentScriptContextParent(envType, extension, data, target, principal);
} else {
throw new Error(`Invalid WebExtension context envType: ${envType}`);
}