Bug 1423961 - Improve NS_MutateURI.Finalize by passing reference to nsCOMPtr instead nsIURI** r=mayhemer

MozReview-Commit-ID: 6VRhNJF3f0U

--HG--
extra : rebase_source : 01bf82ace5cfbf81fdf095cd76c5d98a2ce03245
This commit is contained in:
Valentin Gosu 2017-12-08 17:37:41 +01:00
parent 84f063bdfa
commit d9e085b9ec
2 changed files with 32 additions and 7 deletions

View File

@ -284,16 +284,34 @@ public:
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;
};
%}

View File

@ -243,19 +243,26 @@ TEST(TestStandardURL, Mutator)
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"));
}