Bug 1433958 - Change code that sets nsIURI.username to use nsIURIMutator
MozReview-Commit-ID: 7E63pAIOZCs
--- a/dom/base/Link.cpp
+++ b/dom/base/Link.cpp
@@ -457,24 +457,28 @@ Link::SetPassword(const nsAString &aPass
uri->SetPassword(NS_ConvertUTF16toUTF8(aPassword));
SetHrefAttribute(uri);
}
void
Link::SetUsername(const nsAString &aUsername)
{
- nsCOMPtr<nsIURI> uri(GetURIToMutate());
+ nsCOMPtr<nsIURI> uri(GetURI());
if (!uri) {
// Ignore failures to be compatible with NS4.
return;
}
- uri->SetUsername(NS_ConvertUTF16toUTF8(aUsername));
- SetHrefAttribute(uri);
+ nsresult rv = NS_MutateURI(uri)
+ .SetUsername(NS_ConvertUTF16toUTF8(aUsername))
+ .Finalize(uri);
+ if (NS_SUCCEEDED(rv)) {
+ SetHrefAttribute(uri);
+ }
}
void
Link::SetHost(const nsAString &aHost)
{
nsCOMPtr<nsIURI> uri(GetURI());
if (!uri) {
// Ignore failures to be compatible with NS4.
--- a/dom/url/URLMainThread.cpp
+++ b/dom/url/URLMainThread.cpp
@@ -287,17 +287,19 @@ void
URLMainThread::GetUsername(nsAString& aUsername, ErrorResult& aRv) const
{
URL_GETTER(aUsername, GetUsername);
}
void
URLMainThread::SetUsername(const nsAString& aUsername, ErrorResult& aRv)
{
- mURI->SetUsername(NS_ConvertUTF16toUTF8(aUsername));
+ Unused << NS_MutateURI(mURI)
+ .SetUsername(NS_ConvertUTF16toUTF8(aUsername))
+ .Finalize(mURI);
}
void
URLMainThread::GetPassword(nsAString& aPassword, ErrorResult& aRv) const
{
URL_GETTER(aPassword, GetPassword);
}
--- a/netwerk/test/unit/test_URIs.js
+++ b/netwerk/test/unit/test_URIs.js
@@ -519,17 +519,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", "username", "password",
+ var propertiesToCheck = ["spec", "scheme", "password",
"host", "port", "query", "ref"];
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
@@ -620,17 +620,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", "username", "password",
+ var propertiesToCheck = ["scheme", "password",
"host", "port", "query", "ref"];
propertiesToCheck.forEach(function(aProperty) {
var threw = false;
try {
URI[aProperty] = "anothervalue";
} catch(e) {
threw = true;
--- a/netwerk/test/unit/test_standardurl.js
+++ b/netwerk/test/unit/test_standardurl.js
@@ -296,27 +296,28 @@ add_test(function test_percentDecoding()
add_test(function test_hugeStringThrows()
{
let prefs = Cc["@mozilla.org/preferences-service;1"]
.getService(Ci.nsIPrefService);
let maxLen = prefs.getIntPref("network.standard-url.max-length");
let url = stringToURL("http://test:test@example.com");
let hugeString = new Array(maxLen + 1).fill("a").join("");
- let properties = ["scheme", "username",
+ let properties = ["scheme",
"password", "host", "ref",
"query"];
for (let prop of properties) {
Assert.throws(() => url[prop] = hugeString,
/NS_ERROR_MALFORMED_URI/,
`Passing a huge string to "${prop}" should throw`);
}
let setters = [
{ method: "setSpec", qi: Ci.nsIURIMutator },
+ { method: "setUsername", qi: Ci.nsIURIMutator },
{ method: "setFilePath", qi: Ci.nsIURIMutator },
{ method: "setHostPort", qi: Ci.nsIURIMutator },
{ method: "setUserPass", qi: Ci.nsIURIMutator },
{ method: "setPathQueryRef", qi: Ci.nsIURIMutator },
{ method: "setFileName", qi: Ci.nsIURLMutator },
{ method: "setFileExtension", qi: Ci.nsIURLMutator },
{ method: "setFileBaseName", qi: Ci.nsIURLMutator },
];