87 lines
3.4 KiB
HTML
87 lines
3.4 KiB
HTML
<!-- webkit-test-runner [ UsesBackForwardCache=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>
|
|
|