mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 11:55:49 +00:00
Bug 580069 - replaceState should clear the SHEntry's POST data. r+a2.0=sicking
--HG-- extra : rebase_source : 48bcebb876ff77a4c8a7157c5aa15746846dd007
This commit is contained in:
parent
5375d3cf44
commit
f8d507aa2b
@ -9408,6 +9408,7 @@ nsDocShell::AddState(nsIVariant *aData, const nsAString& aTitle,
|
||||
// a. cloned data as the state object,
|
||||
// b. if the third argument was present, the absolute URL found in
|
||||
// step 2
|
||||
// Also clear the new history entry's POST data (see bug 580069).
|
||||
// 5. If aReplace is false (i.e. we're doing a pushState instead of a
|
||||
// replaceState), notify bfcache that we've navigated to a new page.
|
||||
// 6. If the third argument is present, set the document's current address
|
||||
@ -9570,8 +9571,10 @@ nsDocShell::AddState(nsIVariant *aData, const nsAString& aTitle,
|
||||
newSHEntry->SetURI(newURI);
|
||||
}
|
||||
|
||||
// Step 4: Modify new/original session history entry
|
||||
// Step 4: Modify new/original session history entry and clear its POST
|
||||
// data, if there is any.
|
||||
newSHEntry->SetStateData(dataStr);
|
||||
newSHEntry->SetPostData(nsnull);
|
||||
|
||||
// Step 5: If aReplace is false, indicating that we're doing a pushState
|
||||
// rather than a replaceState, notify bfcache that we've added a page to
|
||||
|
@ -87,6 +87,9 @@ _TEST_FILES = \
|
||||
bug529119-window.html \
|
||||
test_bug540462.html \
|
||||
file_bug540462.html \
|
||||
test_bug580069.html \
|
||||
file_bug580069_1.html \
|
||||
file_bug580069_2.sjs \
|
||||
$(NULL)
|
||||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa)
|
||||
|
8
docshell/test/file_bug580069_1.html
Normal file
8
docshell/test/file_bug580069_1.html
Normal file
@ -0,0 +1,8 @@
|
||||
<html>
|
||||
<body onload='parent.page1Load();'>
|
||||
file_bug580069_1.html
|
||||
|
||||
<form id='form' action='file_bug580069_2.sjs' method='POST'></form>
|
||||
|
||||
</body>
|
||||
</html>
|
5
docshell/test/file_bug580069_2.sjs
Normal file
5
docshell/test/file_bug580069_2.sjs
Normal file
@ -0,0 +1,5 @@
|
||||
function handleRequest(request, response)
|
||||
{
|
||||
response.setHeader("Content-Type", "text/html", false);
|
||||
response.write('<html><body onload=\'parent.page2Load("' + request.method + '")\'>file_bug580069_2.sjs</body></html>');
|
||||
}
|
61
docshell/test/test_bug580069.html
Normal file
61
docshell/test/test_bug580069.html
Normal file
@ -0,0 +1,61 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=580069
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 580069</title>
|
||||
<script type="application/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.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=580069">Mozilla Bug 580069</a>
|
||||
|
||||
<iframe id='iframe' src='file_bug580069_1.html'></iframe>
|
||||
|
||||
<script type="application/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var iframe = document.getElementById('iframe');
|
||||
var iframeCw = iframe.contentWindow;
|
||||
|
||||
// Called when file_bug580069_1.html loads.
|
||||
function page1Load() {
|
||||
// This should cause us to load file 2.
|
||||
dump('page1Load\n');
|
||||
iframeCw.document.getElementById('form').submit();
|
||||
}
|
||||
|
||||
// Called when file_bug580069_2.html loads.
|
||||
var page2Loads = 0;
|
||||
function page2Load(method) {
|
||||
|
||||
dump("iframe's location is: " + iframeCw.location + ", method is " + method + "\n");
|
||||
|
||||
if (page2Loads == 0) {
|
||||
is(method, "POST", "Method for first load should be POST.");
|
||||
iframeCw.history.replaceState('', '', '?replaced');
|
||||
|
||||
// This refresh shouldn't pop up the "are you sure you want to refresh a page
|
||||
// with POST data?" dialog. If it does, this test will hang and fail, and
|
||||
// we'll see 'Refreshing iframe...' at the end of the test log.
|
||||
dump('Refreshing iframe...\n');
|
||||
iframeCw.location.reload();
|
||||
}
|
||||
else if (page2Loads == 1) {
|
||||
is(method, "GET", "Method for second load should be GET.");
|
||||
is(iframeCw.location.search, "?replaced", "Wrong search on iframe after refresh.");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
else {
|
||||
ok(false, "page2Load should only be called twice.");
|
||||
}
|
||||
|
||||
page2Loads++;
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user