Bug 1295815 - retry synthesizeNativeMouseMove until mousemove happens. r=xidorn draft
authorKan-Ru Chen <kanru@kanru.info>
Mon, 10 Apr 2017 10:08:42 -0400
changeset 559735 a5e965815541d6cb730e22a0659d340d49b3608a
parent 558427 9f96541515fd0e903021c89937b99990b5753cc1
child 623488 1d1d3436030c4e0082f39f9a4283f5bae0ba228a
push id53192
push userkchen@mozilla.com
push dateMon, 10 Apr 2017 14:09:08 +0000
reviewersxidorn
bugs1295815
milestone55.0a1
Bug 1295815 - retry synthesizeNativeMouseMove until mousemove happens. r=xidorn MozReview-Commit-ID: 9e10lJbHzDd
dom/tests/mochitest/pointerlock/file_screenClientXYConst.html
--- a/dom/tests/mochitest/pointerlock/file_screenClientXYConst.html
+++ b/dom/tests/mochitest/pointerlock/file_screenClientXYConst.html
@@ -25,16 +25,17 @@ https://bugzilla.mozilla.org/show_bug.cg
 
       SimpleTest.waitForExplicitFinish();
       SimpleTest.requestFlakyTimeout("We may need to wait for window's moving");
 
       var div
         , divRect
         , unLockedCoords
         , lockedCoords
+        , mouseMoveIntervalID
         , isUnlocked = false
         , isLocked = false;
 
       function runTests () {
         ok(isUnlocked, "Pointer should be unlocked");
         ok(isLocked, "Pointer should be locked");
 
         // Confirm that pointer coords are constant while locked
@@ -45,16 +46,17 @@ https://bugzilla.mozilla.org/show_bug.cg
         is(unLockedCoords.screenX, lockedCoords.screenX,
            "screenX should be equal to where the mouse was originaly locked");
         is(unLockedCoords.screenY, lockedCoords.screenY,
            "screenY should be equal to where the mouse was originaly locked");
       }
 
       function moveUnlocked(e) {
         info("Got mousemove via moveUnlocked");
+        clearInterval(mouseMoveIntervalID);
         var firstCall = !unLockedCoords;
         if (!firstCall) {
           todo(false, "mousemove is fired twice.");
         }
 
         unLockedCoords = {
           screenX: e.screenX,
           screenY: e.screenY,
@@ -67,16 +69,17 @@ https://bugzilla.mozilla.org/show_bug.cg
         }
 
         isUnlocked = !document.pointerLockElement;
         div.requestPointerLock();
       }
 
       function moveLocked(e) {
         info("Got mousemove via moveLocked");
+        clearInterval(mouseMoveIntervalID);
         div.removeEventListener("mousemove", moveLocked);
 
         isLocked = !!document.pointerLockElement;
         lockedCoords = {
           screenX: e.screenX,
           screenY: e.screenY,
           clientX: e.clientX,
           clientY: e.clientY
@@ -91,31 +94,39 @@ https://bugzilla.mozilla.org/show_bug.cg
       }
 
       document.addEventListener("pointerlockchange", function (e) {
         if (document.pointerLockElement === div) {
           info("Got pointerlockchange for entering");
           div.removeEventListener("mousemove", moveUnlocked);
           div.addEventListener("mousemove", moveLocked);
           divRect = div.getBoundingClientRect();
-          synthesizeNativeMouseMove(div, (divRect.width / 4) * 3,
-                                    (divRect.height / 4) * 3);
+          // Bug 1295815
+          // Retrigger synthesizeNativeMouseMove until it actually happens.
+          mouseMoveIntervalID = setInterval(() => {
+            synthesizeNativeMouseMove(div, (divRect.width / 4) * 3,
+                                      (divRect.height / 4) * 3);
+          }, 100);
         } else {
           info("Got pointerlockchange for exiting");
         }
       });
 
       function start() {
         div = document.getElementById("div");
         info("Requesting fullscreen on parent");
         addFullscreenChangeContinuation("enter", function() {
           info("Got fullscreenchange for entering");
           synthesizeNativeMouseMove(div, 0, 0, () => {
             div.addEventListener("mousemove", moveUnlocked);
             divRect = div.getBoundingClientRect();
-            synthesizeNativeMouseMove(div, divRect.width / 2, divRect.height / 2);
+            // Bug 1295815
+            // Retrigger synthesizeNativeMouseMove until it actually happens.
+            mouseMoveIntervalID = setInterval(() => {
+              synthesizeNativeMouseMove(div, divRect.width / 2, divRect.height / 2);
+            }, 100);
           });
         });
         div.requestFullscreen();
       }
   </script>
 </body>
 </html>