diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp
index 4743c4c011a..ac219b6b607 100644
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -1718,20 +1718,16 @@ nsHTMLDocument::SetDomain(const nsAString& aDomain)
return NS_ERROR_FAILURE;
}
- nsCAutoString newURIString;
- if (NS_FAILED(uri->GetScheme(newURIString)))
- return NS_ERROR_FAILURE;
- nsCAutoString path;
- if (NS_FAILED(uri->GetPath(path)))
- return NS_ERROR_FAILURE;
- newURIString.AppendLiteral("://");
- AppendUTF16toUTF8(aDomain, newURIString);
- newURIString.Append(path);
-
nsCOMPtr newURI;
- if (NS_FAILED(NS_NewURI(getter_AddRefs(newURI), newURIString)))
- return NS_ERROR_FAILURE;
+ nsresult rv = uri->Clone(getter_AddRefs(newURI));
+ NS_ENSURE_TRUE(newURI, rv);
+ rv = newURI->SetUserPass(EmptyCString());
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ rv = newURI->SetHostPort(NS_ConvertUTF16toUTF8(aDomain));
+ NS_ENSURE_SUCCESS(rv, rv);
+
// Check new domain - must be a superdomain of the current host
// For example, a page from foo.bar.com may set domain to bar.com,
// but not to ar.com, baz.com, or fi.foo.bar.com.
@@ -1762,6 +1758,7 @@ nsHTMLDocument::SetDomain(const nsAString& aDomain)
return NS_ERROR_DOM_BAD_DOCUMENT_DOMAIN;
}
+ NS_TryToSetImmutable(newURI);
return NodePrincipal()->SetDomain(newURI);
}