Bug 1448328 - Use thread-safe nsIURI in the URI API - part 1 - No getter/setter runnables, r=valentin

This commit is contained in:
Andrea Marchesini 2018-04-14 01:06:35 +02:00
parent 1a39373d7d
commit 4b23deda27
9 changed files with 148 additions and 400 deletions

View File

@ -209,26 +209,19 @@ GetRequestURLFromWorker(const GlobalObject& aGlobal, const nsAString& aInput,
return;
}
nsString username;
url->GetUsername(username, aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
url->GetUsername(username);
nsString password;
url->GetPassword(password, aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
url->GetPassword(password);
if (!username.IsEmpty() || !password.IsEmpty()) {
aRv.ThrowTypeError<MSG_URL_HAS_CREDENTIALS>(aInput);
return;
}
// Get the fragment from URL.
nsAutoString fragment;
url->GetHash(fragment, aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
url->GetHash(fragment);
// Note: URL::GetHash() includes the "#" and we want the fragment with out
// the hash symbol.
@ -236,14 +229,8 @@ GetRequestURLFromWorker(const GlobalObject& aGlobal, const nsAString& aInput,
CopyUTF16toUTF8(Substring(fragment, 1), aURLfragment);
}
url->SetHash(EmptyString(), aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
url->Stringify(aRequestURL, aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
url->SetHash(EmptyString());
url->Stringify(aRequestURL);
}
class ReferrerSameOriginChecker final : public WorkerMainThreadRunnable
@ -399,11 +386,7 @@ Request::Constructor(const GlobalObject& aGlobal,
aRv.ThrowTypeError<MSG_INVALID_REFERRER_URL>(referrer);
return nullptr;
}
url->Stringify(referrerURL, aRv);
if (NS_WARN_IF(aRv.Failed())) {
aRv.ThrowTypeError<MSG_INVALID_REFERRER_URL>(referrer);
return nullptr;
}
url->Stringify(referrerURL);
if (!referrerURL.EqualsLiteral(kFETCH_CLIENT_REFERRER_STR)) {
WorkerPrivate* worker = GetCurrentThreadWorkerPrivate();
nsresult rv = NS_OK;

View File

@ -129,11 +129,7 @@ Response::Redirect(const GlobalObject& aGlobal, const nsAString& aUrl,
return nullptr;
}
url->Stringify(parsedURL, aRv);
}
if (aRv.Failed()) {
return nullptr;
url->Stringify(parsedURL);
}
if (aStatus != 301 && aStatus != 302 && aStatus != 303 && aStatus != 307 && aStatus != 308) {

View File

@ -126,9 +126,9 @@ URL::CreateSearchParamsIfNeeded()
}
void
URL::SetSearch(const nsAString& aSearch, ErrorResult& aRv)
URL::SetSearch(const nsAString& aSearch)
{
SetSearchInternal(aSearch, aRv);
SetSearchInternal(aSearch);
UpdateURLSearchParams();
}
@ -141,10 +141,7 @@ URL::URLSearchParamsUpdated(URLSearchParams* aSearchParams)
nsAutoString search;
mSearchParams->Serialize(search);
ErrorResult rv;
SetSearchInternal(search, rv);
NS_WARNING_ASSERTION(!rv.Failed(), "SetSearchInternal failed");
rv.SuppressException();
SetSearchInternal(search);
}
} // namespace dom

View File

@ -78,7 +78,7 @@ public:
ErrorResult& aRv);
virtual void
GetHref(nsAString& aHref, ErrorResult& aRv) const = 0;
GetHref(nsAString& aHref) const = 0;
virtual void
SetHref(const nsAString& aHref, ErrorResult& aRv) = 0;
@ -87,70 +87,70 @@ public:
GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const = 0;
virtual void
GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const = 0;
GetProtocol(nsAString& aProtocol) const = 0;
virtual void
SetProtocol(const nsAString& aProtocol, ErrorResult& aRv) = 0;
virtual void
GetUsername(nsAString& aUsername, ErrorResult& aRv) const = 0;
GetUsername(nsAString& aUsername) const = 0;
virtual void
SetUsername(const nsAString& aUsername, ErrorResult& aRv) = 0;
SetUsername(const nsAString& aUsername) = 0;
virtual void
GetPassword(nsAString& aPassword, ErrorResult& aRv) const = 0;
GetPassword(nsAString& aPassword) const = 0;
virtual void
SetPassword(const nsAString& aPassword, ErrorResult& aRv) = 0;
SetPassword(const nsAString& aPassword) = 0;
virtual void
GetHost(nsAString& aHost, ErrorResult& aRv) const = 0;
GetHost(nsAString& aHost) const = 0;
virtual void
SetHost(const nsAString& aHost, ErrorResult& aRv) = 0;
SetHost(const nsAString& aHost) = 0;
virtual void
GetHostname(nsAString& aHostname, ErrorResult& aRv) const = 0;
GetHostname(nsAString& aHostname) const = 0;
virtual void
SetHostname(const nsAString& aHostname, ErrorResult& aRv) = 0;
SetHostname(const nsAString& aHostname) = 0;
virtual void
GetPort(nsAString& aPort, ErrorResult& aRv) const = 0;
GetPort(nsAString& aPort) const = 0;
virtual void
SetPort(const nsAString& aPort, ErrorResult& aRv) = 0;
SetPort(const nsAString& aPort) = 0;
virtual void
GetPathname(nsAString& aPathname, ErrorResult& aRv) const = 0;
GetPathname(nsAString& aPathname) const = 0;
virtual void
SetPathname(const nsAString& aPathname, ErrorResult& aRv) = 0;
SetPathname(const nsAString& aPathname) = 0;
virtual void
GetSearch(nsAString& aSearch, ErrorResult& aRv) const = 0;
GetSearch(nsAString& aSearch) const = 0;
virtual void
SetSearch(const nsAString& aSearch, ErrorResult& aRv);
SetSearch(const nsAString& aSearch);
URLSearchParams* SearchParams();
virtual void
GetHash(nsAString& aHost, ErrorResult& aRv) const = 0;
GetHash(nsAString& aHost) const = 0;
virtual void
SetHash(const nsAString& aHash, ErrorResult& aRv) = 0;
SetHash(const nsAString& aHash) = 0;
void Stringify(nsAString& aRetval, ErrorResult& aRv) const
void Stringify(nsAString& aRetval) const
{
GetHref(aRetval, aRv);
GetHref(aRetval);
}
void
ToJSON(nsAString& aResult, ErrorResult& aRv) const
ToJSON(nsAString& aResult) const
{
GetHref(aResult, aRv);
GetHref(aResult);
}
// URLSearchParamsObserver
@ -165,7 +165,7 @@ protected:
UpdateURLSearchParams() = 0;
virtual void
SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv) = 0;
SetSearchInternal(const nsAString& aSearch) = 0;
void CreateSearchParamsIfNeeded();

