Skip to content
Permalink
Browse files
2010-08-13 Mihai Parparita <mihaip@chromium.org>
        Reviewed by Dimitri Glazkov.

        Session history should skip over JS redirects
        https://bugs.webkit.org/show_bug.cgi?id=42861

        Lock the back/forward list for location changes and form submits that
        happen before the onload event fires that are not the result of user
        gestures.

        http/tests/history tests now pass, their expectations were updated
        accordingly. Other tests needed a setTimeout wrapper around location
        changes and form submits during onload, otherwise they would not
        generate history entries as expected anymore.

        * fast/css/target-fragment-match.html:
        * fast/dom/location-hash.html:
        * fast/dom/Geolocation/resources/cached-page-1.html:
        * fast/dom/Window/timer-resume-on-navigation-back.html:
        * fast/events/pageshow-pagehide-on-back-cached-with-frames-expected.txt:
        * fast/events/pageshow-pagehide-on-back-cached-with-frames.html:
        * fast/forms/button-state-restore.html:
        * fast/forms/state-restore-to-non-autocomplete-form.html:
        * fast/forms/state-restore-to-non-edited-controls.html:
        * fast/frames/resources/cached-page-1.html:
        * fast/frames/resources/cached-page-2.html:
        * fast/harness/resources/cached-page-1.html:
        * fast/harness/resources/cached-page-with-data-urls.html:
        * fast/history/gesture-before-onload-expected.txt: Added.
        * fast/history/gesture-before-onload.html: Added.
        * fast/history/history-length.html:
        * fast/history/resources/gesture-before-onload-target.html: Added.
        * fast/history/saves-state-after-fragment-nav.html:
        * fast/loader/input-element-page-cache-crash.html:
        * fast/loader/stateobjects/document-destroyed-navigate-back.html:
        * fast/loader/stateobjects/pushstate-clears-forward-history.html:
        * fast/loader/subframe-navigate-during-main-frame-load.html:
        * http/tests/history/back-to-post.php:
        * http/tests/history/redirect-js-document-location-before-load-expected.txt:
        * http/tests/history/redirect-js-form-submit-before-load-expected.txt:
        * http/tests/history/redirect-js-location-assign-before-load-expected.txt:
        * http/tests/history/redirect-js-location-before-load-expected.txt:
        * http/tests/history/redirect-js-location-href-before-load-expected.txt:
        * http/tests/loading/307-after-303-after-post-expected.txt:
        * http/tests/loading/redirect-methods-expected.txt:
        * http/tests/navigation/resources/back-send-referrer-helper.php:
        * http/tests/navigation/resources/document-location.js:
        (start):
        * http/tests/navigation/resources/submit-to-fragment.pl:
        * security/autocomplete-cleared-on-back.html:
        * storage/hash-change-with-xhr.js:
        (updateDatabase):
        (invokeBack):
        (runTest):
        (runTestsInner):

2010-08-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Session history should skip over JS redirects
        https://bugs.webkit.org/show_bug.cgi?id=42861

        Lock the back/forward list for location changes and form submits that
        happen before the onload event fires that are not the result of user
        gestures.

        Made form submission (at the ScheduledFormSubmission level) more similar
        to ScheduledURLNavigation by having it call clientRedirected too, fixing
        a long-standing FIXME.

        Test: fast/history/gesture-before-onload-location-href.html,
        fast/history/gesture-before-onload-form-submit.html and updated
        expectations for http/tests/history tests that used to fail.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::requestURL):
        (WebCore::FormSubmission::populateFrameLoadRequest):
        * loader/FormSubmission.h:
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        (WebCore::ScheduledFormSubmission::didStopTimer):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        * loader/RedirectScheduler.h:

