Chromium Code Reviews| Index: chrome/test/data/prerender/prerender_html5_common.js |
| diff --git a/chrome/test/data/prerender/prerender_html5_common.js b/chrome/test/data/prerender/prerender_html5_common.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..42e55776e3a288ba747cd13e5aefdf42f54f29f9 |
| --- /dev/null |
| +++ b/chrome/test/data/prerender/prerender_html5_common.js |
| @@ -0,0 +1,95 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +// Common js for the HTML5_* tests. The following variables need to be defined |
| +// before this js is included: |
| +// - 'willPlay' - indicates if the media is expected to start playing during |
| +// the test. |
| +// - 'testNetworkEvents' - if set to true, the test will test for the |
| +// loadstart and stalled events. NOTE that since the loadstart event fires |
| +// very early, to test for it reliably, the source of the media tag |
| +// should be added after this script is included or add |
| +// 'onLoadStart=mediEventHandler' as an attribute to the media element. |
| + |
| +function sleep(millis) { |
| + var date = new Date(); |
| + var curDate = null; |
| + do { |
| + curDate = new Date(); |
| + } while(curDate - date < millis); |
| +} |
| + |
| +function assert(bool) { |
| + if (!bool) |
| + throw new Error('Assert Failed.'); |
| +} |
| + |
| +var canPlaySeen = false; |
| +var playingSeen = false; |
| +var canPlayThroughSeen = false; |
| +var stalledSeen = false; |
| +var loadStartSeen = false; |
| +var hasError = false; |
| + |
| +assert(typeof(willPlay) != 'undefined'); |
| +assert(typeof(testNetworkEvents) != 'undefined'); |
| + |
| +var mediaEl = document.getElementById("mediaEl"); |
| + |
| +function mediaEventHandler(e) { |
| + switch (e.type) { |
| + case 'canplay': |
| + canPlaySeen = true; |
| + break; |
| + case 'playing': |
| + assert(canPlaySeen); |
| + playingSeen = true; |
| + break; |
| + case 'canplaythrough': |
| + assert(canPlaySeen); |
| + canPlayThroughSeen = true; |
| + break; |
| + case 'error': |
| + hasError = true; |
| + break; |
| + case 'loadstart': |
| + loadStartSeen = true; |
| + break; |
| + case 'stalled': |
| + assert(loadStartSeen); |
| + stalledSeen = true; |
| + break; |
| + } |
| + |
| + if ((willPlay && canPlayThroughSeen && playingSeen) || |
| + (!willPlay && canPlayThroughSeen && !playingSeen)) { |
| + document.title = 'PASS'; |
| + } |
| +} |
| + |
| +mediaEl.addEventListener('playing', mediaEventHandler, false); |
| +mediaEl.addEventListener('canplay', mediaEventHandler, false); |
| +mediaEl.addEventListener('canplaythrough', mediaEventHandler, false); |
| +mediaEl.addEventListener('error', mediaEventHandler, false); |
| + |
| +if (testNetworkEvents) { |
| + mediaEl.addEventListener('stalled', mediaEventHandler, false); |
| + mediaEl.addEventListener('loadstart', mediaEventHandler, false); |
| +} |
| + |
| +function DidPrerenderPass() { |
| + if (testNetworkEvents) |
| + 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
|
| + |
| + // The media should not have started at this point. |
| + return !canPlaySeen && !playingSeen && !hasError && |
| + mediaEl.currentTime == 0 && |
| + mediaEl.readyState == mediaEl.HAVE_NOTHING && |
| + (!testNetworkEvents || (loadStartSeen && stalledSeen)); |
| +} |
| + |
| +function DidDisplayPass() { |
| + // The actual test is done via the TitleWatcher. |
| + return true; |
| +} |