OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Common js for the HTML5_* tests. The following variables need to be defined | |
6 // before this js is included: | |
7 // - 'willPlay' - indicates if the media is expected to start playing during | |
8 // the test. | |
9 // - 'testNetworkEvents' - if set to true, the test will test for the | |
10 // loadstart and stalled events. NOTE that since the loadstart event fires | |
11 // very early, to test for it reliably, the source of the media tag | |
12 // should be added after this script is included or add | |
13 // 'onLoadStart=mediEventHandler' as an attribute to the media element. | |
14 | |
15 function sleep(millis) { | |
16 var date = new Date(); | |
17 var curDate = null; | |
18 do { | |
19 curDate = new Date(); | |
20 } while(curDate - date < millis); | |
21 } | |
22 | |
23 function assert(bool) { | |
24 if (!bool) | |
25 throw new Error('Assert Failed.'); | |
26 } | |
27 | |
28 var canPlaySeen = false; | |
29 var playingSeen = false; | |
30 var canPlayThroughSeen = false; | |
31 var stalledSeen = false; | |
32 var loadStartSeen = false; | |
33 var hasError = false; | |
34 | |
35 assert(typeof(willPlay) != 'undefined'); | |
36 assert(typeof(testNetworkEvents) != 'undefined'); | |
37 | |
38 var mediaEl = document.getElementById("mediaEl"); | |
39 | |
40 function mediaEventHandler(e) { | |
41 switch (e.type) { | |
42 case 'canplay': | |
43 canPlaySeen = true; | |
44 break; | |
45 case 'playing': | |
46 assert(canPlaySeen); | |
47 playingSeen = true; | |
48 break; | |
49 case 'canplaythrough': | |
50 assert(canPlaySeen); | |
51 canPlayThroughSeen = true; | |
52 break; | |
53 case 'error': | |
54 hasError = true; | |
55 break; | |
56 case 'loadstart': | |
57 loadStartSeen = true; | |
58 break; | |
59 case 'stalled': | |
60 assert(loadStartSeen); | |
61 stalledSeen = true; | |
62 break; | |
63 } | |
64 | |
65 if ((willPlay && canPlayThroughSeen && playingSeen) || | |
66 (!willPlay && canPlayThroughSeen && !playingSeen)) { | |
67 document.title = 'PASS'; | |
68 } | |
69 } | |
70 | |
71 mediaEl.addEventListener('playing', mediaEventHandler, false); | |
72 mediaEl.addEventListener('canplay', mediaEventHandler, false); | |
73 mediaEl.addEventListener('canplaythrough', mediaEventHandler, false); | |
74 mediaEl.addEventListener('error', mediaEventHandler, false); | |
75 | |
76 if (testNetworkEvents) { | |
77 mediaEl.addEventListener('stalled', mediaEventHandler, false); | |
78 mediaEl.addEventListener('loadstart', mediaEventHandler, false); | |
79 } | |
80 | |
81 function DidPrerenderPass() { | |
82 if (testNetworkEvents) | |
83 sleep(5000); // Stalled happens after 3000 ms. | |
scherkus (not reviewing)
2011/11/23 01:43:31
there's no way to signal when the test has complet
Shishir
2011/11/23 01:48:37
akaik the stalled event is fired when there is no
scherkus (not reviewing)
2011/12/01 05:38:13
Yeah I don't really know how prerender tests work
| |
84 | |
85 // The media should not have started at this point. | |
86 return !canPlaySeen && !playingSeen && !hasError && | |
87 mediaEl.currentTime == 0 && | |
88 mediaEl.readyState == mediaEl.HAVE_NOTHING && | |
89 (!testNetworkEvents || (loadStartSeen && stalledSeen)); | |
90 } | |
91 | |
92 function DidDisplayPass() { | |
93 // The actual test is done via the TitleWatcher. | |
94 return true; | |
95 } | |
OLD | NEW |