gecko-dev/devtools/server/tests/browser/browser_inspector-remove.js
Alexandre Poirot 189029e823 Bug 1520782 - Convert inspector tests using chrome documents and using server references directly to browser mochitests. r=pbro
These tests were using chrome mochitest which forces the test page to be running in chrome and in parent process.
This doesn't reflect typical setup where the page runs unprivileged in content process.
Also, with the current bug, the pages running in system principal will be debugged with a special setup.
Actors will be run with modules loaded in a distinct loader in order to be executed
in a distinct compartment, distinct from the shared system principal compartment.
That a prerequisite for the Debugger API. It has to run in a distinct compartment than its debuggee.

Depends on D16825

Differential Revision: https://phabricator.services.mozilla.com/D16826

--HG--
rename : devtools/server/tests/mochitest/animation-data.html => devtools/server/tests/browser/animation-data.html
rename : devtools/server/tests/mochitest/test_inspector-mutations-childlist.html => devtools/server/tests/browser/browser_inspector-mutations-childlist.js
rename : devtools/server/tests/mochitest/inspector-helpers.js => devtools/server/tests/browser/inspector-helpers.js
extra : moz-landing-system : lando
2019-01-23 08:53:03 +00:00

80 lines
3.4 KiB
JavaScript

/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* 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 ContentTask.spawn(gBrowser.selectedBrowser, null, function() {
function ignoreNode(node) {
// Duplicate the walker logic to skip blank nodes...
return node.nodeType === 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
// <html> 1
// <body> 1
// <div id=longlist> 1
// <div id=a>a</div> 26*2 (each child plus it's singleTextChild)
// ...
// <div id=z>z</div>
// -----
// 56
is(originalOwnershipSize, 56, "Correct number of items in ownership tree");
const onMutation = waitForMutation(walker, isChildList);
const siblings = await walker.removeNode(longlist);
await ContentTask.spawn(gBrowser.selectedBrowser,
[siblings.previousSibling.actorID, siblings.nextSibling.actorID],
function([previousActorID, nextActorID]) {
const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
const { DebuggerServer } = require("devtools/server/main");
// Convert actorID to current compartment string otherwise
// searchAllConnectionsForActor is confused and won't find the actor.
previousActorID = String(previousActorID);
nextActorID = String(nextActorID);
const previous = DebuggerServer.searchAllConnectionsForActor(previousActorID);
const next = DebuggerServer.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);
});