tor-browser

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

browser_inspector-remove.js (3567B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 Services.scriptloader.loadSubScript(
      7  "chrome://mochitests/content/browser/devtools/server/tests/browser/inspector-helpers.js",
      8  this
      9 );
     10 
     11 add_task(async function testRemoveSubtree() {
     12  const { target, walker } = await initInspectorFront(
     13    MAIN_DOMAIN + "inspector-traversal-data.html"
     14  );
     15 
     16  await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
     17    function ignoreNode(node) {
     18      // Duplicate the walker logic to skip blank nodes...
     19      return (
     20        node.nodeType === content.Node.TEXT_NODE &&
     21        !/[^\s]/.test(node.nodeValue)
     22      );
     23    }
     24 
     25    let nextSibling = content.document.querySelector("#longlist").nextSibling;
     26    while (nextSibling && ignoreNode(nextSibling)) {
     27      nextSibling = nextSibling.nextSibling;
     28    }
     29 
     30    let previousSibling =
     31      content.document.querySelector("#longlist").previousSibling;
     32    while (previousSibling && ignoreNode(previousSibling)) {
     33      previousSibling = previousSibling.previousSibling;
     34    }
     35    content.nextSibling = nextSibling;
     36    content.previousSibling = previousSibling;
     37  });
     38 
     39  let originalOwnershipSize = 0;
     40  const longlist = await walker.querySelector(walker.rootNode, "#longlist");
     41  const longlistID = longlist.actorID;
     42  await walker.children(longlist);
     43  originalOwnershipSize = await assertOwnershipTrees(walker);
     44  // Here is how the ownership tree is summed up:
     45  // #document                      1
     46  //   <html>                       1
     47  //     <body>                     1
     48  //       <div id=longlist>        1
     49  //         <div id=a>a</div>   26*2 (each child plus it's singleTextChild)
     50  //         ...
     51  //         <div id=z>z</div>
     52  //                             -----
     53  //                               56
     54  is(originalOwnershipSize, 56, "Correct number of items in ownership tree");
     55 
     56  const onMutation = waitForMutation(walker, isChildList);
     57  const siblings = await walker.removeNode(longlist);
     58 
     59  await SpecialPowers.spawn(
     60    gBrowser.selectedBrowser,
     61    [[siblings.previousSibling.actorID, siblings.nextSibling.actorID]],
     62    function ([previousActorID, nextActorID]) {
     63      const { require } = ChromeUtils.importESModule(
     64        "resource://devtools/shared/loader/Loader.sys.mjs"
     65      );
     66      const {
     67        DevToolsServer,
     68      } = require("resource://devtools/server/devtools-server.js");
     69 
     70      // Convert actorID to current compartment string otherwise
     71      // searchAllConnectionsForActor is confused and won't find the actor.
     72      previousActorID = String(previousActorID);
     73      nextActorID = String(nextActorID);
     74      const previous =
     75        DevToolsServer.searchAllConnectionsForActor(previousActorID);
     76      const next = DevToolsServer.searchAllConnectionsForActor(nextActorID);
     77 
     78      is(
     79        previous.rawNode,
     80        content.previousSibling,
     81        "Should have returned the previous sibling."
     82      );
     83      is(
     84        next.rawNode,
     85        content.nextSibling,
     86        "Should have returned the next sibling."
     87      );
     88    }
     89  );
     90  await onMutation;
     91  // Our ownership size should now be 51 fewer (we forgot about #longlist + 26
     92  // children + 26 singleTextChild nodes, but learned about #longlist's
     93  // prev/next sibling)
     94  const newOwnershipSize = await assertOwnershipTrees(walker);
     95  is(
     96    newOwnershipSize,
     97    originalOwnershipSize - 51,
     98    "Ownership tree should be lower"
     99  );
    100  // Now verify that some nodes have gone away
    101  return checkMissing(target, longlistID);
    102 });