RTCEncodedAudioFrame-serviceworker-failure.https.html (2529B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> 4 <title>RTCEncodedVideoFrame cannot cross agent clusters, service worker edition</title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src=/resources/testdriver.js></script> 8 <script src=/resources/testdriver-vendor.js></script> 9 <script src='../../mediacapture-streams/permission-helper.js'></script> 10 <script src="../../webrtc/RTCPeerConnection-helper.js"></script> 11 <script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script> 12 13 <script> 14 "use strict"; 15 promise_test(async t => { 16 const caller = new RTCPeerConnection({encodedInsertableStreams:true}); 17 t.add_cleanup(() => caller.close()); 18 const callee = new RTCPeerConnection(); 19 t.add_cleanup(() => callee.close()); 20 21 await setMediaPermission("granted", ["microphone"]); 22 const stream = await navigator.mediaDevices.getUserMedia({audio:true}); 23 const track = stream.getTracks()[0]; 24 t.add_cleanup(() => track.stop()); 25 26 const sender = caller.addTrack(track) 27 const streams = sender.createEncodedStreams(); 28 const reader = streams.readable.getReader(); 29 const writer = streams.writable.getWriter(); 30 31 exchangeIceCandidates(caller, callee); 32 await exchangeOfferAnswer(caller, callee); 33 34 const result = await reader.read(); 35 const scope = "resources/blank.html"; 36 let reg = await service_worker_unregister_and_register(t, "resources/serviceworker-failure.js", scope); 37 t.add_cleanup(() => service_worker_unregister(t, scope)); 38 await wait_for_state(t, reg.installing, "activated"); 39 let iframe = await with_iframe(scope); 40 t.add_cleanup(() => iframe.remove()); 41 const sw = iframe.contentWindow.navigator.serviceWorker; 42 let state = "start in window"; 43 return new Promise(resolve => { 44 sw.onmessage = t.step_func(e => { 45 if (e.data === "start in worker") { 46 assert_equals(state, "start in window"); 47 sw.controller.postMessage(result.value); 48 state = "we are expecting confirmation of an onmessageerror in the worker"; 49 } else if (e.data === "onmessageerror was received in worker") { 50 assert_equals(state, "we are expecting confirmation of an onmessageerror in the worker"); 51 resolve(); 52 } else { 53 assert_unreached("Got an unexpected message from the service worker: " + e.data); 54 } 55 }); 56 57 sw.controller.postMessage(state); 58 }); 59 }); 60 </script>