| <!-- webkit-test-runner [ enableBackForwardCache=true ] --> |
| <html> |
| <head> |
| <script src=media-file.js></script> |
| <script src=video-test.js></script> |
| <script> |
| var mediaFile = findMediaFile("video", "content/test"); |
| var loadCount = 0; |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function pageshow(evt) |
| { |
| if (!evt.persisted) { |
| // this is the first time the page has been loaded, setup the video element |
| setup(); |
| } else { |
| consoleWrite("*** Page returned from cache"); |
| |
| testExpected("loadCount", 1); |
| |
| // Dump the height of the video so we can verify that the player was restored. |
| video = document.getElementsByTagName('video')[0]; |
| videoComputedStyle = getComputedStyle(video); |
| testExpected("videoComputedStyle.width", "320px"); |
| testExpected("videoComputedStyle.height", "240px"); |
| |
| // schedule the test to end shortly, but wait long enough for the element to fire loading events |
| // if that is going to happen |
| setTimeout(function() { if (window.testRunner) testRunner.notifyDone(); }, 200); |
| } |
| } |
| |
| function pagehide() |
| { |
| // Have the video element generate some events that need to be suspended. |
| // We use multiple events to verify that they fire in the correct order. |
| consoleWrite("*** Changing playbackRate just before going into cache, to schedule a ratechange event."); |
| document.getElementsByTagName("video")[0].playbackRate = 2; |
| consoleWrite("*** Changing volume just before going into cache, to schedule a volumechange event."); |
| document.getElementsByTagName("video")[0].volume = 0.5; |
| } |
| |
| function canplaythrough() |
| { |
| testExpected("loadCount", 0); |
| if (!loadCount) { |
| video = document.getElementsByTagName('video')[0]; |
| consoleWrite("*** Page going into cache"); |
| setTimeout('window.location = "data:text/html,<script>history.back()<" + "/script>"', 0); |
| } |
| ++loadCount; |
| } |
| |
| function propertyChangeCallback(evt) |
| { |
| consoleWrite("*** " + evt.type + " event fired. This should happen AFTER returning from cache."); |
| } |
| |
| function setup() |
| { |
| video = mediaElement = document.getElementsByTagName('video')[0]; |
| |
| waitForEvent('loadstart'); |
| waitForEvent('canplaythrough', canplaythrough); |
| |
| video.src = mediaFile; |
| |
| video.onratechange = propertyChangeCallback; |
| video.onvolumechange = propertyChangeCallback; |
| } |
| |
| window.onpageshow = pageshow; |
| window.onpagehide = pagehide; |
| </script> |
| </head> |
| <body> |
| |
| <video controls > </video> |
| <p>Make sure we don't reload a <video> element when navigating back to an uncached page.</p> |
| </body> |
| </html> |
| |