0480944cd12ee8e8073a3a8f231887b93e81e43e
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / media-source / interfaces.html
1 <!doctype html>
2 <meta charset=utf-8>
3 <title>Media Source Extensions IDL tests</title>
4 <div id=log></div>
5 <script src=/resources/testharness.js></script>
6 <script src=/resources/testharnessreport.js></script>
7 <script src=/resources/WebIDLParser.js></script>
8 <script src=/resources/idlharness.js></script>
9 <script type=text/plain class=untested>
10 interface EventTarget {
11   void addEventListener(DOMString type, EventListener? callback, optional boolean capture /* = false */);
12   void removeEventListener(DOMString type, EventListener? callback, optional boolean capture /* = false */);
13   boolean dispatchEvent(Event event);
14 };
15 interface URL {};
16 interface HTMLVideoElement {};
17 interface AudioTrack {};
18 interface AudioTrackList {};
19 interface VideoTrack {};
20 interface VideoTrackList {};
21 interface TextTrack {};
22 interface TextTrackList {};
23 interface TimeRanges {};
24 typedef double DOMHighResTimeStamp;
25 </script>
26 <script type=text/plain>
27 [Constructor]
28 interface MediaSource : EventTarget {
29     readonly    attribute SourceBufferList    sourceBuffers;
30     readonly    attribute SourceBufferList    activeSourceBuffers;
31     readonly    attribute ReadyState          readyState;
32                 attribute unrestricted double duration;
33                 attribute EventHandler        onsourceopen;
34                 attribute EventHandler        onsourceended;
35                 attribute EventHandler        onsourceclose;
36     SourceBuffer   addSourceBuffer (DOMString type);
37     void           removeSourceBuffer (SourceBuffer sourceBuffer);
38     void           endOfStream (optional EndOfStreamError error);
39     void           setLiveSeekableRange (double start, double end);
40     void           clearLiveSeekableRange ();
41     static boolean isTypeSupported (DOMString type);
42 };
43
44 interface SourceBuffer : EventTarget {
45                 attribute AppendMode          mode;
46     readonly    attribute boolean             updating;
47     readonly    attribute TimeRanges          buffered;
48                 attribute double              timestampOffset;
49     readonly    attribute AudioTrackList      audioTracks;
50     readonly    attribute VideoTrackList      videoTracks;
51     readonly    attribute TextTrackList       textTracks;
52                 attribute double              appendWindowStart;
53                 attribute unrestricted double appendWindowEnd;
54                 attribute EventHandler        onupdatestart;
55                 attribute EventHandler        onupdate;
56                 attribute EventHandler        onupdateend;
57                 attribute EventHandler        onerror;
58                 attribute EventHandler        onabort;
59     void appendBuffer (ArrayBuffer data);
60     void appendBuffer (ArrayBufferView data);
61     void appendStream (ReadableStream stream, [EnforceRange] optional unsigned long long maxSize);
62     void abort ();
63     void remove (double start, unrestricted double end);
64                     attribute TrackDefaultList    trackDefaults;
65 };
66
67 interface SourceBufferList : EventTarget {
68     readonly    attribute unsigned long length;
69                 attribute EventHandler  onaddsourcebuffer;
70                 attribute EventHandler  onremovesourcebuffer;
71     getter SourceBuffer (unsigned long index);
72 };
73
74 interface VideoPlaybackQuality {
75     readonly    attribute DOMHighResTimeStamp creationTime;
76     readonly    attribute unsigned long       totalVideoFrames;
77     readonly    attribute unsigned long       droppedVideoFrames;
78     readonly    attribute unsigned long       corruptedVideoFrames;
79     readonly    attribute double              totalFrameDelay;
80 };
81
82 [ Constructor (TrackDefaultType type, DOMString language, DOMString label, sequence<DOMString> kinds, optional DOMString byteStreamTrackID = "")]
83 interface TrackDefault {
84     readonly    attribute TrackDefaultType    type;
85     readonly    attribute DOMString           byteStreamTrackID;
86     readonly    attribute DOMString           language;
87     readonly    attribute DOMString           label;
88     sequence<DOMString> getKinds ();
89 };
90
91 [ Constructor (optional sequence<TrackDefault> trackDefaults = [])]
92 interface TrackDefaultList {
93     readonly    attribute unsigned long length;
94     getter TrackDefault (unsigned long index);
95 };
96
97 [Exposed=Window,DedicatedWorker,SharedWorker]
98 partial interface URL {
99     static DOMString createObjectURL (MediaSource mediaSource);
100 };
101
102 partial interface HTMLVideoElement {
103     VideoPlaybackQuality getVideoPlaybackQuality ();
104 };
105
106 partial interface AudioTrack {
107     readonly    attribute SourceBuffer? sourceBuffer;
108 };
109
110 partial interface VideoTrack {
111     readonly    attribute SourceBuffer? sourceBuffer;
112 };
113
114 partial interface TextTrack {
115     readonly    attribute SourceBuffer? sourceBuffer;
116 };
117
118 enum EndOfStreamError {
119     "network",
120     "decode"
121 };
122
123 enum AppendMode {
124     "segments",
125     "sequence"
126 };
127
128 enum ReadyState {
129     "closed",
130     "open",
131     "ended"
132 };
133
134 enum TrackDefaultType {
135     "audio",
136     "video",
137     "text"
138 };
139 </script>
140 <script>
141 "use strict";
142 var mediaSource;
143 var sourceBuffer;
144 var video = document.createElement("video");
145 var idlCheck = function() {
146   var idlArray = new IdlArray();
147   [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) {
148     if (node.className == "untested") {
149       idlArray.add_untested_idls(node.textContent);
150     } else {
151       idlArray.add_idls(node.textContent);
152     }
153   });
154   idlArray.add_objects({
155     MediaSource: ['mediaSource'],
156     SourceBuffer: ['sourceBuffer'],
157     SourceBufferList: ['mediaSource.sourceBuffers'],
158     VideoPlaybackQuality: ['video.getVideoPlaybackQuality()'],
159     TrackDefaultList: ['sourceBuffer.trackDefaults']
160   });
161   idlArray.test();
162 }
163 mediaSource = new MediaSource();
164 video.src = URL.createObjectURL(mediaSource);
165 mediaSource.addEventListener("sourceopen", function () {
166   var defaultType ='video/webm;codecs="vp8,vorbis"';
167   if (video.canPlayType(defaultType)) {
168     sourceBuffer = mediaSource.addSourceBuffer(defaultType);
169   } else {
170     sourceBuffer = mediaSource.addSourceBuffer('video/mp4');
171   }
172   sourceBuffer.addEventListener("updateend", function (e) {
173     mediaSource.endOfStream();
174     idlCheck();
175   });
176   sourceBuffer.appendBuffer(new ArrayBuffer());
177 });
178 </script>