Bug 1432320 - (Part 1) Add nsIURLMutator r=mayhemer

MozReview-Commit-ID: 8GYru46kFQE

--HG--
extra : rebase_source : 064fae8d2e31db071da524b1946f135dda01cc1a
This commit is contained in:
Valentin Gosu 2018-01-31 02:32:27 +01:00
Родитель f83a4332e9
Коммит d4c640e9f7
6 изменённых файлов: 112 добавлений и 7 удалений

Просмотреть файл

@ -257,7 +257,46 @@ nsJARURI::SetSpecInternal(const nsACString& aSpec)
return SetSpecWithBase(aSpec, nullptr); return SetSpecWithBase(aSpec, nullptr);
} }
NS_IMPL_ISUPPORTS(nsJARURI::Mutator, nsIURISetters, nsIURIMutator) NS_IMPL_ISUPPORTS(nsJARURI::Mutator, nsIURISetters, nsIURIMutator, nsIURLMutator)
NS_IMETHODIMP
nsJARURI::Mutator::SetFileName(const nsACString& aFileName, nsIURIMutator** aMutator)
{
if (!mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return mURI->SetFileName(aFileName);
}
NS_IMETHODIMP
nsJARURI::Mutator::SetFileBaseName(const nsACString& aFileBaseName, nsIURIMutator** aMutator)
{
if (!mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return mURI->SetFileBaseName(aFileBaseName);
}
NS_IMETHODIMP
nsJARURI::Mutator::SetFileExtension(const nsACString& aFileExtension, nsIURIMutator** aMutator)
{
if (!mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return mURI->SetFileExtension(aFileExtension);
}
NS_IMETHODIMP NS_IMETHODIMP
nsJARURI::Mutate(nsIURIMutator** aMutator) nsJARURI::Mutate(nsIURIMutator** aMutator)
@ -670,7 +709,8 @@ nsJARURI::GetDirectory(nsACString& directory)
NS_IMETHODIMP NS_IMETHODIMP
nsJARURI::SetDirectory(const nsACString& directory) nsJARURI::SetDirectory(const nsACString& directory)
{ {
return mJAREntry->SetDirectory(directory); MOZ_ASSERT_UNREACHABLE("SetDirectory");
return NS_ERROR_NOT_IMPLEMENTED;
} }
NS_IMETHODIMP NS_IMETHODIMP
@ -682,7 +722,11 @@ nsJARURI::GetFileName(nsACString& fileName)
NS_IMETHODIMP NS_IMETHODIMP
nsJARURI::SetFileName(const nsACString& fileName) nsJARURI::SetFileName(const nsACString& fileName)
{ {
return mJAREntry->SetFileName(fileName); return NS_MutateURI(mJAREntry)
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileName,
nsCString(fileName),
nullptr)
.Finalize(mJAREntry);
} }
NS_IMETHODIMP NS_IMETHODIMP
@ -694,7 +738,11 @@ nsJARURI::GetFileBaseName(nsACString& fileBaseName)
NS_IMETHODIMP NS_IMETHODIMP
nsJARURI::SetFileBaseName(const nsACString& fileBaseName) nsJARURI::SetFileBaseName(const nsACString& fileBaseName)
{ {
return mJAREntry->SetFileBaseName(fileBaseName); return NS_MutateURI(mJAREntry)
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileBaseName,
nsCString(fileBaseName),
nullptr)
.Finalize(mJAREntry);
} }
NS_IMETHODIMP NS_IMETHODIMP
@ -706,7 +754,11 @@ nsJARURI::GetFileExtension(nsACString& fileExtension)
NS_IMETHODIMP NS_IMETHODIMP
nsJARURI::SetFileExtension(const nsACString& fileExtension) nsJARURI::SetFileExtension(const nsACString& fileExtension)
{ {
return mJAREntry->SetFileExtension(fileExtension); return NS_MutateURI(mJAREntry)
.Apply<nsIURLMutator>(&nsIURLMutator::SetFileExtension,
nsCString(fileExtension),
nullptr)
.Finalize(mJAREntry);
} }
NS_IMETHODIMP NS_IMETHODIMP

Просмотреть файл

@ -102,10 +102,12 @@ public:
class Mutator class Mutator
: public nsIURIMutator : public nsIURIMutator
, public BaseURIMutator<nsJARURI> , public BaseURIMutator<nsJARURI>
, public nsIURLMutator
{ {
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI) NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI)
NS_DEFINE_NSIMUTATOR_COMMON NS_DEFINE_NSIMUTATOR_COMMON
NS_DECL_NSIURLMUTATOR
explicit Mutator() { } explicit Mutator() { }
private: private:

Просмотреть файл

@ -4,6 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsIURI.idl" #include "nsIURI.idl"
interface nsIURIMutator;
/** /**
* The nsIURL interface provides convenience methods that further * The nsIURL interface provides convenience methods that further
@ -120,3 +121,11 @@ interface nsIURL : nsIURI
AUTF8String getRelativeSpec(in nsIURI aURIToCompare); AUTF8String getRelativeSpec(in nsIURI aURIToCompare);
}; };
[scriptable, builtinclass, uuid(25072eb8-f1e6-482f-9ca9-eddd3d65169a)]
interface nsIURLMutator : nsISupports
{
[must_use] nsIURIMutator setFileName(in AUTF8String aFileName);
[must_use] nsIURIMutator setFileBaseName(in AUTF8String aFileBaseName);
[must_use] nsIURIMutator setFileExtension(in AUTF8String aFileExtension);
};

Просмотреть файл

@ -2226,7 +2226,8 @@ nsStandardURL::SetPathQueryRef(const nsACString &input)
return NS_OK; return NS_OK;
} }
NS_IMPL_ISUPPORTS(nsStandardURL::Mutator, nsIURISetters, nsIURIMutator, nsIStandardURLMutator) // When updating this also update SubstitutingURL::Mutator
NS_IMPL_ISUPPORTS(nsStandardURL::Mutator, nsIURISetters, nsIURIMutator, nsIStandardURLMutator, nsIURLMutator)
NS_IMETHODIMP NS_IMETHODIMP
nsStandardURL::Mutate(nsIURIMutator** aMutator) nsStandardURL::Mutate(nsIURIMutator** aMutator)

Просмотреть файл

@ -321,6 +321,7 @@ public:
: public nsIURIMutator : public nsIURIMutator
, public BaseURIMutator<T> , public BaseURIMutator<T>
, public nsIStandardURLMutator , public nsIStandardURLMutator
, public nsIURLMutator
{ {
NS_FORWARD_SAFE_NSIURISETTERS_RET(BaseURIMutator<T>::mURI) NS_FORWARD_SAFE_NSIURISETTERS_RET(BaseURIMutator<T>::mURI)
@ -390,6 +391,46 @@ public:
return BaseURIMutator<T>::mURI->SetDefaultPort(aNewDefaultPort); return BaseURIMutator<T>::mURI->SetDefaultPort(aNewDefaultPort);
} }
MOZ_MUST_USE NS_IMETHOD
SetFileName(const nsACString& aFileName, nsIURIMutator** aMutator) override
{
if (!BaseURIMutator<T>::mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return BaseURIMutator<T>::mURI->SetFileName(aFileName);
}
MOZ_MUST_USE NS_IMETHOD
SetFileBaseName(const nsACString& aFileBaseName, nsIURIMutator** aMutator) override
{
if (!BaseURIMutator<T>::mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return BaseURIMutator<T>::mURI->SetFileBaseName(aFileBaseName);
}
MOZ_MUST_USE NS_IMETHOD
SetFileExtension(const nsACString& aFileExtension, nsIURIMutator** aMutator) override
{
if (!BaseURIMutator<T>::mURI) {
return NS_ERROR_NULL_POINTER;
}
if (aMutator) {
nsCOMPtr<nsIURIMutator> mutator = this;
mutator.forget(aMutator);
}
return BaseURIMutator<T>::mURI->SetFileExtension(aFileExtension);
}
explicit TemplatedMutator() { } explicit TemplatedMutator() { }
private: private:
virtual ~TemplatedMutator() { } virtual ~TemplatedMutator() { }

Просмотреть файл

@ -32,7 +32,7 @@ static NS_DEFINE_CID(kSubstitutingURLCID, NS_SUBSTITUTINGURL_CID);
// SubstitutingURL : overrides nsStandardURL::GetFile to provide nsIFile resolution // SubstitutingURL : overrides nsStandardURL::GetFile to provide nsIFile resolution
//--------------------------------------------------------------------------------- //---------------------------------------------------------------------------------
NS_IMPL_ISUPPORTS(SubstitutingURL::Mutator, nsIURISetters, nsIURIMutator, nsIStandardURLMutator) NS_IMPL_ISUPPORTS(SubstitutingURL::Mutator, nsIURISetters, nsIURIMutator, nsIStandardURLMutator, nsIURLMutator)
nsresult nsresult
SubstitutingURL::EnsureFile() SubstitutingURL::EnsureFile()