diff options
Diffstat (limited to 'remote/shared/messagehandler/test/browser/browser_realms.js')
-rw-r--r-- | remote/shared/messagehandler/test/browser/browser_realms.js | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/remote/shared/messagehandler/test/browser/browser_realms.js b/remote/shared/messagehandler/test/browser/browser_realms.js new file mode 100644 index 0000000000..815bfbbe85 --- /dev/null +++ b/remote/shared/messagehandler/test/browser/browser_realms.js @@ -0,0 +1,152 @@ +/* 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(); +}); |