View File

@ -184,7 +184,7 @@ URLMainThread::IsValidURL(const GlobalObject& aGlobal, const nsAString& aURL,
}
void
URLMainThread::GetHref(nsAString& aHref, ErrorResult& aRv) const
URLMainThread::GetHref(nsAString& aHref) const
{
aHref.Truncate();
@ -225,7 +225,7 @@ URLMainThread::GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const
}
void
URLMainThread::GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const
URLMainThread::GetProtocol(nsAString& aProtocol) const
{
nsAutoCString protocol;
if (NS_SUCCEEDED(mURI->GetScheme(protocol))) {
@ -281,13 +281,13 @@ URLMainThread::SetProtocol(const nsAString& aProtocol, ErrorResult& aRv)
}
void
URLMainThread::GetUsername(nsAString& aUsername, ErrorResult& aRv) const
URLMainThread::GetUsername(nsAString& aUsername) const
{
URL_GETTER(aUsername, GetUsername);
}
void
URLMainThread::SetUsername(const nsAString& aUsername, ErrorResult& aRv)
URLMainThread::SetUsername(const nsAString& aUsername)
{
Unused << NS_MutateURI(mURI)
.SetUsername(NS_ConvertUTF16toUTF8(aUsername))
@ -295,13 +295,13 @@ URLMainThread::SetUsername(const nsAString& aUsername, ErrorResult& aRv)
}
void
URLMainThread::GetPassword(nsAString& aPassword, ErrorResult& aRv) const
URLMainThread::GetPassword(nsAString& aPassword) const
{
URL_GETTER(aPassword, GetPassword);
}
void
URLMainThread::SetPassword(const nsAString& aPassword, ErrorResult& aRv)
URLMainThread::SetPassword(const nsAString& aPassword)
{
Unused << NS_MutateURI(mURI)
.SetPassword(NS_ConvertUTF16toUTF8(aPassword))
@ -309,13 +309,13 @@ URLMainThread::SetPassword(const nsAString& aPassword, ErrorResult& aRv)
}
void
URLMainThread::GetHost(nsAString& aHost, ErrorResult& aRv) const
URLMainThread::GetHost(nsAString& aHost) const
{
URL_GETTER(aHost, GetHostPort);
}
void
URLMainThread::SetHost(const nsAString& aHost, ErrorResult& aRv)
URLMainThread::SetHost(const nsAString& aHost)
{
Unused << NS_MutateURI(mURI)
.SetHostPort(NS_ConvertUTF16toUTF8(aHost))
@ -339,14 +339,14 @@ URLMainThread::UpdateURLSearchParams()
}
void
URLMainThread::GetHostname(nsAString& aHostname, ErrorResult& aRv) const
URLMainThread::GetHostname(nsAString& aHostname) const
{
aHostname.Truncate();
nsContentUtils::GetHostOrIPv6WithBrackets(mURI, aHostname);
}
void
URLMainThread::SetHostname(const nsAString& aHostname, ErrorResult& aRv)
URLMainThread::SetHostname(const nsAString& aHostname)
{
// nsStandardURL returns NS_ERROR_UNEXPECTED for an empty hostname
// The return code is silently ignored
@ -356,7 +356,7 @@ URLMainThread::SetHostname(const nsAString& aHostname, ErrorResult& aRv)
}
void
URLMainThread::GetPort(nsAString& aPort, ErrorResult& aRv) const
URLMainThread::GetPort(nsAString& aPort) const
{
aPort.Truncate();
@ -370,7 +370,7 @@ URLMainThread::GetPort(nsAString& aPort, ErrorResult& aRv) const
}
void
URLMainThread::SetPort(const nsAString& aPort, ErrorResult& aRv)
URLMainThread::SetPort(const nsAString& aPort)
{
nsresult rv;
nsAutoString portStr(aPort);
@ -390,7 +390,7 @@ URLMainThread::SetPort(const nsAString& aPort, ErrorResult& aRv)
}
void
URLMainThread::GetPathname(nsAString& aPathname, ErrorResult& aRv) const
URLMainThread::GetPathname(nsAString& aPathname) const
{
aPathname.Truncate();
@ -405,7 +405,7 @@ URLMainThread::GetPathname(nsAString& aPathname, ErrorResult& aRv) const
}
void
URLMainThread::SetPathname(const nsAString& aPathname, ErrorResult& aRv)
URLMainThread::SetPathname(const nsAString& aPathname)
{
// Do not throw!
@ -415,7 +415,7 @@ URLMainThread::SetPathname(const nsAString& aPathname, ErrorResult& aRv)
}
void
URLMainThread::GetSearch(nsAString& aSearch, ErrorResult& aRv) const
URLMainThread::GetSearch(nsAString& aSearch) const
{
aSearch.Truncate();
@ -433,7 +433,7 @@ URLMainThread::GetSearch(nsAString& aSearch, ErrorResult& aRv) const
}
void
URLMainThread::GetHash(nsAString& aHash, ErrorResult& aRv) const
URLMainThread::GetHash(nsAString& aHash) const
{
aHash.Truncate();
@ -446,7 +446,7 @@ URLMainThread::GetHash(nsAString& aHash, ErrorResult& aRv) const
}
void
URLMainThread::SetHash(const nsAString& aHash, ErrorResult& aRv)
URLMainThread::SetHash(const nsAString& aHash)
{
Unused << NS_MutateURI(mURI)
.SetRef(NS_ConvertUTF16toUTF8(aHash))
@ -454,7 +454,7 @@ URLMainThread::SetHash(const nsAString& aHash, ErrorResult& aRv)
}
void
URLMainThread::SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv)
URLMainThread::SetSearchInternal(const nsAString& aSearch)
{
// Ignore failures to be compatible with NS4.

View File

@ -51,7 +51,7 @@ public:
URLMainThread(nsISupports* aParent, already_AddRefed<nsIURI> aURI);
virtual void
GetHref(nsAString& aHref, ErrorResult& aRv) const override;
GetHref(nsAString& aHref) const override;
virtual void
SetHref(const nsAString& aHref, ErrorResult& aRv) override;
@ -60,60 +60,60 @@ public:
GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const override;
virtual void
GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const override;
GetProtocol(nsAString& aProtocol) const override;
virtual void
SetProtocol(const nsAString& aProtocol, ErrorResult& aRv) override;
virtual void
GetUsername(nsAString& aUsername, ErrorResult& aRv) const override;
GetUsername(nsAString& aUsername) const override;
virtual void
SetUsername(const nsAString& aUsername, ErrorResult& aRv) override;
SetUsername(const nsAString& aUsername) override;
virtual void
GetPassword(nsAString& aPassword, ErrorResult& aRv) const override;
GetPassword(nsAString& aPassword) const override;
virtual void
SetPassword(const nsAString& aPassword, ErrorResult& aRv) override;
SetPassword(const nsAString& aPassword) override;
virtual void
GetHost(nsAString& aHost, ErrorResult& aRv) const override;
GetHost(nsAString& aHost) const override;
virtual void
SetHost(const nsAString& aHost, ErrorResult& aRv) override;
SetHost(const nsAString& aHost) override;
virtual void
GetHostname(nsAString& aHostname, ErrorResult& aRv) const override;
GetHostname(nsAString& aHostname) const override;
virtual void
SetHostname(const nsAString& aHostname, ErrorResult& aRv) override;
SetHostname(const nsAString& aHostname) override;
virtual void
GetPort(nsAString& aPort, ErrorResult& aRv) const override;
GetPort(nsAString& aPort) const override;
virtual void
SetPort(const nsAString& aPort, ErrorResult& aRv) override;
SetPort(const nsAString& aPort) override;
virtual void
GetPathname(nsAString& aPathname, ErrorResult& aRv) const override;
GetPathname(nsAString& aPathname) const override;
virtual void
SetPathname(const nsAString& aPathname, ErrorResult& aRv) override;
SetPathname(const nsAString& aPathname) override;
virtual void
GetSearch(nsAString& aSearch, ErrorResult& aRv) const override;
GetSearch(nsAString& aSearch) const override;
virtual void
GetHash(nsAString& aHost, ErrorResult& aRv) const override;
GetHash(nsAString& aHost) const override;
virtual void
SetHash(const nsAString& aHash, ErrorResult& aRv) override;
SetHash(const nsAString& aHash) override;
virtual void UpdateURLSearchParams() override;
virtual void
SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv) override;
SetSearchInternal(const nsAString& aSearch) override;
nsIURI*
GetURI() const;

