Bug 1423961 - Improve NS_MutateURI.Finalize by passing reference to nsCOMPtr instead nsIURI** r=mayhemer
MozReview-Commit-ID: 6VRhNJF3f0U
--- a/netwerk/base/nsIURIMutator.idl
+++ b/netwerk/base/nsIURIMutator.idl
@@ -279,21 +279,39 @@ public:
return *this;
}
NS_MutateURI& SetQueryWithEncoding(const nsACString& query, const mozilla::Encoding *encoding)
{
NS_ENSURE_SUCCESS(mStatus, *this);
mStatus = mMutator->SetQueryWithEncoding(query, encoding, nullptr);
return *this;
}
- nsresult Finalize(nsIURI** aURI)
+
+ template <class C>
+ nsresult Finalize(nsCOMPtr<C>& aURI)
{
NS_ENSURE_SUCCESS(mStatus, mStatus);
- mStatus = mMutator->Finalize(aURI);
+
+ nsCOMPtr<nsIURI> uri;
+ mStatus = mMutator->Finalize(getter_AddRefs(uri));
+ NS_ENSURE_SUCCESS(mStatus, mStatus);
+
+ aURI = do_QueryInterface(uri, &mStatus);
+ NS_ENSURE_SUCCESS(mStatus, mStatus);
+
+ return NS_OK;
+ }
+
+ // Overload for nsIURI to avoid query interface.
+ nsresult Finalize(nsCOMPtr<nsIURI>& aURI)
+ {
+ NS_ENSURE_SUCCESS(mStatus, mStatus);
+ mStatus = mMutator->Finalize(getter_AddRefs(aURI));
return mStatus;
}
+
nsresult GetStatus() { return mStatus; }
private:
nsresult mStatus;
- RefPtr<nsIURIMutator> mMutator;
+ nsCOMPtr<nsIURIMutator> mMutator;
};
%}
--- a/netwerk/test/gtest/TestStandardURL.cpp
+++ b/netwerk/test/gtest/TestStandardURL.cpp
@@ -238,24 +238,31 @@ MOZ_GTEST_BENCH(TestStandardURL, Normali
TEST(TestStandardURL, Mutator)
{
nsAutoCString out;
nsCOMPtr<nsIURI> uri;
nsresult rv = NS_MutateURI(NS_STANDARDURLMUTATOR_CONTRACTID)
.SetSpec(NS_LITERAL_CSTRING("http://example.com"))
- .Finalize(getter_AddRefs(uri));
+ .Finalize(uri);
ASSERT_EQ(rv, NS_OK);
ASSERT_EQ(uri->GetSpec(out), NS_OK);
ASSERT_TRUE(out == NS_LITERAL_CSTRING("http://example.com/"));
- nsCOMPtr<nsIURI> uri2;
rv = NS_MutateURI(uri)
.SetScheme(NS_LITERAL_CSTRING("ftp"))
.SetHost(NS_LITERAL_CSTRING("mozilla.org"))
.SetPathQueryRef(NS_LITERAL_CSTRING("/path?query#ref"))
- .Finalize(getter_AddRefs(uri2));
+ .Finalize(uri);
ASSERT_EQ(rv, NS_OK);
- ASSERT_EQ(uri2->GetSpec(out), NS_OK);
+ ASSERT_EQ(uri->GetSpec(out), NS_OK);
ASSERT_TRUE(out == NS_LITERAL_CSTRING("ftp://mozilla.org/path?query#ref"));
+
+ nsCOMPtr<nsIURL> url;
+ rv = NS_MutateURI(uri)
+ .SetScheme(NS_LITERAL_CSTRING("https"))
+ .Finalize(url);
+ ASSERT_EQ(rv, NS_OK);
+ ASSERT_EQ(url->GetSpec(out), NS_OK);
+ ASSERT_TRUE(out == NS_LITERAL_CSTRING("https://mozilla.org/path?query#ref"));
}