mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
60 lines
2.5 KiB
HTML
60 lines
2.5 KiB
HTML
<!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", ["camera"]);
|
|
const stream = await navigator.mediaDevices.getUserMedia({video:true});
|
|
const videoTrack = stream.getVideoTracks()[0];
|
|
t.add_cleanup(() => videoTrack.stop());
|
|
|
|
const videoSender = caller.addTrack(videoTrack)
|
|
const senderStreams = videoSender.createEncodedStreams();
|
|
const senderReader = senderStreams.readable.getReader();
|
|
const senderWriter = senderStreams.writable.getWriter();
|
|
|
|
exchangeIceCandidates(caller, callee);
|
|
await exchangeOfferAnswer(caller, callee);
|
|
|
|
const result = await senderReader.read();
|
|
const scope = "resources/blank.html";
|
|
const 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");
|
|
const 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>
|