Canonical link: https://commits.webkit.org/56140@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@65340 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
webkit-commit-queue committed Aug 13, 2010
1 parent 9f47900 commit 3049597eb429afa7e6371e3585df9db7b78ed604
Showing with 527 additions and 235 deletions.
  1. +58 −0 LayoutTests/ChangeLog
  2. +6 −0 LayoutTests/fast/css/target-fragment-match.html
  3. +2 −1 LayoutTests/fast/dom/Geolocation/resources/cached-page-1.html
  4. +6 −3 LayoutTests/fast/dom/Window/timer-resume-on-navigation-back.html
  5. +3 −2 LayoutTests/fast/dom/location-hash.html
  6. +14 −14 LayoutTests/fast/events/pageshow-pagehide-on-back-cached-with-frames-expected.txt
  7. +6 −3 LayoutTests/fast/events/pageshow-pagehide-on-back-cached-with-frames.html
  8. +3 −1 LayoutTests/fast/forms/button-state-restore.html
  9. +2 −1 LayoutTests/fast/forms/state-restore-to-non-autocomplete-form.html
  10. +2 −1 LayoutTests/fast/forms/state-restore-to-non-edited-controls.html
  11. +2 −1 LayoutTests/fast/frames/resources/cached-page-1.html
  12. +2 −1 LayoutTests/fast/frames/resources/cached-page-2.html
  13. +2 −1 LayoutTests/fast/harness/resources/cached-page-1.html
  14. +2 −1 LayoutTests/fast/harness/resources/cached-page-with-data-urls.html
  15. +9 −0 LayoutTests/fast/history/gesture-before-onload-form-submit-expected.txt
  16. +30 −0 LayoutTests/fast/history/gesture-before-onload-form-submit.html
  17. +9 −0 LayoutTests/fast/history/gesture-before-onload-location-href-expected.txt
  18. +32 −0 LayoutTests/fast/history/gesture-before-onload-location-href.html
  19. +28 −24 LayoutTests/fast/history/history-length.html
  20. +41 −0 LayoutTests/fast/history/resources/gesture-before-onload-target.html
  21. +5 −2 LayoutTests/fast/history/saves-state-after-fragment-nav.html
  22. +3 −2 LayoutTests/fast/loader/input-element-page-cache-crash.html
  23. +4 −3 LayoutTests/fast/loader/stateobjects/document-destroyed-navigate-back.html
  24. +20 −16 LayoutTests/fast/loader/stateobjects/pushstate-clears-forward-history.html
  25. +3 −2 LayoutTests/fast/loader/subframe-navigate-during-main-frame-load.html
  26. +9 −2 LayoutTests/http/tests/history/back-to-post.php
  27. +1 −1 LayoutTests/http/tests/history/redirect-200-refresh-0-seconds.pl
  28. +1 −1 LayoutTests/http/tests/history/redirect-200-refresh-2-seconds.pl
  29. +3 −2 LayoutTests/http/tests/history/redirect-301-expected.txt
  30. +15 −0 LayoutTests/http/tests/history/redirect-301.html
  31. +0 −22 LayoutTests/http/tests/history/redirect-301.pl
  32. +3 −2 LayoutTests/http/tests/history/redirect-302-expected.txt
  33. +15 −0 LayoutTests/http/tests/history/redirect-302.html
  34. +0 −22 LayoutTests/http/tests/history/redirect-302.pl
  35. +3 −2 LayoutTests/http/tests/history/redirect-303-expected.txt
  36. +15 −0 LayoutTests/http/tests/history/redirect-303.html
  37. +0 −22 LayoutTests/http/tests/history/redirect-303.pl
  38. +3 −2 LayoutTests/http/tests/history/redirect-307-expected.txt
  39. +15 −0 LayoutTests/http/tests/history/redirect-307.html
  40. +0 −23 LayoutTests/http/tests/history/redirect-307.pl
  41. +1 −1 LayoutTests/http/tests/history/redirect-js-document-location-0-seconds.html
  42. +1 −1 LayoutTests/http/tests/history/redirect-js-document-location-2-seconds.html
  43. +1 −2 LayoutTests/http/tests/history/redirect-js-document-location-before-load-expected.txt
  44. +1 −1 LayoutTests/http/tests/history/redirect-js-document-location-before-load.html
  45. +1 −1 LayoutTests/http/tests/history/redirect-js-form-submit-0-seconds.html
  46. +1 −1 LayoutTests/http/tests/history/redirect-js-form-submit-2-seconds.html
  47. +1 −2 LayoutTests/http/tests/history/redirect-js-form-submit-before-load-expected.txt
  48. +1 −1 LayoutTests/http/tests/history/redirect-js-form-submit-before-load.html
  49. +1 −1 LayoutTests/http/tests/history/redirect-js-location-0-seconds.html
  50. +1 −1 LayoutTests/http/tests/history/redirect-js-location-2-seconds.html
  51. +1 −1 LayoutTests/http/tests/history/redirect-js-location-assign-0-seconds.html
  52. +1 −1 LayoutTests/http/tests/history/redirect-js-location-assign-2-seconds.html
  53. +1 −2 LayoutTests/http/tests/history/redirect-js-location-assign-before-load-expected.txt
  54. +1 −1 LayoutTests/http/tests/history/redirect-js-location-assign-before-load.html
  55. +1 −2 LayoutTests/http/tests/history/redirect-js-location-before-load-expected.txt
  56. +1 −1 LayoutTests/http/tests/history/redirect-js-location-before-load.html
  57. +1 −1 LayoutTests/http/tests/history/redirect-js-location-href-0-seconds.html
  58. +1 −1 LayoutTests/http/tests/history/redirect-js-location-href-2-seconds.html
  59. +1 −2 LayoutTests/http/tests/history/redirect-js-location-href-before-load-expected.txt
  60. +1 −1 LayoutTests/http/tests/history/redirect-js-location-href-before-load.html
  61. +1 −1 LayoutTests/http/tests/history/redirect-js-location-replace-0-seconds.html
  62. +1 −1 LayoutTests/http/tests/history/redirect-js-location-replace-2-seconds.html
  63. +1 −1 LayoutTests/http/tests/history/redirect-js-location-replace-before-load.html
  64. +1 −1 LayoutTests/http/tests/history/redirect-meta-refresh-0-seconds.html
  65. +1 −1 LayoutTests/http/tests/history/redirect-meta-refresh-2-seconds.html
  66. +25 −0 LayoutTests/http/tests/history/resources/redirect-helper.pl
  67. +1 −1 LayoutTests/http/tests/history/resources/redirect-target.html
  68. +2 −0 LayoutTests/http/tests/loading/307-after-303-after-post-expected.txt
  69. +8 −0 LayoutTests/http/tests/loading/redirect-methods-expected.txt
  70. +2 −2 LayoutTests/http/tests/navigation/resources/back-send-referrer-helper.php
  71. +2 −1 LayoutTests/http/tests/navigation/resources/document-location.js
  72. +2 −1 LayoutTests/http/tests/navigation/resources/submit-to-fragment.pl
  73. +2 −1 LayoutTests/security/autocomplete-cleared-on-back.html
  74. +6 −0 LayoutTests/storage/hash-change-with-xhr.js
  75. +34 −0 WebCore/ChangeLog
  76. +12 −4 WebCore/loader/FormSubmission.cpp
  77. +2 −0 WebCore/loader/FormSubmission.h
  78. +25 −13 WebCore/loader/RedirectScheduler.cpp
  79. +2 −2 WebCore/loader/RedirectScheduler.h
