<!DOCTYPE html>
<html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<iframe id="testIframe" sandbox="allow-scripts allow-same-origin" style="display:none">
</iframe>

<script>
    var test = async_test("Test subframes receive orientation change events");

    var orientations = [
        'portrait-primary',
        'portrait-secondary',
        'landscape-primary',
        'landscape-secondary'
    ];

    var currentIndex = orientations.indexOf(window.screen.orientation.type);
    var eventsReceived = 0;

    function getNextIndex() {
        return (currentIndex + 1) % orientations.length;
    }

    function changeOrientation() {
        screen.orientation.lock(orientations[getNextIndex()]).then(function () {}, function () {});
        currentIndex = getNextIndex();
    }

    window.onmessage = test.step_func(function (ev) {
        assert_equals(ev.data, orientations[currentIndex], "subframe receives orientation change event");
        ++eventsReceived;
        if (eventsReceived < orientations.length)
            changeOrientation()
        else
            test.done();
    });

    var testIframe = document.getElementById("testIframe");
    testIframe.src = "resources/iframe-listen-orientation-change.html";
    testIframe.onload = changeOrientation;
</script>
</body>
</html>
