forked from mirrors/gecko-dev
Bug 1478101 - Split AbortSignal in 2 classes: AbortSignal and AbortSignalImpl, r=bz
This commit is contained in:
parent
34804fb48a
commit
e1a0b51543
14 changed files with 196 additions and 134 deletions
|
|
@ -12,14 +12,63 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
|
// AbortSignalImpl
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
AbortSignalImpl::AbortSignalImpl(bool aAborted)
|
||||||
|
: mAborted(aAborted)
|
||||||
|
{}
|
||||||
|
|
||||||
|
bool
|
||||||
|
AbortSignalImpl::Aborted() const
|
||||||
|
{
|
||||||
|
return mAborted;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbortSignalImpl::Abort()
|
||||||
|
{
|
||||||
|
if (mAborted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mAborted = true;
|
||||||
|
|
||||||
|
// Let's inform the followers.
|
||||||
|
for (AbortFollower* follower : mFollowers) {
|
||||||
|
follower->Abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbortSignalImpl::AddFollower(AbortFollower* aFollower)
|
||||||
|
{
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT(aFollower);
|
||||||
|
if (!mFollowers.Contains(aFollower)) {
|
||||||
|
mFollowers.AppendElement(aFollower);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
AbortSignalImpl::RemoveFollower(AbortFollower* aFollower)
|
||||||
|
{
|
||||||
|
MOZ_DIAGNOSTIC_ASSERT(aFollower);
|
||||||
|
mFollowers.RemoveElement(aFollower);
|
||||||
|
}
|
||||||
|
|
||||||
|
// AbortSignal
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_CLASS(AbortSignal)
|
NS_IMPL_CYCLE_COLLECTION_CLASS(AbortSignal)
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(AbortSignal,
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(AbortSignal,
|
||||||
DOMEventTargetHelper)
|
DOMEventTargetHelper)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFollowingSignal)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(AbortSignal,
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(AbortSignal,
|
||||||
DOMEventTargetHelper)
|
DOMEventTargetHelper)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFollowingSignal)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AbortSignal)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AbortSignal)
|
||||||
|
|
@ -31,11 +80,7 @@ NS_IMPL_RELEASE_INHERITED(AbortSignal, DOMEventTargetHelper)
|
||||||
AbortSignal::AbortSignal(nsIGlobalObject* aGlobalObject,
|
AbortSignal::AbortSignal(nsIGlobalObject* aGlobalObject,
|
||||||
bool aAborted)
|
bool aAborted)
|
||||||
: DOMEventTargetHelper(aGlobalObject)
|
: DOMEventTargetHelper(aGlobalObject)
|
||||||
, mAborted(aAborted)
|
, AbortSignalImpl(aAborted)
|
||||||
{}
|
|
||||||
|
|
||||||
AbortSignal::AbortSignal(bool aAborted)
|
|
||||||
: mAborted(aAborted)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
JSObject*
|
JSObject*
|
||||||
|
|
@ -44,22 +89,10 @@ AbortSignal::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||||
return AbortSignal_Binding::Wrap(aCx, this, aGivenProto);
|
return AbortSignal_Binding::Wrap(aCx, this, aGivenProto);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
AbortSignal::Aborted() const
|
|
||||||
{
|
|
||||||
return mAborted;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
AbortSignal::Abort()
|
AbortSignal::Abort()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(!mAborted);
|
AbortSignalImpl::Abort();
|
||||||
mAborted = true;
|
|
||||||
|
|
||||||
// Let's inform the followers.
|
|
||||||
for (uint32_t i = 0; i < mFollowers.Length(); ++i) {
|
|
||||||
mFollowers[i]->Abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
EventInit init;
|
EventInit init;
|
||||||
init.mBubbles = false;
|
init.mBubbles = false;
|
||||||
|
|
@ -72,22 +105,6 @@ AbortSignal::Abort()
|
||||||
DispatchEvent(*event);
|
DispatchEvent(*event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
AbortSignal::AddFollower(AbortFollower* aFollower)
|
|
||||||
{
|
|
||||||
MOZ_DIAGNOSTIC_ASSERT(aFollower);
|
|
||||||
if (!mFollowers.Contains(aFollower)) {
|
|
||||||
mFollowers.AppendElement(aFollower);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
AbortSignal::RemoveFollower(AbortFollower* aFollower)
|
|
||||||
{
|
|
||||||
MOZ_DIAGNOSTIC_ASSERT(aFollower);
|
|
||||||
mFollowers.RemoveElement(aFollower);
|
|
||||||
}
|
|
||||||
|
|
||||||
// AbortFollower
|
// AbortFollower
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -97,7 +114,7 @@ AbortFollower::~AbortFollower()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AbortFollower::Follow(AbortSignal* aSignal)
|
AbortFollower::Follow(AbortSignalImpl* aSignal)
|
||||||
{
|
{
|
||||||
MOZ_DIAGNOSTIC_ASSERT(aSignal);
|
MOZ_DIAGNOSTIC_ASSERT(aSignal);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,15 +13,17 @@ namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
class AbortSignal;
|
class AbortSignal;
|
||||||
|
class AbortSignalImpl;
|
||||||
|
|
||||||
// This class must be implemented by objects who want to follow a AbortSignal.
|
// This class must be implemented by objects who want to follow a
|
||||||
|
// AbortSignalImpl.
|
||||||
class AbortFollower
|
class AbortFollower
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Abort() = 0;
|
virtual void Abort() = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
Follow(AbortSignal* aSignal);
|
Follow(AbortSignalImpl* aSignal);
|
||||||
|
|
||||||
void
|
void
|
||||||
Unfollow();
|
Unfollow();
|
||||||
|
|
@ -32,21 +34,16 @@ public:
|
||||||
protected:
|
protected:
|
||||||
virtual ~AbortFollower();
|
virtual ~AbortFollower();
|
||||||
|
|
||||||
RefPtr<AbortSignal> mFollowingSignal;
|
// Subclasses of AbortFollower must Traverse/Unlink this member.
|
||||||
|
RefPtr<AbortSignalImpl> mFollowingSignal;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AbortSignal final : public DOMEventTargetHelper
|
// Any subclass of this class must Traverse/Unlink mFollowingSignal.
|
||||||
, public AbortFollower
|
class AbortSignalImpl : public AbortFollower
|
||||||
|
, public nsISupports
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
explicit AbortSignalImpl(bool aAborted);
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AbortSignal, DOMEventTargetHelper)
|
|
||||||
|
|
||||||
AbortSignal(nsIGlobalObject* aGlobalObject, bool aAborted);
|
|
||||||
explicit AbortSignal(bool aAborted);
|
|
||||||
|
|
||||||
JSObject*
|
|
||||||
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Aborted() const;
|
Aborted() const;
|
||||||
|
|
@ -54,23 +51,43 @@ public:
|
||||||
void
|
void
|
||||||
Abort() override;
|
Abort() override;
|
||||||
|
|
||||||
IMPL_EVENT_HANDLER(abort);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
AddFollower(AbortFollower* aFollower);
|
AddFollower(AbortFollower* aFollower);
|
||||||
|
|
||||||
void
|
void
|
||||||
RemoveFollower(AbortFollower* aFollower);
|
RemoveFollower(AbortFollower* aFollower);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
~AbortSignal() = default;
|
virtual ~AbortSignalImpl() = default;
|
||||||
|
|
||||||
|
private:
|
||||||
// Raw pointers. AbortFollower unregisters itself in the DTOR.
|
// Raw pointers. AbortFollower unregisters itself in the DTOR.
|
||||||
nsTArray<AbortFollower*> mFollowers;
|
nsTArray<AbortFollower*> mFollowers;
|
||||||
|
|
||||||
bool mAborted;
|
bool mAborted;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AbortSignal final : public DOMEventTargetHelper
|
||||||
|
, public AbortSignalImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(AbortSignal, DOMEventTargetHelper)
|
||||||
|
|
||||||
|
AbortSignal(nsIGlobalObject* aGlobalObject, bool aAborted);
|
||||||
|
|
||||||
|
JSObject*
|
||||||
|
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
||||||
|
|
||||||
|
IMPL_EVENT_HANDLER(abort);
|
||||||
|
|
||||||
|
void
|
||||||
|
Abort() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
~AbortSignal() = default;
|
||||||
|
};
|
||||||
|
|
||||||
} // dom namespace
|
} // dom namespace
|
||||||
} // mozilla namespace
|
} // mozilla namespace
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,21 +74,44 @@ AbortStream(JSContext* aCx, JS::Handle<JSObject*> aStream)
|
||||||
|
|
||||||
} // anonymous
|
} // anonymous
|
||||||
|
|
||||||
// This class helps the proxying of AbortSignal changes cross threads.
|
class AbortSignalMainThread final : public AbortSignalImpl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||||
|
NS_DECL_CYCLE_COLLECTION_CLASS(AbortSignalMainThread)
|
||||||
|
|
||||||
|
explicit AbortSignalMainThread(bool aAborted)
|
||||||
|
: AbortSignalImpl(aAborted)
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
~AbortSignalMainThread() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION(AbortSignalMainThread, mFollowingSignal)
|
||||||
|
|
||||||
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AbortSignalMainThread)
|
||||||
|
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||||
|
NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTING_ADDREF(AbortSignalMainThread)
|
||||||
|
NS_IMPL_CYCLE_COLLECTING_RELEASE(AbortSignalMainThread)
|
||||||
|
|
||||||
|
// This class helps the proxying of AbortSignalImpl changes cross threads.
|
||||||
class AbortSignalProxy final : public AbortFollower
|
class AbortSignalProxy final : public AbortFollower
|
||||||
{
|
{
|
||||||
// This is created and released on the main-thread.
|
// This is created and released on the main-thread.
|
||||||
RefPtr<AbortSignal> mSignalMainThread;
|
RefPtr<AbortSignalImpl> mSignalImplMainThread;
|
||||||
|
|
||||||
// The main-thread event target for runnable dispatching.
|
// The main-thread event target for runnable dispatching.
|
||||||
nsCOMPtr<nsIEventTarget> mMainThreadEventTarget;
|
nsCOMPtr<nsIEventTarget> mMainThreadEventTarget;
|
||||||
|
|
||||||
// This value is used only for the creation of AbortSignal on the
|
// This value is used only for the creation of AbortSignalImpl on the
|
||||||
// main-thread. They are not updated.
|
// main-thread. They are not updated.
|
||||||
const bool mAborted;
|
const bool mAborted;
|
||||||
|
|
||||||
// This runnable propagates changes from the AbortSignal on workers to the
|
// This runnable propagates changes from the AbortSignalImpl on workers to the
|
||||||
// AbortSignal on main-thread.
|
// AbortSignalImpl on main-thread.
|
||||||
class AbortSignalProxyRunnable final : public Runnable
|
class AbortSignalProxyRunnable final : public Runnable
|
||||||
{
|
{
|
||||||
RefPtr<AbortSignalProxy> mProxy;
|
RefPtr<AbortSignalProxy> mProxy;
|
||||||
|
|
@ -103,8 +126,9 @@ class AbortSignalProxy final : public AbortFollower
|
||||||
Run() override
|
Run() override
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
AbortSignal* signal = mProxy->GetOrCreateSignalForMainThread();
|
AbortSignalImpl* signalImpl =
|
||||||
signal->Abort();
|
mProxy->GetOrCreateSignalImplForMainThread();
|
||||||
|
signalImpl->Abort();
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -112,12 +136,13 @@ class AbortSignalProxy final : public AbortFollower
|
||||||
public:
|
public:
|
||||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AbortSignalProxy)
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(AbortSignalProxy)
|
||||||
|
|
||||||
AbortSignalProxy(AbortSignal* aSignal, nsIEventTarget* aMainThreadEventTarget)
|
AbortSignalProxy(AbortSignalImpl* aSignalImpl,
|
||||||
|
nsIEventTarget* aMainThreadEventTarget)
|
||||||
: mMainThreadEventTarget(aMainThreadEventTarget)
|
: mMainThreadEventTarget(aMainThreadEventTarget)
|
||||||
, mAborted(aSignal->Aborted())
|
, mAborted(aSignalImpl->Aborted())
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(mMainThreadEventTarget);
|
MOZ_ASSERT(mMainThreadEventTarget);
|
||||||
Follow(aSignal);
|
Follow(aSignalImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -128,18 +153,18 @@ public:
|
||||||
mMainThreadEventTarget->Dispatch(runnable.forget(), NS_DISPATCH_NORMAL);
|
mMainThreadEventTarget->Dispatch(runnable.forget(), NS_DISPATCH_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetOrCreateSignalForMainThread()
|
GetOrCreateSignalImplForMainThread()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
if (!mSignalMainThread) {
|
if (!mSignalImplMainThread) {
|
||||||
mSignalMainThread = new AbortSignal(mAborted);
|
mSignalImplMainThread = new AbortSignalMainThread(mAborted);
|
||||||
}
|
}
|
||||||
return mSignalMainThread;
|
return mSignalImplMainThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetSignalForTargetThread()
|
GetSignalImplForTargetThread()
|
||||||
{
|
{
|
||||||
return mFollowingSignal;
|
return mFollowingSignal;
|
||||||
}
|
}
|
||||||
|
|
@ -154,8 +179,8 @@ private:
|
||||||
~AbortSignalProxy()
|
~AbortSignalProxy()
|
||||||
{
|
{
|
||||||
NS_ProxyRelease(
|
NS_ProxyRelease(
|
||||||
"AbortSignalProxy::mSignalMainThread",
|
"AbortSignalProxy::mSignalImplMainThread",
|
||||||
mMainThreadEventTarget, mSignalMainThread.forget());
|
mMainThreadEventTarget, mSignalImplMainThread.forget());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -173,7 +198,7 @@ public:
|
||||||
// Returns null if worker is shutting down.
|
// Returns null if worker is shutting down.
|
||||||
static already_AddRefed<WorkerFetchResolver>
|
static already_AddRefed<WorkerFetchResolver>
|
||||||
Create(WorkerPrivate* aWorkerPrivate, Promise* aPromise,
|
Create(WorkerPrivate* aWorkerPrivate, Promise* aPromise,
|
||||||
AbortSignal* aSignal, FetchObserver* aObserver)
|
AbortSignalImpl* aSignalImpl, FetchObserver* aObserver)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aWorkerPrivate);
|
MOZ_ASSERT(aWorkerPrivate);
|
||||||
aWorkerPrivate->AssertIsOnWorkerThread();
|
aWorkerPrivate->AssertIsOnWorkerThread();
|
||||||
|
|
@ -184,9 +209,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<AbortSignalProxy> signalProxy;
|
RefPtr<AbortSignalProxy> signalProxy;
|
||||||
if (aSignal) {
|
if (aSignalImpl) {
|
||||||
signalProxy =
|
signalProxy =
|
||||||
new AbortSignalProxy(aSignal, aWorkerPrivate->MainThreadEventTarget());
|
new AbortSignalProxy(aSignalImpl,
|
||||||
|
aWorkerPrivate->MainThreadEventTarget());
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<WorkerFetchResolver> r =
|
RefPtr<WorkerFetchResolver> r =
|
||||||
|
|
@ -205,7 +231,7 @@ public:
|
||||||
return r.forget();
|
return r.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetAbortSignalForMainThread()
|
GetAbortSignalForMainThread()
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
MOZ_ASSERT(NS_IsMainThread());
|
||||||
|
|
@ -214,10 +240,10 @@ public:
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mSignalProxy->GetOrCreateSignalForMainThread();
|
return mSignalProxy->GetOrCreateSignalImplForMainThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetAbortSignalForTargetThread()
|
GetAbortSignalForTargetThread()
|
||||||
{
|
{
|
||||||
mPromiseProxy->GetWorkerPrivate()->AssertIsOnWorkerThread();
|
mPromiseProxy->GetWorkerPrivate()->AssertIsOnWorkerThread();
|
||||||
|
|
@ -226,7 +252,7 @@ public:
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mSignalProxy->GetSignalForTargetThread();
|
return mSignalProxy->GetSignalImplForTargetThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
PromiseWorkerProxy*
|
PromiseWorkerProxy*
|
||||||
|
|
@ -307,7 +333,7 @@ class MainThreadFetchResolver final : public FetchDriverObserver
|
||||||
RefPtr<Promise> mPromise;
|
RefPtr<Promise> mPromise;
|
||||||
RefPtr<Response> mResponse;
|
RefPtr<Response> mResponse;
|
||||||
RefPtr<FetchObserver> mFetchObserver;
|
RefPtr<FetchObserver> mFetchObserver;
|
||||||
RefPtr<AbortSignal> mSignal;
|
RefPtr<AbortSignalImpl> mSignalImpl;
|
||||||
const bool mMozErrors;
|
const bool mMozErrors;
|
||||||
|
|
||||||
nsCOMPtr<nsILoadGroup> mLoadGroup;
|
nsCOMPtr<nsILoadGroup> mLoadGroup;
|
||||||
|
|
@ -315,10 +341,10 @@ class MainThreadFetchResolver final : public FetchDriverObserver
|
||||||
NS_DECL_OWNINGTHREAD
|
NS_DECL_OWNINGTHREAD
|
||||||
public:
|
public:
|
||||||
MainThreadFetchResolver(Promise* aPromise, FetchObserver* aObserver,
|
MainThreadFetchResolver(Promise* aPromise, FetchObserver* aObserver,
|
||||||
AbortSignal* aSignal, bool aMozErrors)
|
AbortSignalImpl* aSignalImpl, bool aMozErrors)
|
||||||
: mPromise(aPromise)
|
: mPromise(aPromise)
|
||||||
, mFetchObserver(aObserver)
|
, mFetchObserver(aObserver)
|
||||||
, mSignal(aSignal)
|
, mSignalImpl(aSignalImpl)
|
||||||
, mMozErrors(aMozErrors)
|
, mMozErrors(aMozErrors)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
@ -415,11 +441,12 @@ public:
|
||||||
fetch->SetController(mController);
|
fetch->SetController(mController);
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<AbortSignal> signal = mResolver->GetAbortSignalForMainThread();
|
RefPtr<AbortSignalImpl> signalImpl =
|
||||||
|
mResolver->GetAbortSignalForMainThread();
|
||||||
|
|
||||||
// ...but release it before calling Fetch, because mResolver's callback can
|
// ...but release it before calling Fetch, because mResolver's callback can
|
||||||
// be called synchronously and they want the mutex, too.
|
// be called synchronously and they want the mutex, too.
|
||||||
return fetch->Fetch(signal, mResolver);
|
return fetch->Fetch(signalImpl, mResolver);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -456,9 +483,9 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<InternalRequest> r = request->GetInternalRequest();
|
RefPtr<InternalRequest> r = request->GetInternalRequest();
|
||||||
RefPtr<AbortSignal> signal = request->GetSignal();
|
RefPtr<AbortSignalImpl> signalImpl = request->GetSignalImpl();
|
||||||
|
|
||||||
if (signal && signal->Aborted()) {
|
if (signalImpl && signalImpl->Aborted()) {
|
||||||
// Already aborted signal rejects immediately.
|
// Already aborted signal rejects immediately.
|
||||||
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
@ -466,7 +493,7 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
|
||||||
|
|
||||||
RefPtr<FetchObserver> observer;
|
RefPtr<FetchObserver> observer;
|
||||||
if (aInit.mObserve.WasPassed()) {
|
if (aInit.mObserve.WasPassed()) {
|
||||||
observer = new FetchObserver(aGlobal, signal);
|
observer = new FetchObserver(aGlobal, signalImpl);
|
||||||
aInit.mObserve.Value().HandleEvent(*observer);
|
aInit.mObserve.Value().HandleEvent(*observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -505,7 +532,8 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
|
||||||
Telemetry::Accumulate(Telemetry::FETCH_IS_MAINTHREAD, 1);
|
Telemetry::Accumulate(Telemetry::FETCH_IS_MAINTHREAD, 1);
|
||||||
|
|
||||||
RefPtr<MainThreadFetchResolver> resolver =
|
RefPtr<MainThreadFetchResolver> resolver =
|
||||||
new MainThreadFetchResolver(p, observer, signal, request->MozErrors());
|
new MainThreadFetchResolver(p, observer, signalImpl,
|
||||||
|
request->MozErrors());
|
||||||
RefPtr<FetchDriver> fetch =
|
RefPtr<FetchDriver> fetch =
|
||||||
new FetchDriver(r, principal, loadGroup,
|
new FetchDriver(r, principal, loadGroup,
|
||||||
aGlobal->EventTargetFor(TaskCategory::Other),
|
aGlobal->EventTargetFor(TaskCategory::Other),
|
||||||
|
|
@ -513,7 +541,7 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
|
||||||
isTrackingFetch);
|
isTrackingFetch);
|
||||||
fetch->SetDocument(doc);
|
fetch->SetDocument(doc);
|
||||||
resolver->SetLoadGroup(loadGroup);
|
resolver->SetLoadGroup(loadGroup);
|
||||||
aRv = fetch->Fetch(signal, resolver);
|
aRv = fetch->Fetch(signalImpl, resolver);
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
if (NS_WARN_IF(aRv.Failed())) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -528,7 +556,7 @@ FetchRequest(nsIGlobalObject* aGlobal, const RequestOrUSVString& aInput,
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<WorkerFetchResolver> resolver =
|
RefPtr<WorkerFetchResolver> resolver =
|
||||||
WorkerFetchResolver::Create(worker, p, signal, observer);
|
WorkerFetchResolver::Create(worker, p, signalImpl, observer);
|
||||||
if (!resolver) {
|
if (!resolver) {
|
||||||
NS_WARNING("Could not keep the worker alive.");
|
NS_WARNING("Could not keep the worker alive.");
|
||||||
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
||||||
|
|
@ -562,7 +590,7 @@ MainThreadFetchResolver::OnResponseAvailableInternal(InternalResponse* aResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIGlobalObject> go = mPromise->GetParentObject();
|
nsCOMPtr<nsIGlobalObject> go = mPromise->GetParentObject();
|
||||||
mResponse = new Response(go, aResponse, mSignal);
|
mResponse = new Response(go, aResponse, mSignalImpl);
|
||||||
mPromise->MaybeResolve(mResponse);
|
mPromise->MaybeResolve(mResponse);
|
||||||
} else {
|
} else {
|
||||||
if (mFetchObserver) {
|
if (mFetchObserver) {
|
||||||
|
|
@ -1150,8 +1178,8 @@ already_AddRefed<Promise>
|
||||||
FetchBody<Derived>::ConsumeBody(JSContext* aCx, FetchConsumeType aType,
|
FetchBody<Derived>::ConsumeBody(JSContext* aCx, FetchConsumeType aType,
|
||||||
ErrorResult& aRv)
|
ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
RefPtr<AbortSignal> signal = DerivedClass()->GetSignal();
|
RefPtr<AbortSignalImpl> signalImpl = DerivedClass()->GetSignalImpl();
|
||||||
if (signal && signal->Aborted()) {
|
if (signalImpl && signalImpl->Aborted()) {
|
||||||
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
aRv.Throw(NS_ERROR_DOM_ABORT_ERR);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -1170,7 +1198,7 @@ FetchBody<Derived>::ConsumeBody(JSContext* aCx, FetchConsumeType aType,
|
||||||
|
|
||||||
RefPtr<Promise> promise =
|
RefPtr<Promise> promise =
|
||||||
FetchBodyConsumer<Derived>::Create(global, mMainThreadEventTarget, this,
|
FetchBodyConsumer<Derived>::Create(global, mMainThreadEventTarget, this,
|
||||||
signal, aType, aRv);
|
signalImpl, aType, aRv);
|
||||||
if (NS_WARN_IF(aRv.Failed())) {
|
if (NS_WARN_IF(aRv.Failed())) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
@ -1224,17 +1252,17 @@ FetchBody<Derived>::SetReadableStreamBody(JSContext* aCx, JSObject* aBody)
|
||||||
MOZ_ASSERT(aBody);
|
MOZ_ASSERT(aBody);
|
||||||
mReadableStreamBody = aBody;
|
mReadableStreamBody = aBody;
|
||||||
|
|
||||||
RefPtr<AbortSignal> signal = DerivedClass()->GetSignal();
|
RefPtr<AbortSignalImpl> signalImpl = DerivedClass()->GetSignalImpl();
|
||||||
if (!signal) {
|
if (!signalImpl) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool aborted = signal->Aborted();
|
bool aborted = signalImpl->Aborted();
|
||||||
if (aborted) {
|
if (aborted) {
|
||||||
JS::Rooted<JSObject*> body(aCx, mReadableStreamBody);
|
JS::Rooted<JSObject*> body(aCx, mReadableStreamBody);
|
||||||
AbortStream(aCx, body);
|
AbortStream(aCx, body);
|
||||||
} else if (!IsFollowing()) {
|
} else if (!IsFollowing()) {
|
||||||
Follow(signal);
|
Follow(signalImpl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1282,12 +1310,12 @@ FetchBody<Derived>::GetBody(JSContext* aCx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<AbortSignal> signal = DerivedClass()->GetSignal();
|
RefPtr<AbortSignalImpl> signalImpl = DerivedClass()->GetSignalImpl();
|
||||||
if (signal) {
|
if (signalImpl) {
|
||||||
if (signal->Aborted()) {
|
if (signalImpl->Aborted()) {
|
||||||
AbortStream(aCx, body);
|
AbortStream(aCx, body);
|
||||||
} else if (!IsFollowing()) {
|
} else if (!IsFollowing()) {
|
||||||
Follow(signal);
|
Follow(signalImpl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -249,8 +249,8 @@ public:
|
||||||
mBodyUsed = true;
|
mBodyUsed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual AbortSignal*
|
virtual AbortSignalImpl*
|
||||||
GetSignal() const = 0;
|
GetSignalImpl() const = 0;
|
||||||
|
|
||||||
// AbortFollower
|
// AbortFollower
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -338,7 +338,7 @@ template <class Derived>
|
||||||
FetchBodyConsumer<Derived>::Create(nsIGlobalObject* aGlobal,
|
FetchBodyConsumer<Derived>::Create(nsIGlobalObject* aGlobal,
|
||||||
nsIEventTarget* aMainThreadEventTarget,
|
nsIEventTarget* aMainThreadEventTarget,
|
||||||
FetchBody<Derived>* aBody,
|
FetchBody<Derived>* aBody,
|
||||||
AbortSignal* aSignal,
|
AbortSignalImpl* aSignalImpl,
|
||||||
FetchConsumeType aType,
|
FetchConsumeType aType,
|
||||||
ErrorResult& aRv)
|
ErrorResult& aRv)
|
||||||
{
|
{
|
||||||
|
|
@ -406,8 +406,8 @@ FetchBodyConsumer<Derived>::Create(nsIGlobalObject* aGlobal,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aSignal) {
|
if (aSignalImpl) {
|
||||||
consumer->Follow(aSignal);
|
consumer->Follow(aSignalImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
return promise.forget();
|
return promise.forget();
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public:
|
||||||
Create(nsIGlobalObject* aGlobal,
|
Create(nsIGlobalObject* aGlobal,
|
||||||
nsIEventTarget* aMainThreadEventTarget,
|
nsIEventTarget* aMainThreadEventTarget,
|
||||||
FetchBody<Derived>* aBody,
|
FetchBody<Derived>* aBody,
|
||||||
AbortSignal* aSignal,
|
AbortSignalImpl* aSignalImpl,
|
||||||
FetchConsumeType aType,
|
FetchConsumeType aType,
|
||||||
ErrorResult& aRv);
|
ErrorResult& aRv);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@ FetchDriver::~FetchDriver()
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
FetchDriver::Fetch(AbortSignal* aSignal, FetchDriverObserver* aObserver)
|
FetchDriver::Fetch(AbortSignalImpl* aSignalImpl, FetchDriverObserver* aObserver)
|
||||||
{
|
{
|
||||||
AssertIsOnMainThread();
|
AssertIsOnMainThread();
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
@ -391,13 +391,13 @@ FetchDriver::Fetch(AbortSignal* aSignal, FetchDriverObserver* aObserver)
|
||||||
|
|
||||||
// If the signal is aborted, it's time to inform the observer and terminate
|
// If the signal is aborted, it's time to inform the observer and terminate
|
||||||
// the operation.
|
// the operation.
|
||||||
if (aSignal) {
|
if (aSignalImpl) {
|
||||||
if (aSignal->Aborted()) {
|
if (aSignalImpl->Aborted()) {
|
||||||
Abort();
|
Abort();
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
Follow(aSignal);
|
Follow(aSignalImpl);
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = HttpFetch(mRequest->GetPreferredAlternativeDataType());
|
rv = HttpFetch(mRequest->GetPreferredAlternativeDataType());
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ public:
|
||||||
PerformanceStorage* aPerformanceStorage,
|
PerformanceStorage* aPerformanceStorage,
|
||||||
bool aIsTrackingFetch);
|
bool aIsTrackingFetch);
|
||||||
|
|
||||||
nsresult Fetch(AbortSignal* aSignal,
|
nsresult Fetch(AbortSignalImpl* aSignalImpl,
|
||||||
FetchDriverObserver* aObserver);
|
FetchDriverObserver* aObserver);
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,12 @@ NS_IMPL_ADDREF_INHERITED(FetchObserver, DOMEventTargetHelper)
|
||||||
NS_IMPL_RELEASE_INHERITED(FetchObserver, DOMEventTargetHelper)
|
NS_IMPL_RELEASE_INHERITED(FetchObserver, DOMEventTargetHelper)
|
||||||
|
|
||||||
FetchObserver::FetchObserver(nsIGlobalObject* aGlobal,
|
FetchObserver::FetchObserver(nsIGlobalObject* aGlobal,
|
||||||
AbortSignal* aSignal)
|
AbortSignalImpl* aSignalImpl)
|
||||||
: DOMEventTargetHelper(aGlobal)
|
: DOMEventTargetHelper(aGlobal)
|
||||||
, mState(FetchState::Requesting)
|
, mState(FetchState::Requesting)
|
||||||
{
|
{
|
||||||
if (aSignal) {
|
if (aSignalImpl) {
|
||||||
Follow(aSignal);
|
Follow(aSignalImpl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public:
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(FetchObserver, DOMEventTargetHelper)
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(FetchObserver, DOMEventTargetHelper)
|
||||||
|
|
||||||
FetchObserver(nsIGlobalObject* aGlobal, AbortSignal* aSignal);
|
FetchObserver(nsIGlobalObject* aGlobal, AbortSignalImpl* aSignalImpl);
|
||||||
|
|
||||||
JSObject*
|
JSObject*
|
||||||
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ Request::Request(nsIGlobalObject* aOwner, InternalRequest* aRequest,
|
||||||
if (aSignal) {
|
if (aSignal) {
|
||||||
// If we don't have a signal as argument, we will create it when required by
|
// If we don't have a signal as argument, we will create it when required by
|
||||||
// content, otherwise the Request's signal must follow what has been passed.
|
// content, otherwise the Request's signal must follow what has been passed.
|
||||||
mSignal = new AbortSignal(aSignal->Aborted());
|
mSignal = new AbortSignal(aOwner, aSignal->Aborted());
|
||||||
if (!mSignal->Aborted()) {
|
if (!mSignal->Aborted()) {
|
||||||
mSignal->Follow(aSignal);
|
mSignal->Follow(aSignal);
|
||||||
}
|
}
|
||||||
|
|
@ -626,14 +626,14 @@ AbortSignal*
|
||||||
Request::GetOrCreateSignal()
|
Request::GetOrCreateSignal()
|
||||||
{
|
{
|
||||||
if (!mSignal) {
|
if (!mSignal) {
|
||||||
mSignal = new AbortSignal(false);
|
mSignal = new AbortSignal(mOwner, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mSignal;
|
return mSignal;
|
||||||
}
|
}
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
Request::GetSignal() const
|
Request::GetSignalImpl() const
|
||||||
{
|
{
|
||||||
return mSignal;
|
return mSignal;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,9 +167,9 @@ public:
|
||||||
AbortSignal*
|
AbortSignal*
|
||||||
GetOrCreateSignal();
|
GetOrCreateSignal();
|
||||||
|
|
||||||
// This can return a null AbortSignal.
|
// This can return a null AbortSignalImpl.
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetSignal() const override;
|
GetSignalImpl() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
~Request();
|
~Request();
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(Response)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Response)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Response)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mOwner)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(mOwner)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mHeaders)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(mHeaders)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mSignal)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(mSignalImpl)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFetchStreamReader)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFetchStreamReader)
|
||||||
|
|
||||||
tmp->mReadableStreamBody = nullptr;
|
tmp->mReadableStreamBody = nullptr;
|
||||||
|
|
@ -49,7 +49,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Response)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Response)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwner)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwner)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mHeaders)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mHeaders)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSignal)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSignalImpl)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFetchStreamReader)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFetchStreamReader)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
|
|
@ -66,10 +66,10 @@ NS_INTERFACE_MAP_END
|
||||||
|
|
||||||
Response::Response(nsIGlobalObject* aGlobal,
|
Response::Response(nsIGlobalObject* aGlobal,
|
||||||
InternalResponse* aInternalResponse,
|
InternalResponse* aInternalResponse,
|
||||||
AbortSignal* aSignal)
|
AbortSignalImpl* aSignalImpl)
|
||||||
: FetchBody<Response>(aGlobal)
|
: FetchBody<Response>(aGlobal)
|
||||||
, mInternalResponse(aInternalResponse)
|
, mInternalResponse(aInternalResponse)
|
||||||
, mSignal(aSignal)
|
, mSignalImpl(aSignalImpl)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aInternalResponse->Headers()->Guard() == HeadersGuardEnum::Immutable ||
|
MOZ_ASSERT(aInternalResponse->Headers()->Guard() == HeadersGuardEnum::Immutable ||
|
||||||
aInternalResponse->Headers()->Guard() == HeadersGuardEnum::Response);
|
aInternalResponse->Headers()->Guard() == HeadersGuardEnum::Response);
|
||||||
|
|
@ -344,7 +344,7 @@ Response::Clone(JSContext* aCx, ErrorResult& aRv)
|
||||||
? InternalResponse::eDontCloneInputStream
|
? InternalResponse::eDontCloneInputStream
|
||||||
: InternalResponse::eCloneInputStream);
|
: InternalResponse::eCloneInputStream);
|
||||||
|
|
||||||
RefPtr<Response> response = new Response(mOwner, ir, mSignal);
|
RefPtr<Response> response = new Response(mOwner, ir, GetSignalImpl());
|
||||||
|
|
||||||
if (body) {
|
if (body) {
|
||||||
// Maybe we have a body, but we receive null from MaybeTeeReadableStreamBody
|
// Maybe we have a body, but we receive null from MaybeTeeReadableStreamBody
|
||||||
|
|
@ -387,7 +387,7 @@ Response::CloneUnfiltered(JSContext* aCx, ErrorResult& aRv)
|
||||||
: InternalResponse::eCloneInputStream);
|
: InternalResponse::eCloneInputStream);
|
||||||
|
|
||||||
RefPtr<InternalResponse> ir = clone->Unfiltered();
|
RefPtr<InternalResponse> ir = clone->Unfiltered();
|
||||||
RefPtr<Response> ref = new Response(mOwner, ir, mSignal);
|
RefPtr<Response> ref = new Response(mOwner, ir, GetSignalImpl());
|
||||||
|
|
||||||
if (body) {
|
if (body) {
|
||||||
// Maybe we have a body, but we receive null from MaybeTeeReadableStreamBody
|
// Maybe we have a body, but we receive null from MaybeTeeReadableStreamBody
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ class Response final : public nsISupports
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Response(nsIGlobalObject* aGlobal, InternalResponse* aInternalResponse,
|
Response(nsIGlobalObject* aGlobal, InternalResponse* aInternalResponse,
|
||||||
AbortSignal* aSignal);
|
AbortSignalImpl* aSignalImpl);
|
||||||
|
|
||||||
Response(const Response& aOther) = delete;
|
Response(const Response& aOther) = delete;
|
||||||
|
|
||||||
|
|
@ -140,10 +140,10 @@ public:
|
||||||
already_AddRefed<InternalResponse>
|
already_AddRefed<InternalResponse>
|
||||||
GetInternalResponse() const;
|
GetInternalResponse() const;
|
||||||
|
|
||||||
AbortSignal*
|
AbortSignalImpl*
|
||||||
GetSignal() const override
|
GetSignalImpl() const override
|
||||||
{
|
{
|
||||||
return mSignal;
|
return mSignalImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -152,7 +152,7 @@ private:
|
||||||
RefPtr<InternalResponse> mInternalResponse;
|
RefPtr<InternalResponse> mInternalResponse;
|
||||||
// Lazily created
|
// Lazily created
|
||||||
RefPtr<Headers> mHeaders;
|
RefPtr<Headers> mHeaders;
|
||||||
RefPtr<AbortSignal> mSignal;
|
RefPtr<AbortSignalImpl> mSignalImpl;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dom
|
} // namespace dom
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue