tor-browser

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

MediaStream-MediaElement-preload-none.https.html (3860B)


      1 <!DOCTYPE html>
      2 <html>
      3    <head>
      4        <title>Test that the HTMLMediaElement preload 'none' attribute value is ignored for MediaStream used as srcObject and MediaStream object URLs used as src.</title>
      5        <link rel="author" title="Matthew Wolenetz" href="mailto:wolenetz@chromium.org"/>
      6        <script src="/resources/testharness.js"></script>
      7        <script src="/resources/testharnessreport.js"></script>
      8        <script src="/resources/testdriver.js"></script>
      9        <script src="/resources/testdriver-vendor.js"></script>
     10        <script src="permission-helper.js"></script>
     11    </head>
     12    <body>
     13        <p class="instructions">When prompted, accept to share your audio and video streams.</p>
     14        <p class="instructions">This test checks that the HTMLMediaElement preload 'none' attribute value is ignored for MediaStream used as srcObject and MediaStream object URLs used as src.</p>
     15        <div id=log></div>
     16 
     17        <audio preload="none"></audio>
     18        <video preload="none"></video>
     19 
     20        <script>
     21            async function testPreloadNone(mediaElement, stream)
     22            {
     23                let rejectSuspendedPromise, rejectErrorPromise, resolveDataLoadedPromise;
     24                const suspended = new Promise((r, rej) => {
     25                  rejectSuspendedPromise = rej;
     26                });
     27                const errored = new Promise((r, rej) => {
     28                  rejectErrorPromise = rej;
     29                });
     30                const loaded = new Promise(resolve => {
     31                  resolveDataLoadedPromise = resolve;
     32                });
     33 
     34                // The optional deferred load steps (for preload none) for MediaStream resources should be skipped.
     35                mediaElement.addEventListener("suspend", () => {
     36                  rejectSuspendedPromise("'suspend' should not be fired.")
     37                });
     38                mediaElement.addEventListener("error", () => {
     39                  rejectErrorPromise("'error' should not be fired, code=" + mediaElement.error.code);
     40                });
     41 
     42                mediaElement.addEventListener("loadeddata", () => {
     43                  assert_equals(mediaElement.networkState, mediaElement.NETWORK_LOADING);
     44                  resolveDataLoadedPromise();
     45                });
     46 
     47                mediaElement.srcObject = stream;
     48                assert_equals(mediaElement.networkState, mediaElement.NETWORK_NO_SOURCE); // Resource selection is active.
     49                try {
     50                  await Promise.race([suspended, errored, loaded]);
     51                } catch (msg) {
     52                  assert_unreached(msg);
     53                }
     54 2            }
     55 
     56            promise_test(async () =>
     57            {
     58                const aud = document.querySelector("audio");
     59                // camera is needed for the next test, asking for both at once
     60                await setMediaPermission();
     61                let stream;
     62                try {
     63                  stream = await navigator.mediaDevices.getUserMedia({audio:true});
     64                } catch (e) {
     65                  assert_unreached("getUserMedia error callback was invoked.");
     66                }
     67                await testPreloadNone(aud, stream);
     68            }, "Test that preload 'none' is ignored for MediaStream object URL used as srcObject for audio");
     69 
     70            promise_test(async () =>
     71            {
     72                const vid = document.querySelector("video");
     73                let stream;
     74                try {
     75                  stream = await navigator.mediaDevices.getUserMedia({video:true});
     76                } catch (e) {
     77                  assert_unreached("getUserMedia error callback was invoked.")
     78                }
     79                await testPreloadNone(vid, stream);
     80 
     81            }, "Test that preload 'none' is ignored for MediaStream used as srcObject for video");
     82        </script>
     83    </body>
     84 </html>