зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1813011 - Part 3: Remove BodyStream::mState r=smaug
1. eInitializing is only used to call MarkAsRead, but it can just be called unconditionally since it's just a boolean setter. 2. eClosed is aliased to `!mStreamHolder`, since it becomes null when being closed. Differential Revision: https://phabricator.services.mozilla.com/D169484
This commit is contained in:
Родитель
395a9e1fec
Коммит
8eb1577a42
|
@ -191,16 +191,12 @@ already_AddRefed<Promise> BodyStream::PullCallback(
|
|||
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(mState == eInitializing || mState == eInitialized);
|
||||
MOZ_DIAGNOSTIC_ASSERT(!IsClosed());
|
||||
MOZ_ASSERT(!mPullPromise);
|
||||
mPullPromise = Promise::CreateInfallible(aController.GetParentObject());
|
||||
|
||||
if (mState == eInitializing) {
|
||||
// The stream has been used for the first time.
|
||||
// Reading the stream, let's mark it as such
|
||||
mStreamHolder->MarkAsRead();
|
||||
}
|
||||
|
||||
mState = eInitialized;
|
||||
|
||||
if (!mInputStream) {
|
||||
// This is the first use of the stream. Let's convert the
|
||||
|
@ -244,7 +240,7 @@ void BodyStream::WriteIntoReadRequestBuffer(JSContext* aCx,
|
|||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(mInputStream);
|
||||
MOZ_DIAGNOSTIC_ASSERT(mState == eInitialized);
|
||||
MOZ_DIAGNOSTIC_ASSERT(!IsClosed());
|
||||
MOZ_DIAGNOSTIC_ASSERT(mPullPromise->State() ==
|
||||
Promise::PromiseState::Pending);
|
||||
|
||||
|
@ -285,8 +281,8 @@ void BodyStream::WriteIntoReadRequestBuffer(JSContext* aCx,
|
|||
void BodyStream::CloseInputAndReleaseObjects() {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
if (mState == eInitializing) {
|
||||
// The stream has been used for the first time.
|
||||
if (mStreamHolder) {
|
||||
// Being closed means someone touched the stream, let's mark it as read.
|
||||
mStreamHolder->MarkAsRead();
|
||||
}
|
||||
|
||||
|
@ -307,8 +303,7 @@ void BodyStream::CloseInputAndReleaseObjects() {
|
|||
BodyStream::BodyStream(nsIGlobalObject* aGlobal,
|
||||
BodyStreamHolder* aStreamHolder,
|
||||
nsIInputStream* aInputStream)
|
||||
: mState(eInitializing),
|
||||
mGlobal(aGlobal),
|
||||
: mGlobal(aGlobal),
|
||||
mStreamHolder(aStreamHolder),
|
||||
mOwningEventTarget(aGlobal->EventTargetFor(TaskCategory::Other)),
|
||||
mOriginalInputStream(aInputStream) {
|
||||
|
@ -325,7 +320,7 @@ void BodyStream::ErrorPropagation(JSContext* aCx, ReadableStream* aStream,
|
|||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
// Nothing to do.
|
||||
if (mState == eClosed) {
|
||||
if (IsClosed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -352,8 +347,8 @@ void BodyStream::ErrorPropagation(JSContext* aCx, ReadableStream* aStream,
|
|||
NS_WARNING_ASSERTION(!rv.Failed(), "Failed to error BodyStream");
|
||||
}
|
||||
|
||||
if (mState == eInitializing) {
|
||||
// The stream has been used for the first time.
|
||||
if (mStreamHolder) {
|
||||
// Being errored means someone touched the stream, let's mark it as read.
|
||||
mStreamHolder->MarkAsRead();
|
||||
}
|
||||
|
||||
|
@ -416,7 +411,7 @@ BodyStream::OnInputStreamReady(nsIAsyncInputStream* aStream) {
|
|||
mAsyncWaitWorkerRef = nullptr;
|
||||
|
||||
// Already closed. We have nothing else to do here.
|
||||
if (mState == eClosed) {
|
||||
if (IsClosed()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -429,7 +424,6 @@ BodyStream::OnInputStreamReady(nsIAsyncInputStream* aStream) {
|
|||
AutoEntryScript aes(mGlobal, "fetch body data available");
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(mInputStream);
|
||||
MOZ_DIAGNOSTIC_ASSERT(mState == eInitialized);
|
||||
MOZ_DIAGNOSTIC_ASSERT(mPullPromise->State() ==
|
||||
Promise::PromiseState::Pending);
|
||||
|
||||
|
@ -493,7 +487,7 @@ nsresult BodyStream::RetrieveInputStream(BodyStreamHolder* aStream,
|
|||
void BodyStream::Close() {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
if (mState == eClosed) {
|
||||
if (IsClosed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -514,7 +508,7 @@ void BodyStream::Close() {
|
|||
void BodyStream::CloseAndReleaseObjects(JSContext* aCx,
|
||||
ReadableStream* aStream) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
MOZ_DIAGNOSTIC_ASSERT(mState != eClosed);
|
||||
MOZ_DIAGNOSTIC_ASSERT(!IsClosed());
|
||||
|
||||
ReleaseObjects();
|
||||
|
||||
|
@ -528,13 +522,11 @@ void BodyStream::CloseAndReleaseObjects(JSContext* aCx,
|
|||
void BodyStream::ReleaseObjects() {
|
||||
MOZ_DIAGNOSTIC_ASSERT(mOwningEventTarget->IsOnCurrentThread());
|
||||
|
||||
if (mState == eClosed) {
|
||||
if (IsClosed()) {
|
||||
// Already gone. Nothing to do.
|
||||
return;
|
||||
}
|
||||
|
||||
mState = eClosed;
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
|
|
|
@ -134,24 +134,17 @@ class BodyStream final : public nsIInputStreamCallback,
|
|||
|
||||
void ReleaseObjects();
|
||||
|
||||
// The closed state should ultimately be managed by the source algorithms
|
||||
// class. See also bug 1815997.
|
||||
bool IsClosed() { return !mStreamHolder; }
|
||||
|
||||
// Common methods
|
||||
|
||||
enum State {
|
||||
// This is the beginning state before any reading operation.
|
||||
eInitializing,
|
||||
|
||||
// Stream is initialized and being consumed.
|
||||
eInitialized,
|
||||
|
||||
// Operation completed.
|
||||
eClosed,
|
||||
};
|
||||
|
||||
State mState;
|
||||
|
||||
// mGlobal is set on creation, and isn't modified off the owning thread.
|
||||
// It isn't set to nullptr until ReleaseObjects() runs.
|
||||
nsCOMPtr<nsIGlobalObject> mGlobal;
|
||||
// Same for mStreamHolder. mStreamHolder being nullptr means the stream is
|
||||
// closed.
|
||||
RefPtr<BodyStreamHolder> mStreamHolder;
|
||||
nsCOMPtr<nsIEventTarget> mOwningEventTarget;
|
||||
// Same as mGlobal but set to nullptr on OnInputStreamReady (on the owning
|
||||
|
|
Загрузка…
Ссылка в новой задаче