locked-element-removed-from-dom.html 2.28 KB
Newer Older
1 2 3
<!DOCTYPE HTML>
<html>
<head>
4 5
<script src="../http/tests/resources/js-test-pre.js"></script>
<script src="../http/tests/resources/pointer-lock/pointer-lock-test-harness.js"></script>
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
</head>
<body>
<div>
  <iframe id="iframe1"></iframe>
  <div id="target2"></div>
</div>
<script>
    description("Test removing a locked element from a document causes lock to be released.")
    window.jsTestIsAsync = true;

    targetIframe1 = document.getElementById("iframe1");
    targetDiv2 = document.getElementById("target2");

    todo = [
        function () {
            // Load a blank iframe.
            targetIframe1.src = "about:blank";
            targetIframe1.onload = function () { doNextStepWithUserGesture(); }
        },
        function () {
            // Nest target element into iframe document.
            targetIframe1.contentDocument.body.innerHTML ="<div><div></div></div>";
            targetDiv1 = targetIframe1.contentDocument.body.firstChild.firstChild
            expectNoEvents("Lock target in iframe. (main document handler).");
            expectOnlyChangeEvent("Lock target in iframe. (iframe handler)", targetIframe1.contentDocument);
            targetDiv1.webkitRequestPointerLock();
            // doNextStep called by event handler.
        },
        function () {
35
            shouldBe("targetIframe1.contentDocument.webkitPointerLockElement", "targetDiv1");
36 37 38 39 40 41 42 43 44
            shouldBe("targetDiv1.parentElement.parentElement", "targetIframe1.contentDocument.body");
            expectOnlyErrorEvent("Remove targetDiv1's parent from iframe & immediately lock target2. (main document handler)");
            expectOnlyChangeEvent("Remove targetDiv1's parent from iframe & immediately lock target2. (iframe handler)", targetIframe1.contentDocument);
            targetDiv1.parentElement.parentElement.removeChild(targetDiv1.parentElement);
            targetDiv2.webkitRequestPointerLock();
            shouldBe("document.webkitPointerLockElement", "null");
            shouldBe("targetDiv1.parentElement.parentElement", "null");
            // doNextStep called by event handler.
        },
45 46 47
        function () {
            // Absorb an extra doNextStep() from previous event handlers.
        },
48 49 50
    ];
    doNextStep();
</script>
51
<script src="../http/tests/resources/js-test-post.js"></script>
52 53
</body>
</html>