[Release] Webkit-EFL Ver. 2.0_beta_118996_0.6.22
[framework/web/webkit-efl.git] / LayoutTests / media / media-blocked-by-beforeload.html
1 <!doctype html>
2 <html>
3 <head>
4     <style>
5         video { background-color: yellow; width: 320px; height: 240px;}
6     </style>
7     <script src=media-file.js></script>
8     <script src=video-test.js></script>
9 </head>
10 <body>
11     <video controls ></video>
12     <p>Test to ensure that a media file blocked by a beforeload handler generates an error
13     and does not block the document's 'load' event.</p>
14
15     <script>
16         if (window.layoutTestController)
17             layoutTestController.dumpAsText();
18
19         var blockedURL;
20         var allowedURL;
21         var test;
22         var loadedmetadataFired = false;
23         var loadedFired = false;
24
25         function logEvent(evt)
26         {
27             consoleWrite("<br>EVENT('" + evt.type + "')");
28         }
29
30         function loadedmetadata(evt)
31         {
32             logEvent(evt);
33             consoleWrite("");
34             loadedmetadataFired = true;
35             checkEndTest();
36         }
37
38         function setupSourceTest()
39         {
40             consoleWrite("<br>*** Test using the &lt;source&gt; element ***");
41             blockedURL = relativeURL(video.src);
42             allowedURL = findMediaFile("audio", "content/test");
43
44             // Remove 'src' attribute so <source> will be used when we force a reload
45             video.removeAttribute('src');
46
47             var blockedSource = document.createElement('source');
48             blockedSource.src = blockedURL;
49             blockedSource.type = mimeTypeForExtension(blockedSource.src.split('.').pop());
50             video.appendChild(blockedSource);
51
52             var allowedSource = document.createElement('source');
53             allowedSource.src = allowedURL;
54             allowedSource.type = mimeTypeForExtension(allowedSource.src.split('.').pop());
55             video.appendChild(allowedSource);
56
57             test = 2;
58             video.load();
59         };
60
61         function error(evt)
62         {
63             logEvent(evt);
64             switch (test)
65             {
66                 case 1:
67                     testExpected("event.target.tagName", "VIDEO");
68                     testExpected("video.error", null, "!=");
69                     testExpected("video.error.code", MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
70                     testExpected("video.networkState", HTMLMediaElement.NETWORK_NO_SOURCE);
71
72                     setupSourceTest();
73                     break;
74                 case 2:
75                     // The error should have been fired at the <source> and the media element should
76                     // not be in an error state.
77                     testExpected("event.target.tagName", "SOURCE");
78                     testExpected("video.error", null);
79                     break;
80                 case 3:
81                     failTest("Unexpected 'error' event fired!");
82                     break;
83             }
84         }
85
86         function beforeload(evt)
87         {
88             logEvent(evt);
89             testExpected("event.target.tagName", "VIDEO");
90             switch (test)
91             {
92                 case 1:
93                     consoleWrite("blocking load of 'src'");
94                     evt.preventDefault();
95                     break;
96
97                 case 2:
98                     if (relativeURL(evt.url) == blockedURL) {
99                         consoleWrite("blocking load of first &lt;source&gt; element");
100                         evt.preventDefault();
101                     } else {
102                         consoleWrite("allowing load of second &lt;source&gt; element");
103                     }
104                     break;
105             }
106         }
107
108         function loaded(evt)
109         {
110             loadedFired = true;
111             checkEndTest();
112         };
113
114         function checkEndTest()
115         {
116             if (loadedmetadataFired && loadedFired)
117                 endTest();
118         };
119
120         findMediaElement();
121
122         video.addEventListener('loadstart', logEvent, true);
123         video.addEventListener('loadedmetadata', loadedmetadata, true);
124         video.addEventListener('beforeload', beforeload, true);
125         video.addEventListener('error', error, true);
126         window.addEventListener('load', loaded, true);
127
128         consoleWrite("*** Test initial state ***");
129         testExpected("video.networkState", HTMLMediaElement.NETWORK_EMPTY);
130         testExpected("video.error", null);
131
132         consoleWrite("<br>*** Test blocking the 'src' attribute ***");
133         test = 1;
134         var mediaFile = findMediaFile("video", "content/test");
135         video.src = mediaFile;
136     </script>
137
138 </body>
139 </html>