tor-browser

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

pointerevent_pointermove_in_pointerlock.html (7036B)


      1 <!doctype html>
      2 <html>
      3    <head>
      4        <title>pointermove</title>
      5        <meta charset="utf-8"/>
      6        <meta name="viewport" content="width=device-width">
      7        <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css">
      8        <script type="text/javascript" src="/resources/testharness.js"></script>
      9        <script type="text/javascript" src="/resources/testharnessreport.js"></script>
     10        <script type="text/javascript" src="/resources/testdriver.js"></script>
     11        <script type="text/javascript" src="/resources/testdriver-actions.js"></script>
     12        <script type="text/javascript" src="/resources/testdriver-vendor.js"></script>
     13        <!-- Additional helper script for common checks across event types -->
     14        <script type="text/javascript" src="../pointerevent_support.js"></script>
     15    </head>
     16    <body onload="run()">
     17        <h2>pointerlock</h2>
     18        <h4>Test Description: This test checks if pointermove is dispatched correctly while in pointerlock mode.
     19            <ol>
     20                <li>Click in the black box (and accept the pointerlock permission if asked).</li>
     21                <li>Move your mouse.</li>
     22                <li>Click in the purple box inside the iframe</li>
     23                <li>Move your mouse.</li>
     24            </ol>
     25        </h4>
     26        <div id="target0"></div>
     27        <iframe id="innerframe" onload="iframe_loaded()" src="resources/pointerevent_pointermove_in_pointerlock-iframe.html"></iframe>
     28        <script>
     29            window.name="outerframe";
     30            var test_pointermove = async_test("pointermove event received");
     31            var test_pointermove_innerframe = async_test("pointermove event received inner frame");
     32            var actions_promise1;
     33            var actions_promise2;
     34            var actions_promise3;
     35            var actions_promise4;
     36            PhaseEnum = {
     37              Start:     0,
     38              Lock1:     1,
     39              Lock2:     2,
     40              Done:      3,
     41            };
     42            var iframe_loaded_promise;
     43            var iframe_loaded_resolve;
     44 
     45            iframe_loaded_promise = new Promise((resolve, reject)=>{
     46              iframe_loaded_resolve = resolve;
     47            });
     48 
     49            function iframe_loaded(){
     50              iframe_loaded_resolve();
     51            }
     52 
     53            async function run() {
     54                // wait for iframe to fully load
     55                await iframe_loaded_promise;
     56                var target0 = document.getElementById("target0");
     57                var innerframe = document.getElementById('innerframe');
     58                var target1 = innerframe.contentDocument.getElementById('target1');
     59                innerframe.contentWindow.name = "innerframe";
     60                phase = PhaseEnum.Start;
     61 
     62                on_event(target0, "click", async (event)=>{
     63                  if(phase === PhaseEnum.Start){
     64                    target0.requestPointerLock();
     65                  }else{
     66                    await actions_promise2;
     67                    document.exitPointerLock();
     68                  }
     69                });
     70 
     71                on_event(target1, "click", async (event)=>{
     72                  if(phase === PhaseEnum.Lock1){
     73                    target1.requestPointerLock();
     74                  }
     75                  else{
     76                    await actions_promise4;
     77                    innerframe.contentDocument.exitPointerLock();
     78                  }
     79                });
     80 
     81                on_event(target0, "pointermove", async (event)=> {
     82                  if (phase === PhaseEnum.Lock1) {
     83                    test_pointermove.step(()=> {
     84                      assert_equals(document.pointerLockElement, target0);
     85                      assert_equals(event.view.name, "outerframe", "View attribute of pointermove should be the target frame.");
     86                    }, "View attribute of pointermove should be the target frame.");
     87                  }
     88                });
     89 
     90                on_event(target1, "pointermove", async (event)=> {
     91                  if (phase === PhaseEnum.Lock2) {
     92                    test_pointermove_innerframe.step(()=> {
     93                      assert_equals(innerframe.contentDocument.pointerLockElement, target1);
     94                      assert_equals(event.view.name, "innerframe", "View attribute of pointermove should be the target frame.");
     95                    }, "View attribute of pointermove should be the target frame.");
     96                  }
     97                });
     98 
     99                on_event(document, "pointerlockchange", async (event)=> {
    100                  await actions_promise1;
    101                  if (phase === PhaseEnum.Start) {
    102                    test_pointermove.step(()=>{
    103                      assert_equals(document.pointerLockElement, target0);
    104                    });
    105                    phase++;
    106                    // Send moves in main frame target and then click on target0
    107                    actions_promise2 = new test_driver.Actions()
    108                                            .pointerMove(10, 30, {origin: target0})
    109                                            .pointerMove(0, 0, {origin: target0})
    110                                            .pointerDown()
    111                                            .pointerUp()
    112                                            .send();
    113                  }else{
    114                    // when we exit pointerlock we are done
    115                    test_pointermove.done();
    116                    // user activate innerframe
    117                    actions_promise3 = clickInTarget("mouse", target1);
    118                  }
    119                });
    120 
    121                on_event(innerframe.contentDocument, "pointerlockchange", async (event)=> {
    122                  await actions_promise3;
    123                  if (phase === PhaseEnum.Lock1) {
    124                    test_pointermove_innerframe.step(()=>
    125                      assert_equals(innerframe.contentDocument.pointerLockElement, target1));
    126                    phase++;
    127                    // Send moves in inner frame target and then click anywhere in the inner frame
    128                    await new test_driver.Actions()
    129                                      .pointerMove(10, 30, {origin: target1})
    130                                      .send();
    131                    actions_promise4 = clickInTarget("mouse", target1);
    132                  }
    133                  else{
    134                    // when we exit pointerlock we are done
    135                    test_pointermove_innerframe.done();
    136                  }
    137                });
    138 
    139                on_event(document, "pointerlockerror", test_pointermove.unreached_func("pointer lock request should not fail in document!"));
    140                on_event(innerframe.contentDocument, "pointerlockerror", test_pointermove_innerframe.unreached_func("pointer lock request should not fail in innerframe.contentDocument!"));
    141 
    142                // Click the outer frame target to lock.
    143                actions_promise1 = clickInTarget("mouse", target0);
    144            }
    145        </script>
    146        <div id="complete-notice">
    147        </div>
    148    </body>
    149 </html>