Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix longstanding issue where anchor scrolls on a POST result page cou…
…ld lead to a silent re-POST during history traversal. Bug 413310, r+sr=biesi, a=dsicore,beltzner,righteousness.
- Loading branch information
Showing
5 changed files
with
122 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
function handleRequest(request, response) { | ||
response.setHeader("Content-Type", "text/html"); | ||
response.write("<body onload='window.parent.onloadCount++'>" + | ||
request.method + " " + | ||
Date.now() + | ||
"</body>"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body onload="window.parent.onloadCount++"> | ||
<form action="bug413310-post.sjs" method="POST"> | ||
</form> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
<!DOCTYPE HTML> | ||
<html> | ||
<!-- | ||
https://bugzilla.mozilla.org/show_bug.cgi?id=413310 | ||
--> | ||
<head> | ||
<title>Test for Bug 413310</title> | ||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script> | ||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> | ||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> | ||
</head> | ||
<body> | ||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=413310">Mozilla Bug 413310</a> | ||
<p id="display"> | ||
<iframe id="i" src="bug413310-subframe.html" onload="setTimeout(doNextStep, 20)"> | ||
</iframe> | ||
</p> | ||
<div id="content" style="display: none"> | ||
|
||
</div> | ||
<pre id="test"> | ||
<script class="testbody" type="text/javascript"> | ||
|
||
/** Test for Bug 413310 **/ | ||
|
||
// NOTE: If we ever make subframes do bfcache stuff, this test will need to be | ||
// modified accordingly! It assumes that subframes do not get bfcached. | ||
var onloadCount = 0; | ||
|
||
var step = -1; // One increment will come from the initial subframe onload. | ||
|
||
var textContent; | ||
|
||
SimpleTest.waitForExplicitFinish(); | ||
|
||
addLoadEvent(doNextStep); | ||
|
||
function doNextStep() { | ||
++step; | ||
switch (step) { | ||
case 1: | ||
is(onloadCount, 1, "Loaded initial page"); | ||
is($("i").contentWindow.location.href, | ||
location.href.replace(/test_bug413310.html/, | ||
"bug413310-subframe.html"), | ||
"Unexpected subframe location after initial load"); | ||
$("i").contentDocument.forms[0].submit(); | ||
break; | ||
case 2: | ||
is(onloadCount, 2, "Loaded POST result"); | ||
|
||
is($("i").contentWindow.location.href, | ||
location.href.replace(/test_bug413310.html/, | ||
"bug413310-post.sjs"), | ||
"Unexpected subframe location after POST load"); | ||
|
||
textContent = $("i").contentDocument.body.textContent; | ||
isDeeply(textContent.match(/^POST /), ["POST "], "Not a POST?"); | ||
|
||
$("i").contentWindow.location.hash = "foo"; | ||
setTimeout(doNextStep, 0); | ||
break; | ||
case 3: | ||
is(onloadCount, 2, "Anchor scroll should not fire onload"); | ||
is($("i").contentWindow.location.href, | ||
location.href.replace(/test_bug413310.html/, | ||
"bug413310-post.sjs#foo"), | ||
"Unexpected subframe location after anchor scroll"); | ||
is(textContent, $("i").contentDocument.body.textContent, | ||
"Did a load when scrolling?"); | ||
$("i").contentWindow.location.href = "bug413310-subframe.html";; | ||
break; | ||
case 4: | ||
is(onloadCount, 3, "Done new load"); | ||
is($("i").contentWindow.location.href, | ||
location.href.replace(/test_bug413310.html/, | ||
"bug413310-subframe.html"), | ||
"Unexpected subframe location after new load"); | ||
history.back(); | ||
break; | ||
case 5: | ||
is(onloadCount, 4, | ||
"History traversal didn't fire onload: bfcache issues!"); | ||
is($("i").contentWindow.location.href, | ||
location.href.replace(/test_bug413310.html/, | ||
"bug413310-post.sjs#foo"), | ||
"Unexpected subframe location"); | ||
is(textContent, $("i").contentDocument.body.textContent, | ||
"Did a load when going back?"); | ||
SimpleTest.finish(); | ||
break; | ||
} | ||
} | ||
</script> | ||
</pre> | ||
</body> | ||
</html> | ||
|