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>