47 lines
2.2 KiB
HTML
47 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../http/tests/inspector/resources/protocol-test.js"></script>
|
|
<script>
|
|
function test()
|
|
{
|
|
let suite = ProtocolTest.createAsyncSuite("DOM.willDestroyDOMNode");
|
|
|
|
suite.addTestCase({
|
|
name: "DOM.willDestroyDOMNode.CreateDeleteAndGCDetachedNode",
|
|
description: "Create a new DOM node that is not attached the DOM tree, and then allow it to be garbage collected.",
|
|
async test() {
|
|
ProtocolTest.log("Creating new detached DOM node.");
|
|
let domNodeResponse = await InspectorProtocol.awaitCommand({ method: "Runtime.evaluate", params: { expression: `document.createElement("a")` } });
|
|
let objectId = domNodeResponse.result.objectId;
|
|
ProtocolTest.assert(!domNodeResponse.wasThrown);
|
|
|
|
ProtocolTest.log("Requesting DOM node in order to receive future events.");
|
|
// FIXME: <https://webkit.org/b/213499> Web Inspector: allow DOM nodes to be instrumented at any point, regardless of whether the main document has also been instrumented
|
|
await InspectorProtocol.awaitCommand({ method: "DOM.getDocument"});
|
|
let node = await InspectorProtocol.awaitCommand({ method: "DOM.requestNode", params: { objectId } });
|
|
|
|
// ProtocolTest.log("Releasing reference to node held by remote object.")
|
|
// await InspectorProtocol.awaitCommand({ method: "Console.clearMessages" });
|
|
|
|
ProtocolTest.log("Releasing node and then triggering garbage collection while awaiting `DOM.willDestroyDOMNode` event.");
|
|
let deleteNodePromise = InspectorProtocol.awaitCommand({ method: "Runtime.releaseObject", params: { objectId } });
|
|
let gcPromise = ProtocolTest.evaluateInPage(`GCController.collect()`);
|
|
|
|
await Promise.all([
|
|
InspectorProtocol.awaitEvent({event:"DOM.willDestroyDOMNode"}),
|
|
deleteNodePromise.then((resolve) => gcPromise),
|
|
]);
|
|
|
|
ProtocolTest.log("Received event `DOM.willDestoryDOMNode` after garbage collection.");
|
|
},
|
|
});
|
|
|
|
suite.runTestCasesAndFinish();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="runTest();">
|
|
<p>Test for DOM.willDestroyDOMNode.</p>
|
|
</body>
|
|
</html> |