202 lines
5.9 KiB
JavaScript
202 lines
5.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const { RootMessageHandler } = ChromeUtils.importESModule(
|
|
"chrome://remote/content/shared/messagehandler/RootMessageHandler.sys.mjs"
|
|
);
|
|
|
|
add_task(async function test_vendored_commands() {
|
|
// Navigate to a page to make sure that the windowglobal modules run in a
|
|
// different process than the root module.
|
|
const tab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
"https://example.com/document-builder.sjs?html=tab"
|
|
);
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
const browsingContextId = tab.linkedBrowser.browsingContext.id;
|
|
|
|
const rootMessageHandler = createRootMessageHandler(
|
|
"session-id-vendored-commands"
|
|
);
|
|
|
|
const valueFromRoot = await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "testRoot",
|
|
destination: {
|
|
type: RootMessageHandler.type,
|
|
},
|
|
});
|
|
is(valueFromRoot, "valueFromRoot");
|
|
|
|
const valueFromWindowGlobal = await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "testWindowGlobal",
|
|
destination: {
|
|
type: WindowGlobalMessageHandler.type,
|
|
id: browsingContextId,
|
|
},
|
|
});
|
|
is(valueFromWindowGlobal, "valueFromWindowGlobal");
|
|
|
|
const valueFromWindowGlobalInRoot = await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "testWindowGlobalInRoot",
|
|
destination: {
|
|
type: WindowGlobalMessageHandler.type,
|
|
id: browsingContextId,
|
|
},
|
|
});
|
|
is(valueFromWindowGlobalInRoot, "valueFromWindowGlobalInRoot");
|
|
|
|
rootMessageHandler.destroy();
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_vendored_events_dispatcher() {
|
|
// Navigate to a page to make sure that the windowglobal modules run in a
|
|
// different process than the root module.
|
|
const tab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
"https://example.com/document-builder.sjs?html=tab"
|
|
);
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
const browsingContext = tab.linkedBrowser.browsingContext;
|
|
const browsingContextId = browsingContext.id;
|
|
|
|
const rootMessageHandler = createRootMessageHandler(
|
|
"session-id-vendored-events-dispatcher"
|
|
);
|
|
const events = [];
|
|
const onEvent = (event, data) => events.push(data);
|
|
await rootMessageHandler.eventsDispatcher.on(
|
|
"vendor:vendored.vendoredWindowGlobalEvent",
|
|
{
|
|
type: ContextDescriptorType.TopBrowsingContext,
|
|
id: browsingContext.browserId,
|
|
},
|
|
onEvent
|
|
);
|
|
|
|
await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "emitVendoredWindowGlobalEvent",
|
|
destination: {
|
|
type: WindowGlobalMessageHandler.type,
|
|
id: browsingContextId,
|
|
},
|
|
});
|
|
|
|
await BrowserTestUtils.waitForCondition(() => events.length === 1);
|
|
is(events[0], "vendoredWindowGlobalEventValue");
|
|
|
|
await rootMessageHandler.eventsDispatcher.on(
|
|
"vendor:vendored.vendoredRootEvent",
|
|
{
|
|
type: ContextDescriptorType.All,
|
|
},
|
|
onEvent
|
|
);
|
|
|
|
await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "emitVendoredRootEvent",
|
|
destination: {
|
|
type: RootMessageHandler.type,
|
|
},
|
|
});
|
|
|
|
await BrowserTestUtils.waitForCondition(() => events.length === 2);
|
|
is(events[1], "vendoredRootEventValue");
|
|
|
|
rootMessageHandler.destroy();
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_vendored_session_data() {
|
|
// Navigate to a page to make sure that the windowglobal modules run in a
|
|
// different process than the root module.
|
|
const tab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
"https://example.com/document-builder.sjs?html=tab"
|
|
);
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
const browsingContextId = tab.linkedBrowser.browsingContext.id;
|
|
|
|
const rootMessageHandler = createRootMessageHandler(
|
|
"session-id-vendored-session-data"
|
|
);
|
|
|
|
await rootMessageHandler.updateSessionData([
|
|
{
|
|
method: "add",
|
|
moduleName: "vendor:vendored",
|
|
category: "vendored-session-data",
|
|
contextDescriptor: contextDescriptorAll,
|
|
values: ["vendored-session-data-value"],
|
|
},
|
|
]);
|
|
|
|
const valueFromSessionData = await rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:vendored",
|
|
commandName: "getSessionDataValue",
|
|
destination: {
|
|
type: WindowGlobalMessageHandler.type,
|
|
id: browsingContextId,
|
|
},
|
|
});
|
|
is(valueFromSessionData[0].value, "vendored-session-data-value");
|
|
|
|
rootMessageHandler.destroy();
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_vendored_unknown_modules() {
|
|
// Navigate to a page to make sure that the windowglobal modules run in a
|
|
// different process than the root module.
|
|
const tab = BrowserTestUtils.addTab(
|
|
gBrowser,
|
|
"https://example.com/document-builder.sjs?html=tab"
|
|
);
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
|
|
const rootMessageHandler = createRootMessageHandler(
|
|
"session-id-vendored-commands"
|
|
);
|
|
|
|
info("Attempt to call a vendored module with an unknown vendor prefix");
|
|
Assert.throws(
|
|
() =>
|
|
rootMessageHandler.handleCommand({
|
|
moduleName: "rodnev:vendored",
|
|
commandName: "testRoot",
|
|
destination: {
|
|
type: RootMessageHandler.type,
|
|
},
|
|
}),
|
|
err =>
|
|
err.name == "UnsupportedCommandError" &&
|
|
err.message ==
|
|
`rodnev:vendored.testRoot not supported for destination ROOT`
|
|
);
|
|
|
|
info("Attempt to call an unknown vendored module with a valid vendor prefix");
|
|
Assert.throws(
|
|
() =>
|
|
rootMessageHandler.handleCommand({
|
|
moduleName: "vendor:derodnev",
|
|
commandName: "testRoot",
|
|
destination: {
|
|
type: RootMessageHandler.type,
|
|
},
|
|
}),
|
|
err =>
|
|
err.name == "UnsupportedCommandError" &&
|
|
err.message ==
|
|
`vendor:derodnev.testRoot not supported for destination ROOT`
|
|
);
|
|
|
|
rootMessageHandler.destroy();
|
|
gBrowser.removeTab(tab);
|
|
});
|