<!DOCTYPE html>
<html>
<body>
<script src="../resources/js-test-pre.js"></script>
<script>

description('This tests the order by which tasks are scheduled across documents that are not similar origins.');

if (!window.internals)
    testFailed('This test relies on window.internals');
else {
    jsTestIsAsync = true;
    window.onload = startTest;
}

logs = [];
crossOriginLogs = [];

async function startTest()
{
    const frame1 = document.createElement('iframe');
    document.body.appendChild(frame1);

    const frame2 = document.createElement('iframe');
    frame2.name = 'frame2';
    frame2.src = 'http://localhost:8000/eventloop/resources/eventloop-helper.html';
    document.body.appendChild(frame2);

    const frame3 = document.createElement('iframe');
    frame3.src = 'resources/eventloop-helper.html';
    document.body.appendChild(frame3);

    const frame4 = document.createElement('iframe');
    frame4.name = 'frame4';
    frame4.src = 'http://localhost:8000/eventloop/resources/eventloop-helper.html';

    await waitForLoad(frame3);
    frame3.contentDocument.body.appendChild(frame4);

    await waitForLoad(frame2);
    await waitForLoad(frame4);

    frame3.contentWindow.internals.queueTask("DOMManipulation", () => logs.push('1'));
    frame3.contentWindow.internals.queueTask("DOMManipulation", () => logs.push('2'));
    internals.queueTask("DOMManipulation", () => logs.push('3'));
    frame1.contentWindow.internals.queueTask("DOMManipulation", () => logs.push('4'));
    internals.queueTask("DOMManipulation", () => logs.push('5'));

    frame2.contentWindow.postMessage({
        type: 'run',
        order: ['frame2', 'frame2', 'self'],
        startingNumber: 10,
    }, '*');

    setTimeout(() => {
        shouldBeEqualToString('logs.join(", ")', '1, 2, 3, 4, 5');
        shouldBeEqualToString('crossOriginLogs.join(", ")', '10, 11, 12');
        finishJSTest();
    }, 100);
}

const loadedFrames = new Map;
onmessage = (event) => {
    if (event.data.type == 'load') {
        const resolve = loadedFrames.get(event.source);
        if (resolve)
            resolve();
        else
            loadedFrames.set(event.source, null);
    } else if (event.data.type == 'logs')
        crossOriginLogs = event.data.logs;
}

function waitForLoad(frame)
{
    if (loadedFrames.has(frame.contentWindow))
        return Promise.resolve();
    return new Promise((resolve) => loadedFrames.set(frame.contentWindow, resolve));
}

successfullyParsed = true;

</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
