Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / media / media-source / mediasource-addsourcebuffer.html
1 <!DOCTYPE html>
2 <html>
3     <head>
4         <script src="/w3c/resources/testharness.js"></script>
5         <script src="/w3c/resources/testharnessreport.js"></script>
6         <script src="mediasource-util.js"></script>
7
8         <link rel='stylesheet' href='/w3c/resources/testharness.css'>
9     </head>
10     <body>
11         <div id="log"></div>
12         <script>
13           mediasource_test(function(test, mediaElement, mediaSource)
14           {
15               mediaSource.endOfStream();
16               assert_throws("InvalidStateError",
17                           function() { mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); },
18                           "addSourceBuffer() threw an exception when in 'ended' state.");
19               test.done();
20           }, "Test addSourceBuffer() in 'ended' state.");
21
22           mediasource_test(function(test, mediaElement, mediaSource)
23           {
24               assert_throws("InvalidAccessError",
25                           function() { mediaSource.addSourceBuffer(""); },
26                           "addSourceBuffer() threw an exception when passed an empty string.");
27               test.done();
28           }, "Test addSourceBuffer() with empty type");
29
30           mediasource_test(function(test, mediaElement, mediaSource)
31           {
32               assert_throws("NotSupportedError",
33                           function() { mediaSource.addSourceBuffer(null); },
34                           "addSourceBuffer() threw an exception when passed null.");
35               test.done();
36           }, "Test addSourceBuffer() with null");
37           
38           mediasource_test(function(test, mediaElement, mediaSource)
39           {
40               assert_throws("NotSupportedError",
41                           function() { mediaSource.addSourceBuffer("invalidType"); },
42                           "addSourceBuffer() threw an exception for an unsupported type.");
43               test.done();
44           }, "Test addSourceBuffer() with unsupported type");
45
46           mediasource_test(function(test, mediaElement, mediaSource)
47           {
48               var mimetype = 'video/webm;codecs="vp8,vorbis"';
49
50               assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");
51
52               var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
53               assert_true(sourceBuffer != null, "New SourceBuffer returned");
54               assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
55               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
56               test.done();
57           }, "Test addSourceBuffer() with Vorbis and VP8");
58
59           mediasource_test(function(test, mediaElement, mediaSource)
60           {
61               var videoMimetype = 'video/webm;codecs="vp8"';
62               var audioMimetype = 'audio/webm;codecs="vorbis"';
63
64               assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported");
65               assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported");
66
67               var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
68               var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
69               assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
70               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
71               assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
72               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
73               test.done();
74           }, "Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers");
75
76           mediasource_test(function(test, mediaElement, mediaSource)
77           {
78               var mimetype = MediaSourceUtil.VIDEO_ONLY_TYPE;
79
80               assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");
81
82               var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
83               assert_true(sourceBuffer != null, "New SourceBuffer returned");
84               assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
85               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
86               test.done();
87           }, "Test addSourceBuffer() video only");
88           
89           mediasource_test(function(test, mediaElement, mediaSource)
90           {
91               var mimetype = MediaSourceUtil.AUDIO_ONLY_TYPE;
92
93               assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");
94
95               var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
96               assert_true(sourceBuffer != null, "New SourceBuffer returned");
97               assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
98               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
99               test.done();
100           }, "Test addSourceBuffer() audio only");
101
102           mediasource_test(function(test, mediaElement, mediaSource)
103           {
104               var mimetype = 'video/mp4;codecs="avc1.4D4001,mp4a.40.2"';
105
106               assert_true(MediaSource.isTypeSupported(mimetype), mimetype + " is supported");
107
108               var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
109               assert_true(sourceBuffer != null, "New SourceBuffer returned");
110               assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
111               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
112               test.done();
113           }, "Test addSourceBuffer() with AAC and H.264");
114
115           mediasource_test(function(test, mediaElement, mediaSource)
116           {
117               var videoMimetype = 'video/mp4;codecs="avc1.4D4001"';
118               var audioMimetype = 'audio/mp4;codecs="mp4a.40.2"';
119
120               assert_true(MediaSource.isTypeSupported(videoMimetype), videoMimetype + " is supported");
121               assert_true(MediaSource.isTypeSupported(audioMimetype), audioMimetype + " is supported");
122
123               var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
124               var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
125               assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
126               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
127               assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
128               assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
129               test.done();
130           }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers");
131
132           mediasource_test(function(test, mediaElement, mediaSource)
133           {
134               var reachedLimit = false;
135
136              // The 20 here is an arbitrary upper limit to make sure the test terminates. This test
137              // assumes that implementations won't support more than 20 SourceBuffers simultaneously.
138              for (var i = 0; i < 20; ++i) {
139                  try {
140                      mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
141                  } catch(e) {
142                      assert_equals(e.name, "QuotaExceededError");
143                      reachedLimit = true;
144                      break;
145                  }
146              }
147              assert_true(reachedLimit, "Reached SourceBuffer limit.");
148              test.done();
149           }, "Test addSourceBuffer() QuotaExceededError.");
150         </script>
151     </body>
152 </html>