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; |
+} |