<!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>