<!DOCTYPE HTML>
<html>
<head>
<script src="../http/tests/resources/js-test-pre.js"></script>
<script src="../http/tests/resources/pointer-lock/pointer-lock-test-harness.js"></script>
</head>
<body>
<div>
  <div id="target1"></div>
  <div id="target2"></div>
  <iframe id="iframe1"></iframe>
  <iframe id="iframe2"></iframe>
</div>
<script>
    description("Test expected pointerlockchange and pointerlockerror events.")
    window.jsTestIsAsync = true;

    targetDiv1 = document.getElementById("target1");
    targetDiv2 = document.getElementById("target2");
    targetIframe1 = document.getElementById("iframe1");
    targetIframe2 = document.getElementById("iframe2");

    todo = [
        function () {
            expectNoEvents("Unlock.");
            document.webkitExitPointerLock();
            doNextStepWithUserGesture();
        },
        function () {
            expectOnlyChangeEvent("Lock targetDiv1.");
            targetDiv1.webkitRequestPointerLock();
        },
        function () {
            expectOnlyChangeEvent("Unlock again.");
            document.webkitExitPointerLock();
        },
        function () {
            expectOnlyChangeEvent("Lock targetDiv1 again.");
            targetDiv1.webkitRequestPointerLock();
        },
        function () {
            expectOnlyChangeEvent("Lock targetDiv2.");
            targetDiv2.webkitRequestPointerLock();
        },
        function () {
            expectOnlyChangeEvent("Lock targetDiv2 again.");
            targetDiv2.webkitRequestPointerLock();
        },
        function () {
            expectOnlyChangeEvent("Unlock targetDiv2.");
            document.webkitExitPointerLock();
        },
        function () {
            targetIframe1.src = "about:blank";
            targetIframe1.onload = function () { doNextStep(); }
        },
        function () {
            targetIframe2.src = "about:blank";
            targetIframe2.onload = function () { doNextStep(); }
        },
        function () {
            expectNoEvents("Lock targetIframe1.");
            expectOnlyChangeEvent("Lock targetIframe1 (handler for iframe1).", targetIframe1.contentDocument);
            targetIframe1.contentDocument.body.webkitRequestPointerLock();
        },
        function () {
            expectNoEvents("Lock targetIframe2.");
            expectNoEvents("Lock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
            expectOnlyErrorEvent("Lock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
            targetIframe2.contentDocument.body.webkitRequestPointerLock();
        },
        function () {
            expectNoEvents("Unlock targetIframe2.");
            expectOnlyChangeEvent("Unlock targetIframe2 (handler for iframe1).", targetIframe1.contentDocument);
            expectNoEvents("Unlock targetIframe2 (handler for iframe2).", targetIframe2.contentDocument);
            targetIframe1.contentDocument.webkitExitPointerLock();
        },
        function () {
            shouldBeDefined("testRunner.setPointerLockWillFailSynchronously");
            testRunner.setPointerLockWillFailSynchronously();
            expectOnlyErrorEvent("Lock with synchronous failure.");
            targetDiv1.webkitRequestPointerLock();
        },
        function () {
            shouldBeDefined("testRunner.setPointerLockWillRespondAsynchronously");
            shouldBeDefined("testRunner.didAcquirePointerLock");
            shouldBeDefined("testRunner.didNotAcquirePointerLock");
            testRunner.setPointerLockWillRespondAsynchronously();
            expectOnlyErrorEvent("Lock with asynchronous failure.");
            targetDiv1.webkitRequestPointerLock();
            doNextStep();
        },
        function () {
            testRunner.didNotAcquirePointerLock();
        },
        function () {
            testRunner.setPointerLockWillRespondAsynchronously();
            expectOnlyChangeEvent("Lock with asynchronous success.");
            targetDiv1.webkitRequestPointerLock();
            doNextStep();
        },
        function () {
            testRunner.didAcquirePointerLock();
        },
    ];
    doNextStep();
</script>
<script src="../http/tests/resources/js-test-post.js"></script>
</body>
</html>