View File

@ -12,6 +12,7 @@
#include "mozilla/dom/WorkerScope.h"
#include "mozilla/Unused.h"
#include "nsHostObjectProtocolHandler.h"
#include "nsProxyRelease.h"
#include "nsStandardURL.h"
#include "nsURLHelper.h"
@ -35,7 +36,6 @@ public:
URLMainThread* URL()
{
MOZ_ASSERT(NS_IsMainThread());
return mURL;
}
@ -302,33 +302,17 @@ private:
RefPtr<URLWorker::URLProxy> mURLProxy;
};
// This class is the generic getter for any URL property.
class GetterRunnable : public WorkerMainThreadRunnable
class OriginGetterRunnable : public WorkerMainThreadRunnable
{
public:
enum GetterType {
GetterHref,
GetterOrigin,
GetterProtocol,
GetterUsername,
GetterPassword,
GetterHost,
GetterHostname,
GetterPort,
GetterPathname,
GetterSearch,
GetterHash,
};
GetterRunnable(WorkerPrivate* aWorkerPrivate,
GetterType aType, nsAString& aValue,
URLWorker::URLProxy* aURLProxy)
OriginGetterRunnable(WorkerPrivate* aWorkerPrivate,
nsAString& aValue,
URLWorker::URLProxy* aURLProxy)
: WorkerMainThreadRunnable(aWorkerPrivate,
// We can have telemetry keys for each getter when
// needed.
NS_LITERAL_CSTRING("URL :: getter"))
, mValue(aValue)
, mType(aType)
, mURLProxy(aURLProxy)
{
mWorkerPrivate->AssertIsOnWorkerThread();
@ -339,53 +323,7 @@ public:
{
AssertIsOnMainThread();
ErrorResult rv;
switch (mType) {
case GetterHref:
mURLProxy->URL()->GetHref(mValue, rv);
break;
case GetterOrigin:
mURLProxy->URL()->GetOrigin(mValue, rv);
break;
case GetterProtocol:
mURLProxy->URL()->GetProtocol(mValue, rv);
break;
case GetterUsername:
mURLProxy->URL()->GetUsername(mValue, rv);
break;
case GetterPassword:
mURLProxy->URL()->GetPassword(mValue, rv);
break;
case GetterHost:
mURLProxy->URL()->GetHost(mValue, rv);
break;
case GetterHostname:
mURLProxy->URL()->GetHostname(mValue, rv);
break;
case GetterPort:
mURLProxy->URL()->GetPort(mValue, rv);
break;
case GetterPathname:
mURLProxy->URL()->GetPathname(mValue, rv);
break;
case GetterSearch:
mURLProxy->URL()->GetSearch(mValue, rv);
break;
case GetterHash:
mURLProxy->URL()->GetHash(mValue, rv);
break;
}
mURLProxy->URL()->GetOrigin(mValue, rv);
MOZ_ASSERT(!rv.Failed(), "Main-thread getters do not fail.");
return true;
}
@ -398,25 +336,15 @@ public:
private:
nsAString& mValue;
GetterType mType;
RefPtr<URLWorker::URLProxy> mURLProxy;
};
// This class is the generic setter for any URL property.
class SetterRunnable : public WorkerMainThreadRunnable
{
public:
enum SetterType {
SetterHref,
SetterProtocol,
SetterUsername,
SetterPassword,
SetterHost,
SetterHostname,
SetterPort,
SetterPathname,
SetterSearch,
SetterHash,
};
SetterRunnable(WorkerPrivate* aWorkerPrivate,
@ -449,38 +377,6 @@ public:
case SetterProtocol:
mURLProxy->URL()->SetProtocol(mValue, rv);
break;
case SetterUsername:
mURLProxy->URL()->SetUsername(mValue, rv);
break;
case SetterPassword:
mURLProxy->URL()->SetPassword(mValue, rv);
break;
case SetterHost:
mURLProxy->URL()->SetHost(mValue, rv);
break;
case SetterHostname:
mURLProxy->URL()->SetHostname(mValue, rv);
break;
case SetterPort:
mURLProxy->URL()->SetPort(mValue, rv);
break;
case SetterPathname:
mURLProxy->URL()->SetPathname(mValue, rv);
break;
case SetterSearch:
mURLProxy->URL()->SetSearch(mValue, rv);
break;
case SetterHash:
mURLProxy->URL()->SetHash(mValue, rv);
break;
}
if (NS_WARN_IF(rv.Failed())) {
@ -682,23 +578,20 @@ URLWorker::~URLWorker()
}
void
URLWorker::GetHref(nsAString& aHref, ErrorResult& aRv) const
URLWorker::GetHref(nsAString& aHref) const
{
aHref.Truncate();
if (mStdURL) {
nsAutoCString href;
aRv = mStdURL->GetSpec(href);
if (!aRv.Failed()) {
nsresult rv = mStdURL->GetSpec(href);
if (NS_SUCCEEDED(rv)) {
CopyUTF8toUTF16(href, aHref);
}
return;
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterHref, aHref,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetHref(aHref);
}
void
@ -777,15 +670,14 @@ URLWorker::GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterOrigin, aOrigin,
mURLProxy);
RefPtr<OriginGetterRunnable> runnable =
new OriginGetterRunnable(mWorkerPrivate, aOrigin, mURLProxy);
runnable->Dispatch(aRv);
}
void
URLWorker::GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const
URLWorker::GetProtocol(nsAString& aProtocol) const
{
aProtocol.Truncate();
nsAutoCString protocol;
@ -799,11 +691,7 @@ URLWorker::GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterProtocol, aProtocol,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetProtocol(aProtocol);
}
void
@ -871,142 +759,93 @@ URLWorker::SetProtocol(const nsAString& aProtocol, ErrorResult& aRv)
#define STDURL_SETTER(value, method) \
if (mStdURL) { \
aRv = NS_MutateURI(mStdURL) \
.method(NS_ConvertUTF16toUTF8(value)) \
.Finalize(mStdURL); \
Unused << NS_MutateURI(mStdURL) \
.method(NS_ConvertUTF16toUTF8(value)) \
.Finalize(mStdURL); \
return; \
}
void
URLWorker::GetUsername(nsAString& aUsername, ErrorResult& aRv) const
URLWorker::GetUsername(nsAString& aUsername) const
{
STDURL_GETTER(aUsername, GetUsername);
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterUsername, aUsername,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetUsername(aUsername);
}
void
URLWorker::SetUsername(const nsAString& aUsername, ErrorResult& aRv)
URLWorker::SetUsername(const nsAString& aUsername)
{
STDURL_SETTER(aUsername, SetUsername);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterUsername,
aUsername, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetUsername(aUsername);
}
void
URLWorker::GetPassword(nsAString& aPassword, ErrorResult& aRv) const
URLWorker::GetPassword(nsAString& aPassword) const
{
STDURL_GETTER(aPassword, GetPassword);
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterPassword, aPassword,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetPassword(aPassword);
}
void
URLWorker::SetPassword(const nsAString& aPassword, ErrorResult& aRv)
URLWorker::SetPassword(const nsAString& aPassword)
{
STDURL_SETTER(aPassword, SetPassword);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterPassword,
aPassword, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetPassword(aPassword);
}
void
URLWorker::GetHost(nsAString& aHost, ErrorResult& aRv) const
URLWorker::GetHost(nsAString& aHost) const
{
STDURL_GETTER(aHost, GetHostPort);
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterHost, aHost,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetHost(aHost);
}
void
URLWorker::SetHost(const nsAString& aHost, ErrorResult& aRv)
URLWorker::SetHost(const nsAString& aHost)
{
STDURL_SETTER(aHost, SetHostPort);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterHost,
aHost, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetHost(aHost);
}
void
URLWorker::GetHostname(nsAString& aHostname, ErrorResult& aRv) const
URLWorker::GetHostname(nsAString& aHostname) const
{
aHostname.Truncate();
if (mStdURL) {
aRv = nsContentUtils::GetHostOrIPv6WithBrackets(mStdURL, aHostname);
nsresult rv = nsContentUtils::GetHostOrIPv6WithBrackets(mStdURL, aHostname);
if (NS_FAILED(rv)) {
aHostname.Truncate();
}
return;
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterHostname, aHostname,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetHostname(aHostname);
}
void
URLWorker::SetHostname(const nsAString& aHostname, ErrorResult& aRv)
URLWorker::SetHostname(const nsAString& aHostname)
{
STDURL_SETTER(aHostname, SetHost);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterHostname,
aHostname, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetHostname(aHostname);
}
void
URLWorker::GetPort(nsAString& aPort, ErrorResult& aRv) const
URLWorker::GetPort(nsAString& aPort) const
{
aPort.Truncate();
@ -1022,15 +861,11 @@ URLWorker::GetPort(nsAString& aPort, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterPort, aPort,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetPort(aPort);
}
void
URLWorker::SetPort(const nsAString& aPort, ErrorResult& aRv)
URLWorker::SetPort(const nsAString& aPort)
{
if (mStdURL) {
nsresult rv;
@ -1052,20 +887,11 @@ URLWorker::SetPort(const nsAString& aPort, ErrorResult& aRv)
}
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterPort,
aPort, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetPort(aPort);
}
void
URLWorker::GetPathname(nsAString& aPathname, ErrorResult& aRv) const
URLWorker::GetPathname(nsAString& aPathname) const
{
aPathname.Truncate();
@ -1079,33 +905,20 @@ URLWorker::GetPathname(nsAString& aPathname, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterPathname,
aPathname, mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetPathname(aPathname);
}
void
URLWorker::SetPathname(const nsAString& aPathname, ErrorResult& aRv)
URLWorker::SetPathname(const nsAString& aPathname)
{
STDURL_SETTER(aPathname, SetFilePath);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterPathname,
aPathname, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetPathname(aPathname);
}
void
URLWorker::GetSearch(nsAString& aSearch, ErrorResult& aRv) const
URLWorker::GetSearch(nsAString& aSearch) const
{
aSearch.Truncate();
@ -1122,15 +935,11 @@ URLWorker::GetSearch(nsAString& aSearch, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterSearch, aSearch,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetSearch(aSearch);
}
void
URLWorker::GetHash(nsAString& aHash, ErrorResult& aRv) const
URLWorker::GetHash(nsAString& aHash) const
{
aHash.Truncate();
if (mStdURL) {
@ -1144,33 +953,20 @@ URLWorker::GetHash(nsAString& aHash, ErrorResult& aRv) const
}
MOZ_ASSERT(mURLProxy);
RefPtr<GetterRunnable> runnable =
new GetterRunnable(mWorkerPrivate, GetterRunnable::GetterHash, aHash,
mURLProxy);
runnable->Dispatch(aRv);
mURLProxy->URL()->GetHash(aHash);
}
void
URLWorker::SetHash(const nsAString& aHash, ErrorResult& aRv)
URLWorker::SetHash(const nsAString& aHash)
{
STDURL_SETTER(aHash, SetRef);
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterHash,
aHash, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetHash(aHash);
}
void
URLWorker::SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv)
URLWorker::SetSearchInternal(const nsAString& aSearch)
{
if (mStdURL) {
// URLMainThread ignores failures here.
@ -1181,16 +977,7 @@ URLWorker::SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv)
}
MOZ_ASSERT(mURLProxy);
RefPtr<SetterRunnable> runnable =
new SetterRunnable(mWorkerPrivate, SetterRunnable::SetterSearch,
aSearch, mURLProxy);
runnable->Dispatch(aRv);
if (NS_WARN_IF(aRv.Failed())) {
return;
}
MOZ_ASSERT(!runnable->Failed());
mURLProxy->URL()->SetSearch(aSearch);
}
void
@ -1198,13 +985,7 @@ URLWorker::UpdateURLSearchParams()
{
if (mSearchParams) {
nsAutoString search;
ErrorResult rv;
GetSearch(search, rv);
if (NS_WARN_IF(rv.Failed())) {
rv.SuppressException();
}
GetSearch(search);
mSearchParams->ParseInput(NS_ConvertUTF16toUTF8(Substring(search, 1)));
}
}

View File

@ -53,7 +53,7 @@ public:
ErrorResult& aRv);
virtual void
GetHref(nsAString& aHref, ErrorResult& aRv) const override;
GetHref(nsAString& aHref) const override;
virtual void
SetHref(const nsAString& aHref, ErrorResult& aRv) override;
@ -62,60 +62,60 @@ public:
GetOrigin(nsAString& aOrigin, ErrorResult& aRv) const override;
virtual void
GetProtocol(nsAString& aProtocol, ErrorResult& aRv) const override;
GetProtocol(nsAString& aProtocol) const override;
virtual void
SetProtocol(const nsAString& aProtocol, ErrorResult& aRv) override;
virtual void
GetUsername(nsAString& aUsername, ErrorResult& aRv) const override;
GetUsername(nsAString& aUsername) const override;
virtual void
SetUsername(const nsAString& aUsername, ErrorResult& aRv) override;
SetUsername(const nsAString& aUsername) override;
virtual void
GetPassword(nsAString& aPassword, ErrorResult& aRv) const override;
GetPassword(nsAString& aPassword) const override;
virtual void
SetPassword(const nsAString& aPassword, ErrorResult& aRv) override;
SetPassword(const nsAString& aPassword) override;
virtual void
GetHost(nsAString& aHost, ErrorResult& aRv) const override;
GetHost(nsAString& aHost) const override;
virtual void
SetHost(const nsAString& aHost, ErrorResult& aRv) override;
SetHost(const nsAString& aHost) override;
virtual void
GetHostname(nsAString& aHostname, ErrorResult& aRv) const override;
GetHostname(nsAString& aHostname) const override;
virtual void
SetHostname(const nsAString& aHostname, ErrorResult& aRv) override;
SetHostname(const nsAString& aHostname) override;
virtual void
GetPort(nsAString& aPort, ErrorResult& aRv) const override;
GetPort(nsAString& aPort) const override;
virtual void
SetPort(const nsAString& aPort, ErrorResult& aRv) override;
SetPort(const nsAString& aPort) override;
virtual void
GetPathname(nsAString& aPathname, ErrorResult& aRv) const override;
GetPathname(nsAString& aPathname) const override;
virtual void
SetPathname(const nsAString& aPathname, ErrorResult& aRv) override;
SetPathname(const nsAString& aPathname) override;
virtual void
GetSearch(nsAString& aSearch, ErrorResult& aRv) const override;
GetSearch(nsAString& aSearch) const override;
virtual void
GetHash(nsAString& aHost, ErrorResult& aRv) const override;
GetHash(nsAString& aHost) const override;
virtual void
SetHash(const nsAString& aHash, ErrorResult& aRv) override;
SetHash(const nsAString& aHash) override;
virtual void UpdateURLSearchParams() override;
virtual void
SetSearchInternal(const nsAString& aSearch, ErrorResult& aRv) override;
SetSearchInternal(const nsAString& aSearch) override;
private:
~URLWorker();

View File

@ -19,34 +19,25 @@ interface URL {
// stringifier attribute USVString href;
// Bug 824857 should remove this.
[Throws]
stringifier;
[Throws]
[SetterThrows]
attribute USVString href;
[Throws]
[GetterThrows]
readonly attribute USVString origin;
[Throws]
[SetterThrows]
attribute USVString protocol;
[Throws]
attribute USVString username;
[Throws]
attribute USVString password;
[Throws]
attribute USVString host;
[Throws]
attribute USVString hostname;
[Throws]
attribute USVString port;
[Throws]
attribute USVString pathname;
[Throws]
attribute USVString search;
[SameObject] readonly attribute URLSearchParams searchParams;
[Throws]
[SameObject]
readonly attribute URLSearchParams searchParams;
attribute USVString hash;
[Throws]
USVString toJSON();
};