Chromium Code Reviews| 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 |