@@ -1,3 +1,61 @@
2010-08-13 Mihai Parparita <mihaip@chromium.org>

Reviewed by Dimitri Glazkov.

Session history should skip over JS redirects
https://bugs.webkit.org/show_bug.cgi?id=42861

Lock the back/forward list for location changes and form submits that
happen before the onload event fires that are not the result of user
gestures.

http/tests/history tests now pass, their expectations were updated
accordingly. Other tests needed a setTimeout wrapper around location
changes and form submits during onload, otherwise they would not
generate history entries as expected anymore.

* fast/css/target-fragment-match.html:
* fast/dom/location-hash.html:
* fast/dom/Geolocation/resources/cached-page-1.html:
* fast/dom/Window/timer-resume-on-navigation-back.html:
* fast/events/pageshow-pagehide-on-back-cached-with-frames-expected.txt:
* fast/events/pageshow-pagehide-on-back-cached-with-frames.html:
* fast/forms/button-state-restore.html:
* fast/forms/state-restore-to-non-autocomplete-form.html:
* fast/forms/state-restore-to-non-edited-controls.html:
* fast/frames/resources/cached-page-1.html:
* fast/frames/resources/cached-page-2.html:
* fast/harness/resources/cached-page-1.html:
* fast/harness/resources/cached-page-with-data-urls.html:
* fast/history/gesture-before-onload-expected.txt: Added.
* fast/history/gesture-before-onload.html: Added.
* fast/history/history-length.html:
* fast/history/resources/gesture-before-onload-target.html: Added.
* fast/history/saves-state-after-fragment-nav.html:
* fast/loader/input-element-page-cache-crash.html:
* fast/loader/stateobjects/document-destroyed-navigate-back.html:
* fast/loader/stateobjects/pushstate-clears-forward-history.html:
* fast/loader/subframe-navigate-during-main-frame-load.html:
* http/tests/history/back-to-post.php:
* http/tests/history/redirect-js-document-location-before-load-expected.txt:
* http/tests/history/redirect-js-form-submit-before-load-expected.txt:
* http/tests/history/redirect-js-location-assign-before-load-expected.txt:
* http/tests/history/redirect-js-location-before-load-expected.txt:
* http/tests/history/redirect-js-location-href-before-load-expected.txt:
* http/tests/loading/307-after-303-after-post-expected.txt:
* http/tests/loading/redirect-methods-expected.txt:
* http/tests/navigation/resources/back-send-referrer-helper.php:
* http/tests/navigation/resources/document-location.js:
(start):
* http/tests/navigation/resources/submit-to-fragment.pl:
* security/autocomplete-cleared-on-back.html:
* storage/hash-change-with-xhr.js:
(updateDatabase):
(invokeBack):
(runTest):
(runTestsInner):


