1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
<!DOCTYPE HTML>
<html>
<head>
<title>Test that a non-autoplaying, non-playing element with a MediaStream source triggers canplay and shows a first frame</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="manifest.js"></script>
<script src="/tests/dom/canvas/test/captureStream_common.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">
async function runTest() {
const canvas = document.createElement("canvas");
canvas.getContext("2d");
const helper = new CaptureStreamTestHelper2D(100, 100);
const video = document.createElement("video");
document.body.appendChild(video);
video.srcObject = canvas.captureStream();
helper.drawColor(canvas, helper.red);
await Promise.race([
new Promise(r => video.oncanplay = r),
new Promise(r => setTimeout(r, 30000))
.then(() => Promise.reject(new Error("Canplay timeout"))),
]);
ok(true, "Got \"canplay\"");
is(video.readyState, video.HAVE_ENOUGH_DATA, "Expected readyState");
ok(helper.isPixel(helper.getPixel(video), helper.red),
"First frame is rendered before playing");
helper.drawColor(canvas, helper.green);
await helper.pixelMustNotBecome(video, helper.green, {
time: 1000,
infoString: "Rendered first frame doesn't change on new frame from source"
});
ok(helper.isPixel(helper.getPixel(video), helper.red),
"First frame is still rendered");
video.play();
helper.drawColor(canvas, helper.blue);
await helper.pixelMustBecome(video, helper.blue, {
infoString: "New frame gets rendered when playing"
});
video.srcObject.getTracks().forEach(t => t.stop());
}
(async function() {
SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout("Explicit timeout reasons");
try {
await runTest();
} catch(e) {
ok(false, e);
}
SimpleTest.finish();
})();
</script>
</pre>
</body>
</html>
|