<!DOCTYPE html> <meta charset="utf-8"> <!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ --> <title>RTCEncodedVideoFrame cannot cross agent clusters, service worker edition</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src=/resources/testdriver.js></script> <script src=/resources/testdriver-vendor.js></script> <script src='../mediacapture-streams/permission-helper.js'></script> <script src="../webrtc/RTCPeerConnection-helper.js"></script> <script src="../service-workers/service-worker/resources/test-helpers.sub.js"></script> <script> "use strict"; promise_test(async t => { const caller = new RTCPeerConnection({encodedInsertableStreams:true}); t.add_cleanup(() => caller.close()); const callee = new RTCPeerConnection(); t.add_cleanup(() => callee.close()); await setMediaPermission("granted", ["microphone"]); const stream = await navigator.mediaDevices.getUserMedia({audio:true}); const track = stream.getTracks()[0]; t.add_cleanup(() => track.stop()); const sender = caller.addTrack(track) const streams = sender.createEncodedStreams(); const reader = streams.readable.getReader(); const writer = streams.writable.getWriter(); exchangeIceCandidates(caller, callee); await exchangeOfferAnswer(caller, callee); const result = await reader.read(); const scope = "resources/blank.html"; let reg = await service_worker_unregister_and_register(t, "resources/serviceworker-failure.js", scope); t.add_cleanup(() => service_worker_unregister(t, scope)); await wait_for_state(t, reg.installing, "activated"); let iframe = await with_iframe(scope); t.add_cleanup(() => iframe.remove()); const sw = iframe.contentWindow.navigator.serviceWorker; let state = "start in window"; return new Promise(resolve => { sw.onmessage = t.step_func(e => { if (e.data === "start in worker") { assert_equals(state, "start in window"); sw.controller.postMessage(result.value); state = "we are expecting confirmation of an onmessageerror in the worker"; } else if (e.data === "onmessageerror was received in worker") { assert_equals(state, "we are expecting confirmation of an onmessageerror in the worker"); resolve(); } else { assert_unreached("Got an unexpected message from the service worker: " + e.data); } }); sw.controller.postMessage(state); }); }); </script>