blob: 5403c1f7d968c633b5ef25364fcc877a5f81dda1 [file] [log] [blame]
<!-- webkit-test-runner [ enablePageCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<script src="../../../resources/js-test-pre.js"></script>
<div id="description"></div>
<pre id="console"></pre>
<script>
description('Tests that popstate events fire when navigating between pages (and history entries created via pushState) that are in the page cache.');
var testWindow;
onload = function()
{
if (window.testRunner)
testRunner.setCanOpenWindows();
testWindow = window.open('resources/popstate-fires-with-page-cache-1.html');
if (!testWindow)
testFailed('Could not open test window');
}
var testWindowLoadFireCount = 0;
var testWindowPopstateFireCount = 0;
function onTestWindowLoad(event)
{
debug('load fired');
testWindowLoadFireCount++;
switch (testWindowLoadFireCount) {
case 1:
debug('pushState with new state object for page 1');
testWindow.history.pushState('newState', '');
debug('going to page 2');
// Set the location in a timeout to generate a history entry
setTimeout(function() {testWindow.location.href = 'resources/popstate-fires-with-page-cache-2.html';}, 0);
break;
case 2:
debug('going back to page 1 with new state object');
setTimeout(function() {testWindow.history.back();}, 0);
break;
default:
testFailed('unexpected load event state');
break;
}
}
function onTestWindowPopState(event)
{
debug('popstate fired with state ' + event.state);
testWindowPopstateFireCount++;
switch (testWindowPopstateFireCount) {
case 1:
debug('going back to page 1 in initial state');
setTimeout(function() {testWindow.history.back();}, 0);
break;
case 2:
// Close the window in a timeout to simulate popstate firing asynchronously, otherwise closing the window in a popstate handler results in a crash.
// FIXME: remove this when http://webkit.org/b/36202 is fixed.
setTimeout(function() {
testWindow.close();
finishJSTest();
}, 0);
break;
default:
testFailed('unexpected pop state event state');
break;
}
}
var jsTestIsAsync = true;
</script>
<script src="../../../resources/js-test-post.js"></script>
</html>