2010-08-13 Sam Weinig <sam@webkit.org>

Rubber-stamped by Beth Dakin and Ban Bernstein.
@@ -11,6 +11,12 @@
{
if (window.layoutTestController)
layoutTestController.waitUntilDone();

// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(runTest, 0);
}

function runTest() {
window.location.hash ='#target-01';
document.body.offsetTop;
window.history.back(); // This queues up a navigation, so we need to delay the call to notifyDone.
@@ -3,7 +3,8 @@
var geolocation = navigator.geolocation;
if (window.opener.reportPageOneOnload() == 1) {
window.opener.debug('resources/cached-page-1.html about to navigate to resources/cached-page-2.html')
location.href = 'cached-page-2.html';
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {location.href = 'cached-page-2.html';}, 0);
}
}
</script>
@@ -18,9 +18,12 @@
layoutTestController.waitUntilDone();
layoutTestController.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
}
window.setTimeout("verify()", timeoutValue);
timestamp = new Date().getTime();
window.location.href = "data:text/html,<body onload='history.back()'></body>";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {
window.setTimeout(verify, timeoutValue);
timestamp = new Date().getTime();
window.location.href = "data:text/html,<body onload='history.back()'></body>";
}, 0);
}

</script>
@@ -87,8 +87,9 @@
numErrors = 0;
originalLocation = window.location.href;
originalHistoryLength = window.history.length;

step();

// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(step, 0);
}
</script>
</head>
@@ -1,16 +1,16 @@
CONSOLE MESSAGE: line 20: ***Top level frame being parsed for the initial page load***
CONSOLE MESSAGE: line 20: Subsubframe window.onload
CONSOLE MESSAGE: line 20: Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
CONSOLE MESSAGE: line 20: Subframe window.onload
CONSOLE MESSAGE: line 20: Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
CONSOLE MESSAGE: line 20: Main frame window.onload
CONSOLE MESSAGE: line 20: Main frame window.onpageshow, target = [object HTMLDocument], persisted = false
CONSOLE MESSAGE: line 20: ***Navigating top-level frame to a page that will immediately navigate back to this one***
CONSOLE MESSAGE: line 20: Main frame window.onpagehide, target = [object HTMLDocument], persisted = true
CONSOLE MESSAGE: line 20: Subframe window.onpagehide, target = [object HTMLDocument], persisted = true
CONSOLE MESSAGE: line 20: Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = true
CONSOLE MESSAGE: line 20: Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = true
CONSOLE MESSAGE: line 20: Subframe window.onpageshow, target = [object HTMLDocument], persisted = true
CONSOLE MESSAGE: line 20: Main frame window.onpageshow, target = [object HTMLDocument], persisted = true
Test pageshow/pagehide event behavior when navigating away from a page with frames, putting the page in the page cache, then back to it.
***Top level frame being parsed for the initial page load***
Subsubframe window.onload
Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = false
Subframe window.onload
Subframe window.onpageshow, target = [object HTMLDocument], persisted = false
Main frame window.onload
Main frame window.onpageshow, target = [object HTMLDocument], persisted = false
***Navigating top-level frame to a page that will immediately navigate back to this one***
Main frame window.onpagehide, target = [object HTMLDocument], persisted = true
Subframe window.onpagehide, target = [object HTMLDocument], persisted = true
Subsubframe window.onpagehide, target = [object HTMLDocument], persisted = true
Subsubframe window.onpageshow, target = [object HTMLDocument], persisted = true
Subframe window.onpageshow, target = [object HTMLDocument], persisted = true
Main frame window.onpageshow, target = [object HTMLDocument], persisted = true

