mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 13:55:43 +00:00
Bug 392567 - "Impossible to submit forms to JAR URLs" [p=trev.moz@adblockplus.org (Wladimir Palant) r=bzbarsky sr=sicking a1.9=sicking]
This commit is contained in:
parent
4c74ce3c7a
commit
9700f559c3
@ -57,6 +57,7 @@
|
||||
#include "nsStringStream.h"
|
||||
#include "nsIFormProcessor.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsLinebreakConverter.h"
|
||||
#include "nsICharsetConverterManager.h"
|
||||
@ -532,29 +533,35 @@ nsFSURLEncoded::GetEncodedSubmission(nsIURI* aURI,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCAutoString path;
|
||||
rv = aURI->GetPath(path);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
// Bug 42616: Trim off named anchor and save it to add later
|
||||
PRInt32 namedAnchorPos = path.FindChar('#');
|
||||
nsCAutoString namedAnchor;
|
||||
if (kNotFound != namedAnchorPos) {
|
||||
path.Right(namedAnchor, (path.Length() - namedAnchorPos));
|
||||
path.Truncate(namedAnchorPos);
|
||||
nsCOMPtr<nsIURL> url = do_QueryInterface(aURI);
|
||||
if (url) {
|
||||
url->SetQuery(mQueryString);
|
||||
}
|
||||
else {
|
||||
nsCAutoString path;
|
||||
rv = aURI->GetPath(path);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
// Bug 42616: Trim off named anchor and save it to add later
|
||||
PRInt32 namedAnchorPos = path.FindChar('#');
|
||||
nsCAutoString namedAnchor;
|
||||
if (kNotFound != namedAnchorPos) {
|
||||
path.Right(namedAnchor, (path.Length() - namedAnchorPos));
|
||||
path.Truncate(namedAnchorPos);
|
||||
}
|
||||
|
||||
// Chop off old query string (bug 25330, 57333)
|
||||
// Only do this for GET not POST (bug 41585)
|
||||
PRInt32 queryStart = path.FindChar('?');
|
||||
if (kNotFound != queryStart) {
|
||||
path.Truncate(queryStart);
|
||||
// Chop off old query string (bug 25330, 57333)
|
||||
// Only do this for GET not POST (bug 41585)
|
||||
PRInt32 queryStart = path.FindChar('?');
|
||||
if (kNotFound != queryStart) {
|
||||
path.Truncate(queryStart);
|
||||
}
|
||||
|
||||
path.Append('?');
|
||||
// Bug 42616: Add named anchor to end after query string
|
||||
path.Append(mQueryString + namedAnchor);
|
||||
|
||||
aURI->SetPath(path);
|
||||
}
|
||||
|
||||
path.Append('?');
|
||||
// Bug 42616: Add named anchor to end after query string
|
||||
path.Append(mQueryString + namedAnchor);
|
||||
|
||||
aURI->SetPath(path);
|
||||
}
|
||||
|
||||
return rv;
|
||||
|
@ -96,6 +96,7 @@ _TEST_FILES = test_bug589.html \
|
||||
test_bug388746.html \
|
||||
test_bug389797.html \
|
||||
test_bug391994.html \
|
||||
test_bug392567.html \
|
||||
test_bug394700.html \
|
||||
$(NULL)
|
||||
|
||||
|
72
content/html/content/test/test_bug392567.html
Normal file
72
content/html/content/test/test_bug392567.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=392567
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 392567</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=392567">Mozilla Bug 392567</a>
|
||||
<p id="display"><iframe name="testFrame" id="testFrame" style="visibility: hidden;"></iframe></p>
|
||||
<div id="content" style="display: none">
|
||||
<form name="testForm" target="testFrame">
|
||||
<input type="text" name="key" />
|
||||
</form>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 392567 **/
|
||||
|
||||
var dataUrl = "data:application/octet-stream;base64,UEsDBBQAAgAIAO1yETcAAAAAAgAAAAAAAAAKAAAAaW5kZXguaHRtbAMAUEsBAhQAFAACAAgA7XIRNwAAAAACAAAAAAAAAAoAAAAAAAAAAAAgAAAAAAAAAGluZGV4Lmh0bWxQSwUGAAAAAAEAAQA4AAAAKgAAAAAA";
|
||||
var jarUrl = "jar:" + dataUrl + "!/index.html";
|
||||
var httpUrl = location.href.replace(/\.html.*/, "_404");
|
||||
|
||||
var form = document.forms.testForm;
|
||||
var frame = frames.testFrame;
|
||||
document.getElementById("testFrame").onload = processTestResult;
|
||||
|
||||
// List of tests to run, each test consists of form action URL and expected result URL
|
||||
var tests = [
|
||||
[jarUrl, jarUrl + "?$PARAMS"],
|
||||
[jarUrl + "?jarTest1=jarTest2", jarUrl + "?$PARAMS"],
|
||||
[jarUrl + "?jarTest3=jarTest4#jarTest5", jarUrl + "?$PARAMS#jarTest5"],
|
||||
["data:text/html,<html></html>", "data:text/html,<html></html>?$PARAMS"],
|
||||
["data:text/html,<html>How%20about%20this?</html>", "data:text/html,<html>How%20about%20this?$PARAMS"],
|
||||
[httpUrl, httpUrl + "?$PARAMS"],
|
||||
[httpUrl + "?httpTest1=httpTest2", httpUrl + "?$PARAMS"],
|
||||
[httpUrl + "?httpTest3=httpTest4#httpTest5", httpUrl + "?$PARAMS#httpTest5"]
|
||||
];
|
||||
|
||||
var currentTest = -1;
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
runNextTest();
|
||||
|
||||
function runNextTest() {
|
||||
currentTest++;
|
||||
if (currentTest >= tests.length) {
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
form.action = tests[currentTest][0];
|
||||
form.key.value = "value" + currentTest;
|
||||
form.submit();
|
||||
}
|
||||
|
||||
function processTestResult() {
|
||||
var expected = tests[currentTest][1].replace(/\$PARAMS/, "key=value" + currentTest);
|
||||
is(frame.location.href, expected, "Submitting to " + tests[currentTest][0]);
|
||||
|
||||
setTimeout(runNextTest, 0);
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user