tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pointerevent_movementxy_with_pointerlock.html (5794B)


      1 <!doctype html>
      2 <html>
      3    <head>
      4        <title>Pointer Events pointer lock tests</title>
      5        <meta name="viewport" content="width=device-width">
      6        <link rel="stylesheet" type="text/css" href="/external/wpt/pointerevents/pointerevent_styles.css">
      7        <script src="/resources/testharness.js"></script>
      8        <script src="/resources/testharnessreport.js"></script>
      9        <script src="/resources/testdriver.js"></script>
     10        <script src="/resources/testdriver-actions.js"></script>
     11        <script src="/resources/testdriver-vendor.js"></script>
     12        <script type="text/javascript" src="../pointerevent_support.js"></script>
     13        <style>
     14          #testContainer {
     15            touch-action: none;
     16            user-select: none;
     17            position: relative;
     18          }
     19        </style>
     20        <script>
     21           PhaseEnum = {
     22              BeforeLocked:     0,
     23              PointerLocked:    1,
     24              PointerUnlocked:  2,
     25              Done:             3,
     26            };
     27            var phase = PhaseEnum.BeforeLocked;
     28            var last_event;
     29            var mouseeventMovements = []
     30            var pointereventMovements = []
     31 
     32            function resetTestState() {
     33            }
     34 
     35            function run() {
     36                var test_pointerEvent = setup_pointerevent_test("pointerevent movementX/Y with pointerlock test", ['mouse']);
     37 
     38                function testPointerMoves(event) {
     39                    if (last_event) {
     40                        if (phase == PhaseEnum.PointerLocked){
     41                            test_pointerEvent.step(function() {
     42                                assert_equals(event.screenX, last_event.screenX);
     43                                assert_equals(event.screenY, last_event.screenY);
     44                            });
     45                        } else { // BeforeLocked || Unlocked
     46                            test_pointerEvent.step(function() {
     47                                assert_equals(event.screenX - last_event.screenX, event.movementX);
     48                                assert_equals(event.screenY - last_event.screenY, event.movementY);
     49                            });
     50                        }
     51                    }
     52                    last_event = event;
     53                }
     54 
     55                on_event(target, 'click', function(event) {
     56                    if (phase == PhaseEnum.BeforeLocked)
     57                       target.requestPointerLock();
     58                    else if (phase == PhaseEnum.PointerLocked)
     59                       document.exitPointerLock();
     60                    else if (phase == PhaseEnum.PointerUnlocked)
     61                        test_pointerEvent.done();
     62                });
     63                on_event(target, 'pointermove', function(event) {
     64                    if (phase == PhaseEnum.PointerLocked) {
     65                        pointereventMovements.push(`${event.movementX}, ${event.movementY}`);
     66                    }
     67                    testPointerMoves(event);
     68                });
     69                on_event(target, 'mousemove', function(event) {
     70                    if (phase == PhaseEnum.PointerLocked) {
     71                        mouseeventMovements.push(`${event.movementX}, ${event.movementY}`);
     72                    }
     73                });
     74                on_event(document, 'pointerlockchange', function(event) {
     75                    phase++;
     76                    last_event = null;
     77                    if (phase == PhaseEnum.PointerLocked) {
     78                        test_pointerEvent.step(function() {
     79                            assert_equals(document.pointerLockElement, target, "document.pointerLockElement should be target.");
     80                        });
     81                    } else if (phase == PhaseEnum.PointerUnlocked) {
     82                        test_pointerEvent.step(function() {
     83                            assert_equals(document.pointerLockElement, null, "document.pointerLockElement should be null.");
     84                            assert_not_equals(mouseeventMovements.length, 0);
     85                            assert_array_equals(pointereventMovements, mouseeventMovements, "pointermove should have movementX/Y same as mousemove");
     86                        });
     87                    }
     88                    pointerHoverInTarget('mouse', target, 'right').then(function() {
     89                        return clickInTarget("mouse", target);
     90                    });
     91                });
     92 
     93                // Inject mouse inputs.
     94                pointerHoverInTarget('mouse', target, 'right').then(function() {
     95                    return clickInTarget("mouse", target);
     96                });
     97            }
     98        </script>
     99    </head>
    100    <body onload="run()">
    101        <h1>Pointer Events movement with pointerlock test</h1>
    102        <h2 id="pointerTypeDescription"></h2>
    103        <h4>
    104            Test Description: This test checks pointerevent movementX/Y value with pointerlock.
    105            It checks whether movement X/Y matches event.screenX/Y - last_event.screenX/Y when pointer is not locked;
    106            And if pointermove.movementX/Y matches mousemove.movementX/Y when pointer is locked.
    107            <ol>
    108                 <li>Move the mouse inside the green rectangle.</li>
    109                 <li>Click left button on the green rectangle.(Enter pointerlock)</li>
    110                 <li>Move the mouse around.</li>
    111                 <li>Click left button again</li>
    112                 <li>Move the mouse inside the green rectangle.</li>
    113                 <li>Click left button again to end the test.</li>
    114            </ol>
    115 
    116            Test passes if the proper behavior of the events is observed.
    117        </h4>
    118        <div id="testContainer">
    119            <div id="target" style="width:800px;height:250px;background:green"></div>
    120        </div>
    121        <div class="spacer"></div>
    122    </body>
    123 </html>