@@ -14,8 +14,10 @@

function log(message)
{
var log = document.getElementById("log");
log.innerHTML += message + "\n";
// Logging to the console instead of the "log" DIV in the DOM because
// otherwise we trigger the assert mentioned at http://webkit.org/b/43152
// (since we log during pagehide)
console.log(message);
}

log("***Top level frame being parsed for the initial page load***");
@@ -31,7 +33,8 @@
layoutTestController.notifyDone();
} else {
log("***Navigating top-level frame to a page that will immediately navigate back to this one***");
window.location.href = "data:text/html,<script>history.back();</scr" + "ipt>";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {window.location.href = "data:text/html,<script>history.back();</scr" + "ipt>";}, 0);
}
}

@@ -31,7 +31,9 @@
input.value = "FAIL";

var form = document.getElementById("form");
form.submit();

// Submit form in a timeout to make sure that we create a new back/forward list item.
setTimeout(function() {form.submit();}, 0);
}
</script>
</head>
@@ -38,7 +38,8 @@
document.getElementById('input2').value = 'value2';
document.getElementById('textarea2').value = 'good';
document.getElementById('select2').value = 'BSD';
document.getElementById('form2').submit();
// Submit form in a timeout to make sure that we create a new back/forward list item.
setTimeout(function() {document.getElementById('form2').submit();}, 0);
} else {
// Second visit.
debug('Controls in the first form should have their default values:');
@@ -37,7 +37,8 @@
makeForm(parent, '1', '1', '1', '1', '1', '1', '1', '1');

document.getElementById('text1').value = 'edit';
document.getElementById('form1').submit();
// Submit form in a timeout to make sure that we create a new back/forward list item.
setTimeout(function() {document.getElementById('form1').submit();}, 0);
} else {
// Second visit.
makeForm(parent, '2', '2', '2', '2', '2', '2', '2', '2');
@@ -17,7 +17,8 @@
intervalId = setInterval(endTest, 100);

window.opener.log("page-1, about to navigate to page-2.")
location.href = "cached-page-2.html";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {location.href = "cached-page-2.html";}, 0);
}

// This unload handler exists just to make sure this page is not added
@@ -19,7 +19,8 @@
intervalId = setInterval(goBack, 20);

window.opener.log("page-2, about to navigate to page-3.")
location.href = "cached-page-3.html";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {location.href = "cached-page-3.html";}, 0);
}
</script>
<body onload="loadNext()">
@@ -22,7 +22,8 @@
intervalId = setInterval(check, 10);

window.opener.log("page-1, about to navigate to page-2.")
location.href = "cached-page-2.html";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {location.href = "cached-page-2.html";}, 0);
}
</script>
<body onload="loadNext()"></body>
@@ -18,7 +18,8 @@
intervalId = setInterval(check, 10);

window.opener.log("page with data urls, about to navigate to page-2.")
location.href = "cached-page-2.html";
// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {location.href = "cached-page-2.html";}, 0);
}
</script>
<body onload="loadNext()">
@@ -0,0 +1,9 @@
This page is the target of a redirect.

PASS: History item count should be 2 and is.


