<!DOCTYPE html>
<html>
<body>
<p>Verify that creation of a worker does not leak its creating document.</p>
<div id='console'></div>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/gc.js"></script>
<script>
jsTestIsAsync = true;

// Set this number as high as possible without introducing timeouts in debug builds.
// Reducing it does not require rebaselines.
var numIterations = 6;

var doneCallback;
    
window.onmessage = function(event) {
    if (event.data == "done" && doneCallback) {
        doneCallback();
    }
}
    
function waitForDoneMessage() {
    return new Promise(resolve => {
        doneCallback = () => {
            doneCallback = null;
            resolve();
        }
    });
}

async function startTest() {
    try {
        let message = await testDocumentIsNotLeaked(async documentCount => {
            let frameIdentifiers = [];
            for (var i = 0; i < documentCount; i++) {
                let frame = document.body.appendChild(document.createElement("iframe"));
                frame.src = "resources/worker-document-leak-iframe.html";
                await waitForDoneMessage()
                frameIdentifiers.push(internals.documentIdentifier(frame.contentDocument));
                frame.remove();
            }
            return frameIdentifiers;
        }, { documentCount: numIterations });
        testPassed(message);
    } catch (error) {
        testFailed(error.message);
    }
    finishJSTest();
}

window.onload = startTest;
</script>
</body>
</html>
