Bug 1433958 - Change code that sets nsIURI.port to use nsIURIMutator
MozReview-Commit-ID: 7Lu7JJvDUGF
--- a/dom/base/Link.cpp
+++ b/dom/base/Link.cpp
@@ -548,17 +548,17 @@ Link::SetSearch(const nsAString& aSearch
return;
}
SetHrefAttribute(uri);
}
void
Link::SetPort(const nsAString &aPort)
{
- nsCOMPtr<nsIURI> uri(GetURIToMutate());
+ nsCOMPtr<nsIURI> uri(GetURI());
if (!uri) {
// Ignore failures to be compatible with NS4.
return;
}
nsresult rv;
nsAutoString portStr(aPort);
@@ -566,17 +566,22 @@ Link::SetPort(const nsAString &aPort)
int32_t port = -1;
if (!aPort.IsEmpty()) {
port = portStr.ToInteger(&rv);
if (NS_FAILED(rv)) {
return;
}
}
- (void)uri->SetPort(port);
+ rv = NS_MutateURI(uri)
+ .SetPort(port)
+ .Finalize(uri);
+ if (NS_FAILED(rv)) {
+ return;
+ }
SetHrefAttribute(uri);
}
void
Link::SetHash(const nsAString &aHash)
{
nsCOMPtr<nsIURI> uri(GetURI());
if (!uri) {
--- a/dom/base/Location.cpp
+++ b/dom/base/Location.cpp
@@ -650,17 +650,17 @@ Location::SetPort(const nsAString& aPort
ErrorResult& aRv)
{
if (!CallerSubsumes(&aSubjectPrincipal)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
nsCOMPtr<nsIURI> uri;
- aRv = GetWritableURI(getter_AddRefs(uri));
+ aRv = GetURI(getter_AddRefs(uri));
if (NS_WARN_IF(aRv.Failed() || !uri)) {
return;
}
// perhaps use nsReadingIterators at some point?
NS_ConvertUTF16toUTF8 portStr(aPort);
const char *buf = portStr.get();
int32_t port = -1;
@@ -669,17 +669,19 @@ Location::SetPort(const nsAString& aPort
if (*buf == ':') {
port = atol(buf+1);
}
else {
port = atol(buf);
}
}
- aRv = uri->SetPort(port);
+ aRv = NS_MutateURI(uri)
+ .SetPort(port)
+ .Finalize(uri);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
aRv = SetURI(uri);
}
void
--- a/dom/url/URLMainThread.cpp
+++ b/dom/url/URLMainThread.cpp
@@ -380,17 +380,19 @@ URLMainThread::SetPort(const nsAString&
// nsIURI uses -1 as default value.
if (!portStr.IsEmpty()) {
port = portStr.ToInteger(&rv);
if (NS_FAILED(rv)) {
return;
}
}
- mURI->SetPort(port);
+ Unused << NS_MutateURI(mURI)
+ .SetPort(port)
+ .Finalize(mURI);
}
void
URLMainThread::GetPathname(nsAString& aPathname, ErrorResult& aRv) const
{
aPathname.Truncate();
// Do not throw! Not having a valid URI or URL should result in an empty
--- a/dom/url/URLWorker.cpp
+++ b/dom/url/URLWorker.cpp
@@ -1038,17 +1038,19 @@ URLWorker::SetPort(const nsAString& aPor
// nsIURI uses -1 as default value.
if (!portStr.IsEmpty()) {
port = portStr.ToInteger(&rv);
if (NS_FAILED(rv)) {
return;
}
}
- mStdURL->SetPort(port);
+ Unused << NS_MutateURI(mStdURL)
+ .SetPort(port)
+ .Finalize(mStdURL);
return;
}
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterPort,
aPort, mURLProxy);
--- a/netwerk/test/unit/test_URIs.js
+++ b/netwerk/test/unit/test_URIs.js
@@ -522,17 +522,17 @@ function do_test_mutate_ref(aTest, aSuff
// Tests that normally-mutable properties can't be modified on
// special URIs that are known to be immutable.
function do_test_immutable(aTest) {
Assert.ok(aTest.immutable);
var URI = NetUtil.newURI(aTest.spec);
// All the non-readonly attributes on nsIURI.idl:
var propertiesToCheck = ["spec", "scheme",
- "host", "port"];
+ "host"];
propertiesToCheck.forEach(function(aProperty) {
var threw = false;
try {
URI[aProperty] = "anothervalue";
} catch(e) {
threw = true;
}
--- a/netwerk/test/unit/test_URIs2.js
+++ b/netwerk/test/unit/test_URIs2.js
@@ -623,17 +623,17 @@ function do_test_mutate_ref(aTest, aSuff
// Tests that normally-mutable properties can't be modified on
// special URIs that are known to be immutable.
function do_test_immutable(aTest) {
Assert.ok(aTest.immutable);
var URI = NetUtil.newURI(aTest.spec);
// All the non-readonly attributes on nsIURI.idl:
var propertiesToCheck = ["scheme",
- "host", "port"];
+ "host"];
propertiesToCheck.forEach(function(aProperty) {
var threw = false;
try {
URI[aProperty] = "anothervalue";
} catch(e) {
threw = true;
}
--- a/netwerk/test/unit/test_bug1195415.js
+++ b/netwerk/test/unit/test_bug1195415.js
@@ -4,113 +4,113 @@ function run_test() {
var ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
var ssm = Cc["@mozilla.org/scriptsecuritymanager;1"].
getService(Ci.nsIScriptSecurityManager);
// NON-UNICODE
var uri = ios.newURI("http://foo.com/file.txt");
Assert.equal(uri.asciiHostPort, "foo.com");
- uri.port = 90;
+ uri = uri.mutate().setPort(90).finalize();
var prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "foo.com:90");
Assert.equal(prin.origin, "http://foo.com:90");
uri = ios.newURI("http://foo.com:10/file.txt");
Assert.equal(uri.asciiHostPort, "foo.com:10");
- uri.port = 500;
+ uri = uri.mutate().setPort(500).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "foo.com:500");
Assert.equal(prin.origin, "http://foo.com:500");
uri = ios.newURI("http://foo.com:5000/file.txt");
Assert.equal(uri.asciiHostPort, "foo.com:5000");
- uri.port = 20;
+ uri = uri.mutate().setPort(20).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "foo.com:20");
Assert.equal(prin.origin, "http://foo.com:20");
uri = ios.newURI("http://foo.com:5000/file.txt");
Assert.equal(uri.asciiHostPort, "foo.com:5000");
- uri.port = -1;
+ uri = uri.mutate().setPort(-1).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "foo.com");
Assert.equal(prin.origin, "http://foo.com");
uri = ios.newURI("http://foo.com:5000/file.txt");
Assert.equal(uri.asciiHostPort, "foo.com:5000");
- uri.port = 80;
+ uri = uri.mutate().setPort(80).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "foo.com");
Assert.equal(prin.origin, "http://foo.com");
// UNICODE
uri = ios.newURI("http://jos\u00e9.example.net.ch/file.txt");
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch");
- uri.port = 90;
+ uri = uri.mutate().setPort(90).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:90");
Assert.equal(prin.origin, "http://xn--jos-dma.example.net.ch:90");
uri = ios.newURI("http://jos\u00e9.example.net.ch:10/file.txt");
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:10");
- uri.port = 500;
+ uri = uri.mutate().setPort(500).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:500");
Assert.equal(prin.origin, "http://xn--jos-dma.example.net.ch:500");
uri = ios.newURI("http://jos\u00e9.example.net.ch:5000/file.txt");
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:5000");
- uri.port = 20;
+ uri = uri.mutate().setPort(20).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:20");
Assert.equal(prin.origin, "http://xn--jos-dma.example.net.ch:20");
uri = ios.newURI("http://jos\u00e9.example.net.ch:5000/file.txt");
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:5000");
- uri.port = -1;
+ uri = uri.mutate().setPort(-1).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch");
Assert.equal(prin.origin, "http://xn--jos-dma.example.net.ch");
uri = ios.newURI("http://jos\u00e9.example.net.ch:5000/file.txt");
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch:5000");
- uri.port = 80;
+ uri = uri.mutate().setPort(80).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "xn--jos-dma.example.net.ch");
Assert.equal(prin.origin, "http://xn--jos-dma.example.net.ch");
// ipv6
uri = ios.newURI("http://[123:45::678]/file.txt");
Assert.equal(uri.asciiHostPort, "[123:45::678]");
- uri.port = 90;
+ uri = uri.mutate().setPort(90).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "[123:45::678]:90");
Assert.equal(prin.origin, "http://[123:45::678]:90");
uri = ios.newURI("http://[123:45::678]:10/file.txt");
Assert.equal(uri.asciiHostPort, "[123:45::678]:10");
- uri.port = 500;
+ uri = uri.mutate().setPort(500).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "[123:45::678]:500");
Assert.equal(prin.origin, "http://[123:45::678]:500");
uri = ios.newURI("http://[123:45::678]:5000/file.txt");
Assert.equal(uri.asciiHostPort, "[123:45::678]:5000");
- uri.port = 20;
+ uri = uri.mutate().setPort(20).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "[123:45::678]:20");
Assert.equal(prin.origin, "http://[123:45::678]:20");
uri = ios.newURI("http://[123:45::678]:5000/file.txt");
Assert.equal(uri.asciiHostPort, "[123:45::678]:5000");
- uri.port = -1;
+ uri = uri.mutate().setPort(-1).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "[123:45::678]");
Assert.equal(prin.origin, "http://[123:45::678]");
uri = ios.newURI("http://[123:45::678]:5000/file.txt");
Assert.equal(uri.asciiHostPort, "[123:45::678]:5000");
- uri.port = 80;
+ uri = uri.mutate().setPort(80).finalize();
prin = ssm.createCodebasePrincipal(uri, {});
Assert.equal(uri.asciiHostPort, "[123:45::678]");
Assert.equal(prin.origin, "http://[123:45::678]");
}
--- a/netwerk/test/unit/test_bug388281.js
+++ b/netwerk/test/unit/test_bug388281.js
@@ -1,24 +1,24 @@
function run_test() {
const ios = Cc["@mozilla.org/network/io-service;1"].
getService(Ci.nsIIOService);
var uri = ios.newURI("http://foo.com/file.txt");
- uri.port = 90;
+ uri = uri.mutate().setPort(90).finalize();
Assert.equal(uri.hostPort, "foo.com:90");
uri = ios.newURI("http://foo.com:10/file.txt");
- uri.port = 500;
+ uri = uri.mutate().setPort(500).finalize();
Assert.equal(uri.hostPort, "foo.com:500");
-
+
uri = ios.newURI("http://foo.com:5000/file.txt");
- uri.port = 20;
+ uri = uri.mutate().setPort(20).finalize();
Assert.equal(uri.hostPort, "foo.com:20");
uri = ios.newURI("http://foo.com:5000/file.txt");
- uri.port = -1;
+ uri = uri.mutate().setPort(-1).finalize();
Assert.equal(uri.hostPort, "foo.com");
uri = ios.newURI("http://foo.com:5000/file.txt");
- uri.port = 80;
+ uri = uri.mutate().setPort(80).finalize();
Assert.equal(uri.hostPort, "foo.com");
}
--- a/netwerk/test/unit/test_standardurl_port.js
+++ b/netwerk/test/unit/test_standardurl_port.js
@@ -4,23 +4,23 @@ function run_test() {
getService(Ci.nsIIOService);
return ios.newURI(aURLSpec, aCharset);
}
var httpURI = makeURI("http://foo.com");
Assert.equal(-1, httpURI.port);
// Setting to default shouldn't cause a change
- httpURI.port = 80;
+ httpURI = httpURI.mutate().setPort(80).finalize();
Assert.equal(-1, httpURI.port);
-
+
// Setting to default after setting to non-default shouldn't cause a change (bug 403480)
- httpURI.port = 123;
+ httpURI = httpURI.mutate().setPort(123).finalize();
Assert.equal(123, httpURI.port);
- httpURI.port = 80;
+ httpURI = httpURI.mutate().setPort(80).finalize();
Assert.equal(-1, httpURI.port);
Assert.ok(!/80/.test(httpURI.spec));
// URL parsers shouldn't set ports to default value (bug 407538)
httpURI = httpURI.mutate().setSpec("http://foo.com:81").finalize();
Assert.equal(81, httpURI.port);
httpURI = httpURI.mutate().setSpec("http://foo.com:80").finalize();
Assert.equal(-1, httpURI.port);
--- a/security/manager/pki/resources/content/exceptionDialog.js
+++ b/security/manager/pki/resources/content/exceptionDialog.js
@@ -127,17 +127,17 @@ function getURI() {
return null;
}
if (uri.scheme == "http") {
uri.scheme = "https";
}
if (uri.port == -1) {
- uri.port = 443;
+ uri = uri.mutate().setPort(443).finalize();
}
return uri;
}
function resetDialog() {
document.getElementById("viewCertButton").disabled = true;
document.getElementById("permanent").disabled = true;