tor-browser

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

test_vrDisplay_requestPresent.html (6183B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4    <title>VRDisplay RequestPresent</title>
      5    <meta name="timeout" content="long"/>
      6    <script src="/resources/testharness.js"></script>
      7    <script src="/resources/testharnessreport.js"></script>
      8    <script src="VRSimulationDriver.js"></script>
      9    <script src="WebVRHelpers.js"></script>
     10    <script src="requestPresent.js"></script>
     11    <script src="runVRTest.js"></script>
     12 </head>
     13 <body id="body">
     14    <canvas id="webglCanvas"></canvas>
     15    <div id="testDiv"></div>
     16    <script>
     17        "use strict";
     18        var vrDisplay;
     19        var canvas = document.getElementById('webglCanvas');
     20        var div = document.getElementById('testDiv');
     21        function startTest() {
     22          promise_test((test) => {
     23            return setupVRDisplay(test).then(() => {
     24              return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{}]));
     25            }).then(() => {
     26              return validateDisplayNotPresenting(test, vrDisplay);
     27            });
     28          }, "WebVR requestPresent rejected with empty frames");
     29 
     30          promise_test((test) => {
     31            return setupVRDisplay(test).then(() => {
     32              return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas, leftBounds: [0.0, 0.0] }]));
     33            }).then(() => {
     34              return validateDisplayNotPresenting(test, vrDisplay);
     35            });
     36          }, "WebVR requestPresent rejected with incorrect bounds (bounds arrays must be 0 or 4 long)");
     37 
     38          promise_test((test) => {
     39            return setupVRDisplay(test).then(() => {
     40              return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: div }]));
     41            }).then(() => {
     42              return validateDisplayNotPresenting(test, vrDisplay);
     43            });
     44          }, "WebVR requestPresent rejected with invalid source (must be canvas element)");
     45 
     46          promise_test((test) => {
     47            return setupVRDisplay(test).then(() => {
     48              return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas, leftBounds: [div] }]));
     49            }).then(() => {
     50              return validateDisplayNotPresenting(test, vrDisplay);
     51            });
     52          }, "WebVR requestPresent rejected with invalid bounds data type (must be able to convert to float)");
     53 
     54          const invalidBounds = [
     55            [2.0, 0.0, 0.0, 0.0],
     56            [0.0, 2.0, 0.0, 0.0],
     57            [0.0, 0.0, 2.0, 0.0],
     58            [0.0, 0.0, 0.0, 2.0],
     59            [-1.0, 0.0, 0.0, 0.0],
     60            [0.0, -1.0, 0.0, 0.0],
     61            [0.0, 0.0, -1.0, 0.0],
     62            [0.0, 0.0, 0.0, -1.0]];
     63 
     64          invalidBounds.forEach((bound) => {
     65            promise_test((test) => {
     66              return setupVRDisplay(test).then(() => {
     67                return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas, leftBounds: bound }]));
     68              }).then(() => {
     69                return validateDisplayNotPresenting(test, vrDisplay);
     70              });
     71            }, "WebVR requestPresent rejected with bounds in invalid range: [" + bound + "]");
     72          });
     73 
     74          promise_test((test) => {
     75            return setupVRDisplay(test).then(() => {
     76              var promise = vrDisplay.requestPresent({ source: canvas });
     77              return promise_rejects(test, null, promise);
     78            }).then(() => {
     79              return validateDisplayNotPresenting(test, vrDisplay);
     80            });
     81          }, "WebVR requestPresent rejected without user initiated action");
     82 
     83          promise_test((test) => {
     84            return setupVRDisplay(test).then(() => {
     85              return promise_rejects(test, null, WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas }, { source: canvas }]));
     86            }).then(() => {
     87              return validateDisplayNotPresenting(test, vrDisplay);
     88            });
     89          }, "WebVR requestPresent rejected with more frames than max layers");
     90 
     91          promise_test((test) => {
     92            return setupVRDisplay(test).then(() => {
     93              function requestAgain() {
     94                // Callback for immediate requestPresent call for further testing.
     95                // Cache this promise on global object since it seems to be the only object
     96                // in scope across calls.
     97                window.promiseSecond = vrDisplay.requestPresent([{ source: canvas }]);
     98              }
     99              return WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas }], requestAgain);
    100            }).then(() => {
    101              // First promise succeeded
    102              assert_true(vrDisplay.isPresenting, "First promise should successfully fulfill");
    103              // Now, validate that the subsequent requestPresent was rejected
    104              return promise_rejects(test, null, window.promiseSecond);
    105            }).then(() => {
    106              delete window.promiseSecond;
    107              assert_true(vrDisplay.isPresenting, "Should still be presenting after rejected second promise");
    108              return vrDisplay.exitPresent();
    109            });
    110          }, "WebVR requestPresent fails while another one is in progress");
    111 
    112          promise_test((test) => {
    113            return setupVRDisplay(test).then(() => {
    114              return WebVRHelpers.RequestPresentOnVRDisplay(vrDisplay, [{ source: canvas }]);
    115            }).then(() => {
    116              assert_true(vrDisplay.isPresenting, "vrDisplay.isPresenting must be true if requestPresent is fulfilled.");
    117              assert_equals(vrDisplay.getLayers().length, 1, "vrDisplay.getLayers() should return one layer.");
    118                return vrDisplay.exitPresent();
    119            }).then(() => {
    120              assert_false(vrDisplay.isPresenting, "vrDisplay.isPresenting must be false if exitPresent is fulfilled.");
    121              // exitPresent() should reject since we are no longer presenting.
    122              return promise_rejects(test, null, vrDisplay.exitPresent());
    123            });
    124          }, "WebVR requestPresent fulfilled");
    125        }
    126 
    127        runVRTest(startTest);
    128    </script>
    129 </body>
    130 </html>