Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / media / media-source / mediasource-errors.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         <link rel='stylesheet' href='/w3c/resources/testharness.css'>
8     </head>
9     <body>
10         <div id="log"></div>
11         <script>
12             function ErrorTest(testFunction, description)
13             {
14                 mediasource_test(function(test, mediaElement, mediaSource)
15                 {
16                     var segmentInfo = MediaSourceUtil.SEGMENT_INFO;
17
18                     if (!segmentInfo) {
19                         assert_unreached("No segment info compatible with this MediaSource implementation.");
20                         return;
21                     }
22
23                     var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type);
24                     MediaSourceUtil.loadBinaryData(test, segmentInfo.url, function(mediaData)
25                     {
26                         testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData);
27                     });
28                 }, description);
29             }
30
31             ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
32             {
33                 var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
34
35                 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
36                 test.expectEvent(mediaElement, "error", "mediaElement error.");
37                 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed.");
38                 sourceBuffer.appendBuffer(mediaSegment);
39
40                 test.waitForExpectedEvents(function()
41                 {
42                     assert_true(mediaElement.error != null);
43                     assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
44
45                     assert_equals(mediaSource.sourceBuffers.length, 0);
46                     assert_equals(mediaSource.readyState, "closed");
47                     test.done();
48                 });
49             }, "Appending media segment before the first initialization segment.");
50
51             ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
52             {
53                 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING);
54
55                 test.expectEvent(mediaElement, "error", "mediaElement error.");
56                 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.");
57                 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed.");
58
59                 mediaSource.endOfStream("decode");
60
61                 test.waitForExpectedEvents(function()
62                 {
63                     assert_true(mediaElement.error != null);
64                     assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
65
66                     assert_equals(mediaSource.sourceBuffers.length, 0);
67                     assert_equals(mediaSource.readyState, "closed");
68                     test.done();
69                 });
70             }, "Signaling 'decode' error via endOfStream() before initialization segment has been appended.");
71
72             ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
73             {
74                 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING);
75
76                 test.expectEvent(mediaElement, "error", "mediaElement error.");
77                 test.expectEvent(mediaSource, "sourceended", "mediaSource ended.");
78                 test.expectEvent(mediaSource, "sourceclose", "mediaSource closed.");
79
80                 mediaSource.endOfStream("network");
81
82                 test.waitForExpectedEvents(function()
83                 {
84                     assert_true(mediaElement.error != null);
85                     assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
86
87                     assert_equals(mediaSource.sourceBuffers.length, 0);
88                     assert_equals(mediaSource.readyState, "closed");
89                     test.done();
90                 });
91             }, "Signaling 'network' error via endOfStream() before initialization segment has been appended.");
92
93             ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
94             {
95                 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
96                 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING);
97
98                 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
99                 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement metadata.");
100                 sourceBuffer.appendBuffer(initSegment);
101
102                 test.waitForExpectedEvents(function()
103                 {
104                     assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_METADATA);
105
106                     test.expectEvent(mediaElement, "error", "mediaElement error.");
107                     test.expectEvent(mediaSource, "sourceended", "mediaSource ended.");
108                     mediaSource.endOfStream("decode");
109                 });
110
111                 test.waitForExpectedEvents(function()
112                 {
113                     assert_true(mediaElement.error != null);
114                     assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_DECODE);
115                     assert_equals(mediaSource.readyState, "ended");
116                     test.done();
117                 });
118             }, "Signaling 'decode' error via endOfStream() after initialization segment has been appended and the HTMLMediaElement has reached HAVE_METADATA.");
119
120             ErrorTest(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
121             {
122                 var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
123                 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING);
124
125                 test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
126                 test.expectEvent(mediaElement, "loadedmetadata", "mediaElement metadata.");
127                 sourceBuffer.appendBuffer(initSegment);
128
129                 test.waitForExpectedEvents(function()
130                 {
131                     assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_METADATA);
132
133                     test.expectEvent(mediaElement, "error", "mediaElement error.");
134                     test.expectEvent(mediaSource, "sourceended", "mediaSource ended.");
135                     mediaSource.endOfStream("network");
136                 });
137
138                 test.waitForExpectedEvents(function()
139                 {
140                     assert_true(mediaElement.error != null);
141                     assert_equals(mediaElement.error.code, MediaError.MEDIA_ERR_NETWORK);
142                     assert_equals(mediaSource.readyState, "ended");
143                     test.done();
144                 });
145             }, "Signaling 'network' error via endOfStream() after initialization segment has been appended and the HTMLMediaElement has reached HAVE_METADATA.");
146         </script>
147     </body>
148 </html>