| <!-- webkit-test-runner [ enableBackForwardCache=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> |