Bug 1772096 - Part 6: Use plain object for lazy getter in remote/shared/messagehandler/. r=webdriver-reviewers,jdescottes

Differential Revision: https://phabricator.services.mozilla.com/D148003
This commit is contained in:
Tooru Fujisawa 2022-06-06 07:10:44 +00:00
Родитель 631a13a650
Коммит f0d1eaf7b1
12 изменённых файлов: 96 добавлений и 71 удалений

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
EventEmitter: "resource://gre/modules/EventEmitter.jsm",
error: "chrome://remote/content/shared/messagehandler/Errors.jsm",
@ -20,7 +22,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
ModuleCache: "chrome://remote/content/shared/messagehandler/ModuleCache.jsm",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(lazy, "logger", () => lazy.Log.get());
/**
* A ContextDescriptor object provides information to decide if a broadcast or
@ -77,7 +79,7 @@ const ContextDescriptorType = {
* instances are properly registered and can be retrieved based on a given
* session id as well as some other context information.
*/
class MessageHandler extends EventEmitter {
class MessageHandler extends lazy.EventEmitter {
/**
* Create a new MessageHandler instance.
*
@ -89,12 +91,12 @@ class MessageHandler extends EventEmitter {
constructor(sessionId, context) {
super();
this._moduleCache = new ModuleCache(this);
this._moduleCache = new lazy.ModuleCache(this);
this._sessionId = sessionId;
this._context = context;
this._contextId = this.constructor.getIdFromContext(context);
this._eventsDispatcher = new EventsDispatcher(this);
this._eventsDispatcher = new lazy.EventsDispatcher(this);
}
get contextId() {
@ -114,7 +116,7 @@ class MessageHandler extends EventEmitter {
}
destroy() {
logger.trace(
lazy.logger.trace(
`MessageHandler ${this.constructor.type} for session ${this.sessionId} is being destroyed`
);
this._eventsDispatcher.destroy();
@ -214,12 +216,12 @@ class MessageHandler extends EventEmitter {
*/
handleCommand(command) {
const { moduleName, commandName, params, destination } = command;
logger.trace(
lazy.logger.trace(
`Received command ${moduleName}.${commandName} for destination ${destination.type}`
);
if (!this.supportsCommand(moduleName, commandName, destination)) {
throw new error.UnsupportedCommandError(
throw new lazy.error.UnsupportedCommandError(
`${moduleName}.${commandName} not supported for destination ${destination?.type}`
);
}

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
EventEmitter: "resource://gre/modules/EventEmitter.jsm",
Log: "chrome://remote/content/shared/Log.jsm",
@ -22,18 +24,18 @@ XPCOMUtils.defineLazyModuleGetters(this, {
"chrome://remote/content/shared/messagehandler/WindowGlobalMessageHandler.jsm",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(lazy, "logger", () => lazy.Log.get());
/**
* Map of MessageHandler type to MessageHandler subclass.
*/
XPCOMUtils.defineLazyGetter(
this,
lazy,
"MessageHandlerClasses",
() =>
new Map([
[RootMessageHandler.type, RootMessageHandler],
[WindowGlobalMessageHandler.type, WindowGlobalMessageHandler],
[lazy.RootMessageHandler.type, lazy.RootMessageHandler],
[lazy.WindowGlobalMessageHandler.type, lazy.WindowGlobalMessageHandler],
])
);
@ -48,10 +50,10 @@ XPCOMUtils.defineLazyGetter(
* Throws if no MessageHandler subclass is found for the provided type.
*/
function getMessageHandlerClass(type) {
if (!MessageHandlerClasses.has(type)) {
if (!lazy.MessageHandlerClasses.has(type)) {
throw new Error(`No MessageHandler class available for type "${type}"`);
}
return MessageHandlerClasses.get(type);
return lazy.MessageHandlerClasses.get(type);
}
/**
@ -66,7 +68,7 @@ function getMessageHandlerClass(type) {
* The registry is useful to retrieve the appropriate MessageHandler instance
* after crossing a technical boundary (eg process, thread...).
*/
class MessageHandlerRegistry extends EventEmitter {
class MessageHandlerRegistry extends lazy.EventEmitter {
/*
* @param {String} type
* MessageHandler type, one of MessageHandler.type.
@ -98,7 +100,7 @@ class MessageHandlerRegistry extends EventEmitter {
* to receive/send commands.
*/
createAllMessageHandlers() {
const data = readSessionData();
const data = lazy.readSessionData();
for (const [sessionId, sessionDataItems] of data) {
// Create a message handler for this context for each active message
// handler session.
@ -176,7 +178,7 @@ class MessageHandlerRegistry extends EventEmitter {
getRootMessageHandler(sessionId) {
const rootMessageHandler = this.getExistingMessageHandler(
sessionId,
RootMessageHandler.type
lazy.RootMessageHandler.type
);
if (!rootMessageHandler) {
throw new Error(
@ -217,7 +219,7 @@ class MessageHandlerRegistry extends EventEmitter {
this._messageHandlersMap.set(sessionId, messageHandler);
logger.trace(
lazy.logger.trace(
`Created MessageHandler ${this._type} for session ${sessionId}`
);
@ -234,7 +236,7 @@ class MessageHandlerRegistry extends EventEmitter {
messageHandler.off("message-handler-event", this._onMessageHandlerEvent);
this._messageHandlersMap.delete(messageHandler.sessionId);
logger.trace(
lazy.logger.trace(
`Unregistered MessageHandler ${messageHandler.constructor.type} for session ${messageHandler.sessionId}`
);
}

Просмотреть файл

@ -11,7 +11,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
getMessageHandlerClass:
"chrome://remote/content/shared/messagehandler/MessageHandlerRegistry.jsm",
// Additional protocols might use a different registry for their modules,
@ -23,13 +25,13 @@ XPCOMUtils.defineLazyModuleGetters(this, {
});
XPCOMUtils.defineLazyModuleGetter(
this,
lazy,
"getTestModuleClass",
"chrome://mochitests/content/browser/remote/shared/messagehandler/test/browser/resources/modules/ModuleRegistry.jsm",
"getModuleClass"
);
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(lazy, "logger", () => lazy.Log.get());
/**
* ModuleCache instances are dedicated to lazily create and cache the instances
@ -154,11 +156,11 @@ class ModuleCache {
let module = null;
if (ModuleClass) {
module = new ModuleClass(this.messageHandler);
logger.trace(
lazy.logger.trace(
`Module ${moduleFolder}/${moduleName}.jsm found for ${destination.type}`
);
} else {
logger.trace(
lazy.logger.trace(
`Module ${moduleFolder}/${moduleName}.jsm not found for ${destination.type}`
);
}
@ -188,16 +190,16 @@ class ModuleCache {
_getModuleClass(moduleName, moduleFolder) {
if (this._useTestModules) {
return getTestModuleClass(moduleName, moduleFolder);
return lazy.getTestModuleClass(moduleName, moduleFolder);
}
// Retrieve the module class from the WebDriverBiDi ModuleRegistry if we
// are not using test modules.
return getModuleClass(moduleName, moduleFolder);
return lazy.getModuleClass(moduleName, moduleFolder);
}
_getModuleFolder(originType, destinationType) {
const originPath = getMessageHandlerClass(originType).modulePath;
const originPath = lazy.getMessageHandlerClass(originType).modulePath;
if (originType === destinationType) {
// If the command is targeting the current type, the module is expected to
// be in eg "windowglobal/${moduleName}.jsm".
@ -205,7 +207,8 @@ class ModuleCache {
}
// If the command is targeting another type, the module is expected to
// be in a composed folder eg "windowglobal-in-root/${moduleName}.jsm".
const destinationPath = getMessageHandlerClass(destinationType).modulePath;
const destinationPath = lazy.getMessageHandlerClass(destinationType)
.modulePath;
return `${destinationPath}-in-${originPath}`;
}
}

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
FrameTransport:
"chrome://remote/content/shared/messagehandler/transports/FrameTransport.jsm",
MessageHandler:
@ -26,7 +28,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
* in the parent process. It can forward commands to MessageHandlers in other
* layers (at the moment WindowGlobalMessageHandlers in content processes).
*/
class RootMessageHandler extends MessageHandler {
class RootMessageHandler extends lazy.MessageHandler {
/**
* Returns the RootMessageHandler module path.
*
@ -62,8 +64,8 @@ class RootMessageHandler extends MessageHandler {
constructor(sessionId) {
super(sessionId, null);
this._frameTransport = new FrameTransport(this);
this._sessionData = new SessionData(this);
this._frameTransport = new lazy.FrameTransport(this);
this._sessionData = new lazy.SessionData(this);
}
get sessionData() {
@ -98,7 +100,7 @@ class RootMessageHandler extends MessageHandler {
*/
forwardCommand(command) {
switch (command.destination.type) {
case WindowGlobalMessageHandler.type:
case lazy.WindowGlobalMessageHandler.type:
return this._frameTransport.forwardCommand(command);
default:
throw new Error(
@ -145,7 +147,7 @@ class RootMessageHandler extends MessageHandler {
}
const destination = {
type: WindowGlobalMessageHandler.type,
type: lazy.WindowGlobalMessageHandler.type,
contextDescriptor,
};

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
MessageHandlerRegistry:
"chrome://remote/content/shared/messagehandler/MessageHandlerRegistry.jsm",
RootMessageHandler:
@ -23,6 +25,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
* registry and from there either create or retrieve Root MessageHandler
* instances for a specific session.
*/
var RootMessageHandlerRegistry = new MessageHandlerRegistry(
RootMessageHandler.type
var RootMessageHandlerRegistry = new lazy.MessageHandlerRegistry(
lazy.RootMessageHandler.type
);

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
ContextDescriptorType:
"chrome://remote/content/shared/messagehandler/MessageHandler.jsm",
MessageHandler:
@ -24,7 +26,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
* commands further to other MessageHandlers and represents a leaf node in a
* MessageHandler network.
*/
class WindowGlobalMessageHandler extends MessageHandler {
class WindowGlobalMessageHandler extends lazy.MessageHandler {
constructor() {
super(...arguments);
@ -129,8 +131,9 @@ class WindowGlobalMessageHandler extends MessageHandler {
_matchesContext(contextDescriptor) {
return (
contextDescriptor.type === ContextDescriptorType.All ||
(contextDescriptor.type === ContextDescriptorType.TopBrowsingContext &&
contextDescriptor.type === lazy.ContextDescriptorType.All ||
(contextDescriptor.type ===
lazy.ContextDescriptorType.TopBrowsingContext &&
contextDescriptor.id === this._context.browserId)
);
}

Просмотреть файл

@ -11,7 +11,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
ContextDescriptorType:
"chrome://remote/content/shared/messagehandler/MessageHandler.jsm",
Log: "chrome://remote/content/shared/Log.jsm",
@ -19,7 +21,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
"chrome://remote/content/shared/messagehandler/RootMessageHandler.jsm",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(lazy, "logger", () => lazy.Log.get());
const SESSION_DATA_SHARED_DATA_KEY = "MessageHandlerSessionData";
@ -87,7 +89,7 @@ const sessionDataMap = new Map();
*/
class SessionData {
constructor(messageHandler) {
if (messageHandler.constructor.type != RootMessageHandler.type) {
if (messageHandler.constructor.type != lazy.RootMessageHandler.type) {
throw new Error(
"SessionData should only be used from a ROOT MessageHandler"
);
@ -136,7 +138,7 @@ class SessionData {
this._data.push(item);
addedValues.push(value);
} else {
logger.warn(
lazy.logger.warn(
`Duplicated session data item was not added: ${JSON.stringify(item)}`
);
}
@ -215,7 +217,7 @@ class SessionData {
this._data.splice(itemIndex, 1);
removedValues.push(value);
} else {
logger.warn(
lazy.logger.warn(
`Missing session data item was not removed: ${JSON.stringify(item)}`
);
}
@ -245,7 +247,7 @@ class SessionData {
}
_isSameContextDescriptor(contextDescriptor1, contextDescriptor2) {
if (contextDescriptor1.type === ContextDescriptorType.All) {
if (contextDescriptor1.type === lazy.ContextDescriptorType.All) {
// Ignore the id for type "all" since we made the id optional for this type.
return contextDescriptor1.type === contextDescriptor2.type;
}

Просмотреть файл

@ -11,12 +11,14 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
SESSION_DATA_SHARED_DATA_KEY:
"chrome://remote/content/shared/messagehandler/sessiondata/SessionData.jsm",
});
XPCOMUtils.defineLazyGetter(this, "sharedData", () => {
XPCOMUtils.defineLazyGetter(lazy, "sharedData", () => {
const isInParent =
Services.appinfo.processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
@ -31,4 +33,4 @@ XPCOMUtils.defineLazyGetter(this, "sharedData", () => {
* Map of session id to arrays of SessionDataItems.
*/
const readSessionData = () =>
sharedData.get(SESSION_DATA_SHARED_DATA_KEY) || new Map();
lazy.sharedData.get(lazy.SESSION_DATA_SHARED_DATA_KEY) || new Map();

Просмотреть файл

@ -6,13 +6,14 @@
const EXPORTED_SYMBOLS = ["FrameTransport"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
Services: "resource://gre/modules/Services.jsm",
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
ContextDescriptorType:
"chrome://remote/content/shared/messagehandler/MessageHandler.jsm",
isBrowsingContextCompatible:
@ -23,7 +24,7 @@ XPCOMUtils.defineLazyModuleGetters(this, {
TabManager: "chrome://remote/content/shared/TabManager.jsm",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(this, "logger", () => lazy.Log.get());
const MAX_RETRY_ATTEMPTS = 10;
@ -42,7 +43,7 @@ class FrameTransport {
// FrameTransport will rely on the MessageHandlerFrame JSWindow actors.
// Make sure they are registered when instanciating a FrameTransport.
MessageHandlerFrameActor.register();
lazy.MessageHandlerFrameActor.register();
}
/**
@ -154,11 +155,11 @@ class FrameTransport {
_getBrowsingContextsForDescriptor(contextDescriptor) {
const { id, type } = contextDescriptor;
if (type === ContextDescriptorType.All) {
if (type === lazy.ContextDescriptorType.All) {
return this._getBrowsingContexts();
}
if (type === ContextDescriptorType.TopBrowsingContext) {
if (type === lazy.ContextDescriptorType.TopBrowsingContext) {
return this._getBrowsingContexts({ browserId: id });
}
@ -184,8 +185,8 @@ class FrameTransport {
let browsingContexts = [];
// Fetch all tab related browsing contexts for top-level windows.
for (const { browsingContext } of TabManager.browsers) {
if (isBrowsingContextCompatible(browsingContext, { browserId })) {
for (const { browsingContext } of lazy.TabManager.browsers) {
if (lazy.isBrowsingContextCompatible(browsingContext, { browserId })) {
browsingContexts = browsingContexts.concat(
browsingContext.getAllBrowsingContextsInSubtree()
);

Просмотреть файл

@ -10,12 +10,14 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
ActorManagerParent: "resource://gre/modules/ActorManagerParent.jsm",
Log: "chrome://remote/content/shared/Log.jsm",
});
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
XPCOMUtils.defineLazyGetter(lazy, "logger", () => lazy.Log.get());
const FRAME_ACTOR_CONFIG = {
parent: {
@ -45,10 +47,10 @@ const MessageHandlerFrameActor = {
return;
}
ActorManagerParent.addJSWindowActors({
lazy.ActorManagerParent.addJSWindowActors({
MessageHandlerFrame: FRAME_ACTOR_CONFIG,
});
this.registered = true;
logger.trace("Registered MessageHandlerFrame actors");
lazy.logger.trace("Registered MessageHandlerFrame actors");
},
};

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
error: "chrome://remote/content/shared/messagehandler/Errors.jsm",
isBrowsingContextCompatible:
"chrome://remote/content/shared/messagehandler/transports/FrameContextUtils.jsm",
@ -27,10 +29,10 @@ XPCOMUtils.defineLazyModuleGetters(this, {
*/
class MessageHandlerFrameChild extends JSWindowActorChild {
actorCreated() {
this.type = WindowGlobalMessageHandler.type;
this.type = lazy.WindowGlobalMessageHandler.type;
this.context = this.manager.browsingContext;
this._registry = new MessageHandlerRegistry(this.type, this.context);
this._registry = new lazy.MessageHandlerRegistry(this.type, this.context);
this._onRegistryEvent = this._onRegistryEvent.bind(this);
// MessageHandlerFrameChild is responsible for forwarding events from
@ -42,7 +44,7 @@ class MessageHandlerFrameChild extends JSWindowActorChild {
handleEvent({ type }) {
if (type == "DOMWindowCreated") {
if (isBrowsingContextCompatible(this.manager.browsingContext)) {
if (lazy.isBrowsingContextCompatible(this.manager.browsingContext)) {
this._registry.createAllMessageHandlers();
}
}
@ -57,7 +59,7 @@ class MessageHandlerFrameChild extends JSWindowActorChild {
try {
return await messageHandler.handleCommand(command);
} catch (e) {
if (e instanceof error.MessageHandlerError) {
if (e instanceof lazy.error.MessageHandlerError) {
return {
error: e.toJSON(),
};

Просмотреть файл

@ -10,7 +10,9 @@ const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
XPCOMUtils.defineLazyModuleGetters(this, {
const lazy = {};
XPCOMUtils.defineLazyModuleGetters(lazy, {
error: "chrome://remote/content/shared/messagehandler/Errors.jsm",
RootMessageHandlerRegistry:
"chrome://remote/content/shared/messagehandler/RootMessageHandlerRegistry.jsm",
@ -28,7 +30,7 @@ class MessageHandlerFrameParent extends JSWindowActorParent {
const { name, data, isProtocolEvent, sessionId } = message.data;
// Re-emit the event on the RootMessageHandler.
const messageHandler = RootMessageHandlerRegistry.getExistingMessageHandler(
const messageHandler = lazy.RootMessageHandlerRegistry.getExistingMessageHandler(
sessionId
);
messageHandler.emitEvent(name, data, { isProtocolEvent });
@ -61,7 +63,7 @@ class MessageHandlerFrameParent extends JSWindowActorParent {
);
if (result?.error) {
throw error.MessageHandlerError.fromJSON(result.error);
throw lazy.error.MessageHandlerError.fromJSON(result.error);
}
return result;