<!DOCTYPE html>
<html>
<body>
<p>This test ensures beforeunload event fires exactly once in a subframe even if the frame was adopted to a frame that appears later in the tree.</p>
<pre id="log"></pre>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function createFrame(id, parent) {
    var iframe = document.createElement('iframe');
    if (parent)
        parent.contentDocument.body.appendChild(iframe);
    else
        document.body.appendChild(iframe);
    iframe.contentDocument.body.appendChild(iframe.contentDocument.createTextNode(id));    
    iframe.contentDocument.body.appendChild(iframe.contentDocument.createElement('br'));
    iframe.contentWindow.onbeforeunload = function () { fired(iframe.contentWindow, id); return null; }
    iframe.style.width = '70%';
    iframe.style.height = '40%';
    return iframe;
}

function log(message) {
    var log = document.getElementById('log');
    log.innerHTML += message + '\n';
}

var expectedOrder = ['parent', 'a', 'adoptee', 'b'];
var i = 0;

function fired(contentWindow, id) {
    if (expectedOrder[i] == id)
        log('PASS: fired on ' + id);
    else
        log('FAIL: fired on ' + id + ' but expected on ' + expectedOrder[i]);
    i++;

    if (contentWindow == adoptee.contentWindow) {
        log('adopting');
        b.contentDocument.body.appendChild(b.contentDocument.adoptNode(adoptee));
        log('adopted');
    }
}

var container = createFrame('parent');
var a = createFrame('a', container);
var adoptee = createFrame('adoptee', a);
var b = createFrame('b', container);

container.onload = function () {
    if (i == expectedOrder.length)
        log('DONE');
    else
        log('Received ' + i + ' events but expected ' + expectedOrder.length);
    if (window.testRunner)
        testRunner.notifyDone();
}
container.src = 'resources/before-unload-in-subframe-destination.html';

</script>
</body>
</html>
