Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { Module } from "chrome://remote/content/shared/messagehandler/Module.sys.mjs";
class CommandModule extends Module {
constructor(messageHandler) {
super(messageHandler);
this._subscribedEvents = new Set();
this._createdByMessageHandlerConstructor =
this._isCreatedByMessageHandlerConstructor();
}
destroy() {}
/**
* Commands
*/
_applySessionData(params) {
if (params.category === "testCategory") {
const filteredSessionData = params.sessionData.filter(item =>
this.messageHandler.matchesContext(item.contextDescriptor)
);
for (const event of this._subscribedEvents.values()) {
const hasSessionItem = filteredSessionData.some(
item => item.value === event
);
// If there are no session items for this context, we should unsubscribe from the event.
if (!hasSessionItem) {
this._subscribedEvents.delete(event);
}
}
// Subscribe to all events, which have an item in SessionData
for (const { value } of filteredSessionData) {
if (!this._subscribedEvents.has(value)) {
this._subscribedEvents.add(value);
}
}
}
if (params.category === "browser_session_data_browser_element") {
this.emitEvent("received-session-data", {
contextId: this.messageHandler.contextId,
});
}
}
testWindowGlobalModule() {
return "windowglobal-value";
}
testSetValue(params) {
const { value } = params;
this._testValue = value;
}
testGetValue() {
return this._testValue;
}
testForwardToWindowGlobal() {
return "forward-to-windowglobal-value";
}
testIsCreatedByMessageHandlerConstructor() {
return this._createdByMessageHandlerConstructor;
}
_isCreatedByMessageHandlerConstructor() {
let caller = Components.stack.caller;
while (caller) {
if (caller.name === this.messageHandler.constructor.name) {
return true;
}
caller = caller.caller;
}
return false;
}
}
export const command = CommandModule;