152 lines
4.6 KiB
JavaScript
152 lines
4.6 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_tab_is_removed() {
|
|
const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
|
|
const sessionId = "realms";
|
|
const browsingContext = tab.linkedBrowser.browsingContext;
|
|
const contextDescriptor = {
|
|
type: ContextDescriptorType.TopBrowsingContext,
|
|
id: browsingContext.browserId,
|
|
};
|
|
|
|
const rootMessageHandler = createRootMessageHandler(sessionId);
|
|
|
|
const onRealmCreated = rootMessageHandler.once("realm-created");
|
|
|
|
// Add a new session data item to get window global handlers created
|
|
await rootMessageHandler.addSessionDataItem({
|
|
moduleName: "command",
|
|
category: "browser_realms",
|
|
contextDescriptor,
|
|
values: [true],
|
|
});
|
|
|
|
const realmCreatedEvent = await onRealmCreated;
|
|
const createdRealmId = realmCreatedEvent.realmInfo.realm;
|
|
|
|
is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
|
|
|
|
const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
|
|
|
|
gBrowser.removeTab(tab);
|
|
|
|
const realmDestroyedEvent = await onRealmDestroyed;
|
|
|
|
is(
|
|
realmDestroyedEvent.realm,
|
|
createdRealmId,
|
|
"Received a correct realm id in realm-destroyed event"
|
|
);
|
|
is(rootMessageHandler.realms.size, 0, "The realm map is cleaned up");
|
|
|
|
rootMessageHandler.destroy();
|
|
});
|
|
|
|
add_task(async function test_same_origin_navigation() {
|
|
const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
|
|
const sessionId = "realms";
|
|
const browsingContext = tab.linkedBrowser.browsingContext;
|
|
const contextDescriptor = {
|
|
type: ContextDescriptorType.TopBrowsingContext,
|
|
id: browsingContext.browserId,
|
|
};
|
|
|
|
const rootMessageHandler = createRootMessageHandler(sessionId);
|
|
|
|
const onRealmCreated = rootMessageHandler.once("realm-created");
|
|
|
|
// Add a new session data item to get window global handlers created
|
|
await rootMessageHandler.addSessionDataItem({
|
|
moduleName: "command",
|
|
category: "browser_realms",
|
|
contextDescriptor,
|
|
values: [true],
|
|
});
|
|
|
|
const realmCreatedEvent = await onRealmCreated;
|
|
const createdRealmId = realmCreatedEvent.realmInfo.realm;
|
|
|
|
is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
|
|
|
|
const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
|
|
const onNewRealmCreated = rootMessageHandler.once("realm-created");
|
|
|
|
// Navigate to another page with the same origin
|
|
await loadURL(
|
|
tab.linkedBrowser,
|
|
"https://example.com/document-builder.sjs?html=othertab"
|
|
);
|
|
|
|
const realmDestroyedEvent = await onRealmDestroyed;
|
|
|
|
is(
|
|
realmDestroyedEvent.realm,
|
|
createdRealmId,
|
|
"Received a correct realm id in realm-destroyed event"
|
|
);
|
|
|
|
await onNewRealmCreated;
|
|
|
|
is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
|
|
|
|
gBrowser.removeTab(tab);
|
|
rootMessageHandler.destroy();
|
|
});
|
|
|
|
add_task(async function test_cross_origin_navigation() {
|
|
const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
|
|
const sessionId = "realms";
|
|
const browsingContext = tab.linkedBrowser.browsingContext;
|
|
const contextDescriptor = {
|
|
type: ContextDescriptorType.TopBrowsingContext,
|
|
id: browsingContext.browserId,
|
|
};
|
|
|
|
const rootMessageHandler = createRootMessageHandler(sessionId);
|
|
|
|
const onRealmCreated = rootMessageHandler.once("realm-created");
|
|
|
|
// Add a new session data item to get window global handlers created
|
|
await rootMessageHandler.addSessionDataItem({
|
|
moduleName: "command",
|
|
category: "browser_realms",
|
|
contextDescriptor,
|
|
values: [true],
|
|
});
|
|
|
|
const realmCreatedEvent = await onRealmCreated;
|
|
const createdRealmId = realmCreatedEvent.realmInfo.realm;
|
|
|
|
is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
|
|
|
|
const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
|
|
const onNewRealmCreated = rootMessageHandler.once("realm-created");
|
|
|
|
// Navigate to another page with the different origin
|
|
await loadURL(
|
|
tab.linkedBrowser,
|
|
"https://example.com/document-builder.sjs?html=otherorigin"
|
|
);
|
|
|
|
const realmDestroyedEvent = await onRealmDestroyed;
|
|
|
|
is(
|
|
realmDestroyedEvent.realm,
|
|
createdRealmId,
|
|
"Received a correct realm id in realm-destroyed event"
|
|
);
|
|
|
|
await onNewRealmCreated;
|
|
|
|
is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
|
|
|
|
gBrowser.removeTab(tab);
|
|
rootMessageHandler.destroy();
|
|
});
|