mirror of
https://github.com/servo/servo.git
synced 2025-07-10 08:53:41 +01:00
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
// META: script=/resources/WebIDLParser.js
|
|
// META: script=/resources/idlharness.js
|
|
|
|
// https://w3c.github.io/media-source/
|
|
|
|
'use strict';
|
|
|
|
var mediaSource;
|
|
var sourceBuffer;
|
|
var video = document.createElement("video");
|
|
|
|
promise_test(async t => {
|
|
const srcs = ['media-source', 'dom', 'html', 'url'];
|
|
const [idl, dom, html, url] = await Promise.all(
|
|
srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text())));
|
|
|
|
var idlArray = new IdlArray();
|
|
idlArray.add_idls(idl);
|
|
idlArray.add_dependency_idls(dom);
|
|
idlArray.add_dependency_idls(html);
|
|
idlArray.add_dependency_idls(url);
|
|
|
|
const testIdls = new Promise(resolve => {
|
|
try {
|
|
mediaSource = new MediaSource();
|
|
video.src = URL.createObjectURL(mediaSource);
|
|
mediaSource.addEventListener("sourceopen", function () {
|
|
var defaultType ='video/webm;codecs="vp8,vorbis"';
|
|
if (MediaSource.isTypeSupported(defaultType)) {
|
|
sourceBuffer = mediaSource.addSourceBuffer(defaultType);
|
|
} else {
|
|
sourceBuffer = mediaSource.addSourceBuffer('video/mp4');
|
|
}
|
|
sourceBuffer.addEventListener("updateend", function (e) {
|
|
mediaSource.endOfStream();
|
|
resolve();
|
|
});
|
|
sourceBuffer.appendBuffer(new ArrayBuffer());
|
|
});
|
|
} catch (e) {
|
|
// Will be surfaced in idlharness.js's test_object below.
|
|
}
|
|
})
|
|
|
|
idlArray.add_objects({
|
|
MediaSource: ['mediaSource'],
|
|
SourceBuffer: ['sourceBuffer'],
|
|
SourceBufferList: ['mediaSource.sourceBuffers']
|
|
});
|
|
|
|
const timeout = new Promise((_, reject) => t.step_timeout(reject, 3000));
|
|
return Promise
|
|
.race([testIdls, timeout])
|
|
.then(() => { idlArray.test(); })
|
|
.catch(() => {
|
|
idlArray.test();
|
|
return Promise.reject('Failed to create media-source objects')
|
|
});
|
|
}, 'media-source interfaces');
|