============== Back Forward List ==============
(file test):fast/history/gesture-before-onload-form-submit.html **nav target**
curr-> (file test):fast/history/resources/gesture-before-onload-target.html?#2 **nav target**
===============================================
@@ -0,0 +1,30 @@
<head>
</head>
<body onload="onload()">
<form action="resources/gesture-before-onload-target.html#2">
<input type="submit" id="nav-button" value="Navigate">
</form>
<div id="manual-explanation" style="display: none; color: blue">When running this test outside of DRT, please click on the "Navigate" button.</div>
</body>
<script>
if (window.layoutTestController) {
layoutTestController.clearBackForwardList();
layoutTestController.waitUntilDone();
}

if (window.eventSender) {
var navButtonNode = document.getElementById('nav-button');
eventSender.mouseMoveTo(
navButtonNode.offsetLeft + navButtonNode.offsetWidth / 2,
navButtonNode.offsetTop + navButtonNode.offsetHeight / 2);
eventSender.mouseDown();
eventSender.mouseUp();
} else {
document.getElementById('manual-explanation').style.display = '';
}

function onload() {
window.console.log('FAIL: Should not have reached onload before navigating away');
}
</script>

@@ -0,0 +1,9 @@
This page is the target of a redirect.

PASS: History item count should be 2 and is.


============== Back Forward List ==============
(file test):fast/history/gesture-before-onload-location-href.html **nav target**
curr-> (file test):fast/history/resources/gesture-before-onload-target.html#2 **nav target**
===============================================
@@ -0,0 +1,32 @@
<head>
</head>
<body onload="onload()">
<button id="nav-button" onclick="nav();">Navigate</button>
<div id="manual-explanation" style="display: none; color: blue">When running this test outside of DRT, please click on the "Navigate" button.</div>
</body>
<script>
if (window.layoutTestController) {
layoutTestController.clearBackForwardList();
layoutTestController.waitUntilDone();
}

if (window.eventSender) {
var navButtonNode = document.getElementById('nav-button');
eventSender.mouseMoveTo(
navButtonNode.offsetLeft + navButtonNode.offsetWidth / 2,
navButtonNode.offsetTop + navButtonNode.offsetHeight / 2);
eventSender.mouseDown();
eventSender.mouseUp();
} else {
document.getElementById('manual-explanation').style.display = '';
}

function nav() {
window.location.href = 'resources/gesture-before-onload-target.html#2';
}

function onload() {
window.console.log('FAIL: Should not have reached onload before navigating away');
}
</script>

@@ -8,30 +8,34 @@
layoutTestController.waitUntilDone();
}
}
// This test advances history by 2 pages, then navigates back one, and
// records history.length. We expect history.length to indicate the total
// length of session history. At the end of the test, it should be 2 greater
// than it was at the start of the test.
switch (sessionStorage.testStage++) {
case 0:
sessionStorage.initialLength = history.length;
location = "?a";
break;
case 1:
location = "?b";
break;
case 2:
history.back();
break;
case 3:
if (history.length == (sessionStorage.initialLength - 0) + 2)
document.body.innerHTML = "PASS";
else
document.body.innerHTML = "FAIL: initialLength=" + sessionStorage.initialLength + ", history.length=" + history.length;
if (window.layoutTestController)
layoutTestController.notifyDone();
break;
}

// Location changes need to happen outside the onload handler to generate history entries.
setTimeout(function() {
// This test advances history by 2 pages, then navigates back one, and
// records history.length. We expect history.length to indicate the total
// length of session history. At the end of the test, it should be 2 greater
// than it was at the start of the test.
switch (sessionStorage.testStage++) {
case 0:
sessionStorage.initialLength = history.length;
location = "?a";
break;
case 1:
location = "?b";
break;
case 2:
history.back();
break;
case 3:
if (history.length == (sessionStorage.initialLength - 0) + 2)
document.body.innerHTML = "PASS";
else
document.body.innerHTML = "FAIL: initialLength=" + sessionStorage.initialLength + ", history.length=" + history.length;
if (window.layoutTestController)
layoutTestController.notifyDone();
break;
}
}, 0);
}
onunload = function() {
// disable page cache

0 comments on commit 3049597

Please sign in to comment.