<!-- webkit-test-runner [ enablePageCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.setCanOpenWindows();
    testRunner.setPopupBlockingEnabled(false);
    testRunner.setCloseRemainingWindowsWhenComplete(true);
    testRunner.waitUntilDone();
}

var intervalId;

function checkDidLoadVictim()
{
    // Document.defaultView becomes null when a Document no longer has a browsing context.
    if (!_openedWindowDocument.defaultView) {
        // Victim loaded; |_openedWindowDocument| is an inactive document.
        window.clearInterval(intervalId);

        // Run code in victim.
        var scriptToRunInVictim = _openedWindowDocument.createElement("script");
        scriptToRunInVictim.textContent = "alert('XSS')";
        _openedWindowDocument.body.appendChild(scriptToRunInVictim);
        if (window.testRunner)
            window.setTimeout(function () { window.testRunner.notifyDone(); }, 500);
    }
}

function attack()
{
    var iframe = document.querySelector("iframe");
    iframe.contentWindow.openVictimInNewWindow();

    document.body.removeChild(iframe); // Clear _openedWindow.opener.
    document.getElementById("description").textContent = 'Check the child window. The test FAILED if you see a JavaScript alert() dialog. Otherwise, it PASSED.';

    intervalId = window.setInterval(checkDidLoadVictim, 100);
}
</script>
</head>
<p id="description">This tests that a &lt;script&gt; added to an inactive document window does not execute. The test FAILED if you see JavaScript alert() dialog. Otherwise, it PASSED. Popup blocking must be disabled to run this test by hand.</p>
<iframe onload="attack()" srcdoc='
<body>
<script>
function openVictimInNewWindow()
{
    var childWindow = window.open("about:blank");
    var childWindowDocument = childWindow.document;
    window.parent._openedWindow = childWindow;
    window.parent._openedWindowDocument = childWindowDocument;

    var link = childWindowDocument.createElement("a");
    link.href = "http://localhost:8000/security/resources/innocent-victim.html";
    link.click(); // Navigate to victim
}
</script>
</body>
'></iframe>
</body>
</html>
