mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 17:25:36 +00:00
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:
parent
5669335dd9
commit
322251a9ed
@ -750,11 +750,14 @@ class PseudoChildAPIManager extends ChildAPIManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExtensionContext extends BaseContext {
|
class ExtensionPageContextChild extends BaseContext {
|
||||||
/**
|
/**
|
||||||
* This ExtensionContext represents a privileged addon execution environment
|
* This ExtensionPageContextChild represents a privileged addon
|
||||||
* that has full access to the WebExtensions APIs (provided that the correct
|
* execution environment that has full access to the WebExtensions
|
||||||
* permissions have been requested).
|
* 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 {BrowserExtensionContent} extension This context's owner.
|
||||||
* @param {object} params
|
* @param {object} params
|
||||||
@ -770,7 +773,7 @@ class ExtensionContext extends BaseContext {
|
|||||||
if (Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT) {
|
if (Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT) {
|
||||||
// This check is temporary. It should be removed once the proxy creation
|
// This check is temporary. It should be removed once the proxy creation
|
||||||
// is asynchronous.
|
// 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;
|
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 filter = {extensionId: this.extension.id};
|
||||||
let optionalFilter = {};
|
let optionalFilter = {};
|
||||||
// Addon-generated messages (not necessarily from the same process as the
|
// Addon-generated messages (not necessarily from the same process as the
|
||||||
@ -859,7 +862,7 @@ defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
|
|||||||
filter, optionalFilter);
|
filter, optionalFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
|
defineLazyGetter(ExtensionPageContextChild.prototype, "childManager", function() {
|
||||||
let localApis = {};
|
let localApis = {};
|
||||||
apiManager.generateAPIs(this, localApis);
|
apiManager.generateAPIs(this, localApis);
|
||||||
|
|
||||||
@ -981,7 +984,7 @@ ExtensionChild = {
|
|||||||
// Map<nsIContentFrameMessageManager, ContentGlobal>
|
// Map<nsIContentFrameMessageManager, ContentGlobal>
|
||||||
contentGlobals: new Map(),
|
contentGlobals: new Map(),
|
||||||
|
|
||||||
// Map<innerWindowId, ExtensionContext>
|
// Map<innerWindowId, ExtensionPageContextChild>
|
||||||
extensionContexts: new Map(),
|
extensionContexts: new Map(),
|
||||||
|
|
||||||
initOnce() {
|
initOnce() {
|
||||||
@ -1031,12 +1034,12 @@ ExtensionChild = {
|
|||||||
|
|
||||||
let uri = contentWindow.document.documentURIObject;
|
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);
|
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.
|
* @param {number} windowId The inner window ID of the destroyed context.
|
||||||
*/
|
*/
|
||||||
|
@ -286,10 +286,13 @@ function getWindowMessageManager(contentWindow) {
|
|||||||
var DocumentManager;
|
var DocumentManager;
|
||||||
var ExtensionManager;
|
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
|
* An execution context for semi-privileged extension content scripts.
|
||||||
// frame.
|
*
|
||||||
class ExtensionContext extends BaseContext {
|
* This is the child side of the ContentScriptContextParent class
|
||||||
|
* defined in ExtensionParent.jsm.
|
||||||
|
*/
|
||||||
|
class ContentScriptContextChild extends BaseContext {
|
||||||
constructor(extension, contentWindow, contextOptions = {}) {
|
constructor(extension, contentWindow, contextOptions = {}) {
|
||||||
super("content_child", extension);
|
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.
|
// The |sender| parameter is passed directly to the extension.
|
||||||
let sender = {id: this.extension.uuid, frameId: this.frameId, url: this.url};
|
let sender = {id: this.extension.uuid, frameId: this.frameId, url: this.url};
|
||||||
let filter = {extensionId: this.extension.id};
|
let filter = {extensionId: this.extension.id};
|
||||||
@ -450,7 +453,7 @@ defineLazyGetter(ExtensionContext.prototype, "messenger", function() {
|
|||||||
return new Messenger(this, [this.messageManager], sender, filter, optionalFilter);
|
return new Messenger(this, [this.messageManager], sender, filter, optionalFilter);
|
||||||
});
|
});
|
||||||
|
|
||||||
defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
|
defineLazyGetter(ContentScriptContextChild.prototype, "childManager", function() {
|
||||||
let localApis = {};
|
let localApis = {};
|
||||||
apiManager.generateAPIs(this, localApis);
|
apiManager.generateAPIs(this, localApis);
|
||||||
|
|
||||||
@ -469,10 +472,10 @@ defineLazyGetter(ExtensionContext.prototype, "childManager", function() {
|
|||||||
DocumentManager = {
|
DocumentManager = {
|
||||||
extensionCount: 0,
|
extensionCount: 0,
|
||||||
|
|
||||||
// Map[windowId -> Map[extensionId -> ExtensionContext]]
|
// Map[windowId -> Map[extensionId -> ContentScriptContextChild]]
|
||||||
contentScriptWindows: new Map(),
|
contentScriptWindows: new Map(),
|
||||||
|
|
||||||
// Map[windowId -> ExtensionContext]
|
// Map[windowId -> ContentScriptContextChild]
|
||||||
extensionPageWindows: new Map(),
|
extensionPageWindows: new Map(),
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@ -671,7 +674,7 @@ DocumentManager = {
|
|||||||
|
|
||||||
let extensions = this.contentScriptWindows.get(winId);
|
let extensions = this.contentScriptWindows.get(winId);
|
||||||
if (!extensions.has(extension.id)) {
|
if (!extensions.has(extension.id)) {
|
||||||
let context = new ExtensionContext(extension, window);
|
let context = new ContentScriptContextChild(extension, window);
|
||||||
extensions.set(extension.id, context);
|
extensions.set(extension.id, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -683,7 +686,7 @@ DocumentManager = {
|
|||||||
|
|
||||||
let context = this.extensionPageWindows.get(winId);
|
let context = this.extensionPageWindows.get(winId);
|
||||||
if (!context) {
|
if (!context) {
|
||||||
let context = new ExtensionContext(extension, window, {isExtensionPage: true});
|
let context = new ContentScriptContextChild(extension, window, {isExtensionPage: true});
|
||||||
this.extensionPageWindows.set(winId, context);
|
this.extensionPageWindows.set(winId, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
constructor(envType, extension, params, xulBrowser, principal) {
|
||||||
super(envType, extension);
|
super(envType, extension);
|
||||||
|
|
||||||
@ -321,18 +325,29 @@ class ProxyContext extends BaseContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defineLazyGetter(ProxyContext.prototype, "apiObj", function() {
|
defineLazyGetter(ProxyContextParent.prototype, "apiObj", function() {
|
||||||
let obj = {};
|
let obj = {};
|
||||||
GlobalManager.injectInObject(this, false, obj);
|
GlobalManager.injectInObject(this, false, obj);
|
||||||
return obj;
|
return obj;
|
||||||
});
|
});
|
||||||
|
|
||||||
defineLazyGetter(ProxyContext.prototype, "sandbox", function() {
|
defineLazyGetter(ProxyContextParent.prototype, "sandbox", function() {
|
||||||
return Cu.Sandbox(this.principal);
|
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) {
|
constructor(envType, extension, params, xulBrowser) {
|
||||||
super(envType, extension, params, xulBrowser, extension.principal);
|
super(envType, extension, params, xulBrowser, extension.principal);
|
||||||
|
|
||||||
@ -451,9 +466,9 @@ ParentAPIManager = {
|
|||||||
!target.contentPrincipal.subsumes(principal)) {
|
!target.contentPrincipal.subsumes(principal)) {
|
||||||
throw new Error(`Refused to create privileged WebExtension context for ${principal.URI.spec}`);
|
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") {
|
} else if (envType == "content_parent") {
|
||||||
context = new ProxyContext(envType, extension, data, target, principal);
|
context = new ContentScriptContextParent(envType, extension, data, target, principal);
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Invalid WebExtension context envType: ${envType}`);
|
throw new Error(`Invalid WebExtension context envType: ${envType}`);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user