tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_realms.js (4663B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { RootMessageHandler } = ChromeUtils.importESModule(
      7  "chrome://remote/content/shared/messagehandler/RootMessageHandler.sys.mjs"
      8 );
      9 
     10 add_task(async function test_tab_is_removed() {
     11  const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
     12  const sessionId = "realms";
     13  const browsingContext = tab.linkedBrowser.browsingContext;
     14  const contextDescriptor = {
     15    type: ContextDescriptorType.TopBrowsingContext,
     16    id: browsingContext.browserId,
     17  };
     18 
     19  const rootMessageHandler = createRootMessageHandler(sessionId);
     20 
     21  const onRealmCreated = rootMessageHandler.once("realm-created");
     22 
     23  // Add a new session data item to get window global handlers created
     24  await rootMessageHandler.addSessionDataItem({
     25    moduleName: "command",
     26    category: "browser_realms",
     27    contextDescriptor,
     28    values: [true],
     29  });
     30 
     31  const realmCreatedEvent = await onRealmCreated;
     32  const createdRealmId = realmCreatedEvent.realmInfo.realm;
     33 
     34  is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
     35 
     36  const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
     37 
     38  gBrowser.removeTab(tab);
     39 
     40  const realmDestroyedEvent = await onRealmDestroyed;
     41 
     42  is(
     43    realmDestroyedEvent.realm,
     44    createdRealmId,
     45    "Received a correct realm id in realm-destroyed event"
     46  );
     47  is(rootMessageHandler.realms.size, 0, "The realm map is cleaned up");
     48 
     49  rootMessageHandler.destroy();
     50 });
     51 
     52 add_task(async function test_same_origin_navigation() {
     53  const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
     54  const sessionId = "realms";
     55  const browsingContext = tab.linkedBrowser.browsingContext;
     56  const contextDescriptor = {
     57    type: ContextDescriptorType.TopBrowsingContext,
     58    id: browsingContext.browserId,
     59  };
     60 
     61  const rootMessageHandler = createRootMessageHandler(sessionId);
     62 
     63  const onRealmCreated = rootMessageHandler.once("realm-created");
     64 
     65  // Add a new session data item to get window global handlers created
     66  await rootMessageHandler.addSessionDataItem({
     67    moduleName: "command",
     68    category: "browser_realms",
     69    contextDescriptor,
     70    values: [true],
     71  });
     72 
     73  const realmCreatedEvent = await onRealmCreated;
     74  const createdRealmId = realmCreatedEvent.realmInfo.realm;
     75 
     76  is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
     77 
     78  const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
     79  const onNewRealmCreated = rootMessageHandler.once("realm-created");
     80 
     81  // Navigate to another page with the same origin
     82  await loadURL(
     83    tab.linkedBrowser,
     84    "https://example.com/document-builder.sjs?html=othertab"
     85  );
     86 
     87  const realmDestroyedEvent = await onRealmDestroyed;
     88 
     89  is(
     90    realmDestroyedEvent.realm,
     91    createdRealmId,
     92    "Received a correct realm id in realm-destroyed event"
     93  );
     94 
     95  await onNewRealmCreated;
     96 
     97  is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
     98 
     99  gBrowser.removeTab(tab);
    100  rootMessageHandler.destroy();
    101 });
    102 
    103 add_task(async function test_cross_origin_navigation() {
    104  const tab = await addTab("https://example.com/document-builder.sjs?html=tab");
    105  const sessionId = "realms";
    106  const browsingContext = tab.linkedBrowser.browsingContext;
    107  const contextDescriptor = {
    108    type: ContextDescriptorType.TopBrowsingContext,
    109    id: browsingContext.browserId,
    110  };
    111 
    112  const rootMessageHandler = createRootMessageHandler(sessionId);
    113 
    114  const onRealmCreated = rootMessageHandler.once("realm-created");
    115 
    116  // Add a new session data item to get window global handlers created
    117  await rootMessageHandler.addSessionDataItem({
    118    moduleName: "command",
    119    category: "browser_realms",
    120    contextDescriptor,
    121    values: [true],
    122  });
    123 
    124  const realmCreatedEvent = await onRealmCreated;
    125  const createdRealmId = realmCreatedEvent.realmInfo.realm;
    126 
    127  is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
    128 
    129  const onRealmDestroyed = rootMessageHandler.once("realm-destroyed");
    130  const onNewRealmCreated = rootMessageHandler.once("realm-created");
    131 
    132  // Navigate to another page with the different origin
    133  await loadURL(
    134    tab.linkedBrowser,
    135    "https://example.com/document-builder.sjs?html=otherorigin"
    136  );
    137 
    138  const realmDestroyedEvent = await onRealmDestroyed;
    139 
    140  is(
    141    realmDestroyedEvent.realm,
    142    createdRealmId,
    143    "Received a correct realm id in realm-destroyed event"
    144  );
    145 
    146  await onNewRealmCreated;
    147 
    148  is(rootMessageHandler.realms.size, 1, "Realm is added in the internal map");
    149 
    150  gBrowser.removeTab(tab);
    151  rootMessageHandler.destroy();
    152 });