1
0
Fork 0
firefox/remote/shared/messagehandler/test/browser/browser_realms.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

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();
});