-
Notifications
You must be signed in to change notification settings - Fork 54
/
idlharness.any.js
59 lines (51 loc) · 1.81 KB
/
idlharness.any.js
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
// 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');