<!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>
<script>
    description("bug 90391: pointer lock mouse move events then window.open should not crash.")
    window.jsTestIsAsync = true;

    targetdiv1 = document.getElementById("target1");

    todo = [
        function () {
            debug("     Locking targetdiv1.")
            targetdiv1.webkitRequestPointerLock();
            document.onwebkitpointerlockchange = function () {
                document.onwebkitpointerlockchange = null;
                testPassed("document.onwebkitpointerlockchange event received.");
                doNextStep();
            };
        },
        function () {
            debug("     Sending mouse move events.")
            var mouseMoveEvents = 0;
            targetdiv1.onmousemove = function () {
                if (++mouseMoveEvents == 2) {
                    targetdiv1.onmousemove = null;
                    doNextStep();
                }
            }
            if (window.eventSender) {
              eventSender.mouseMoveTo(100, 100);
              eventSender.mouseMoveTo(200, 200);
            }
        },
        function () {
            debug("     Calling window.open.")
            gc();
            window.open();
            testPassed("Didn't crash");
            document.webkitExitPointerLock();
            doNextStep();
        },
    ];
    doNextStepWithUserGesture();
</script>
<script src="../http/tests/resources/js-test-post.js"></script>
</body>
</html>
