/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; /* import-globals-from inspector-helpers.js */ Services.scriptloader.loadSubScript( "chrome://mochitests/content/browser/devtools/server/tests/browser/inspector-helpers.js", this ); add_task(async function testRemoveSubtree() { const { target, walker } = await initInspectorFront( MAIN_DOMAIN + "inspector-traversal-data.html" ); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function() { function ignoreNode(node) { // Duplicate the walker logic to skip blank nodes... return ( node.nodeType === content.Node.TEXT_NODE && !/[^\s]/.test(node.nodeValue) ); } let nextSibling = content.document.querySelector("#longlist").nextSibling; while (nextSibling && ignoreNode(nextSibling)) { nextSibling = nextSibling.nextSibling; } let previousSibling = content.document.querySelector("#longlist") .previousSibling; while (previousSibling && ignoreNode(previousSibling)) { previousSibling = previousSibling.previousSibling; } content.nextSibling = nextSibling; content.previousSibling = previousSibling; }); let originalOwnershipSize = 0; const longlist = await walker.querySelector(walker.rootNode, "#longlist"); const longlistID = longlist.actorID; await walker.children(longlist); originalOwnershipSize = await assertOwnershipTrees(walker); // Here is how the ownership tree is summed up: // #document 1 // 1 // 1 //
1 //
a
26*2 (each child plus it's singleTextChild) // ... //
z
// ----- // 56 is(originalOwnershipSize, 56, "Correct number of items in ownership tree"); const onMutation = waitForMutation(walker, isChildList); const siblings = await walker.removeNode(longlist); await SpecialPowers.spawn( gBrowser.selectedBrowser, [[siblings.previousSibling.actorID, siblings.nextSibling.actorID]], function([previousActorID, nextActorID]) { const { require } = ChromeUtils.import( "resource://devtools/shared/Loader.jsm" ); const { DevToolsServer } = require("devtools/server/devtools-server"); // Convert actorID to current compartment string otherwise // searchAllConnectionsForActor is confused and won't find the actor. previousActorID = String(previousActorID); nextActorID = String(nextActorID); const previous = DevToolsServer.searchAllConnectionsForActor( previousActorID ); const next = DevToolsServer.searchAllConnectionsForActor(nextActorID); is( previous.rawNode, content.previousSibling, "Should have returned the previous sibling." ); is( next.rawNode, content.nextSibling, "Should have returned the next sibling." ); } ); await onMutation; // Our ownership size should now be 51 fewer (we forgot about #longlist + 26 // children + 26 singleTextChild nodes, but learned about #longlist's // prev/next sibling) const newOwnershipSize = await assertOwnershipTrees(walker); is( newOwnershipSize, originalOwnershipSize - 51, "Ownership tree should be lower" ); // Now verify that some nodes have gone away return checkMissing(target, longlistID); });