Issue #1442 - Part 20 - FetchStream should not have an extra JS::Heap<ReadableStream>. https://bugzilla.mozilla.org/show_bug.cgi?id=1390717

This commit is contained in:
Brian Smith 2023-09-29 09:25:52 -05:00 • committed by roytam1
commit b1a12de924
3 changed files with 11 additions and 7 deletions

View file

@ -100,6 +100,8 @@ public:
NS_IMETHOD_(MozExternalRefCountType) Release(void) = 0; NS_IMETHOD_(MozExternalRefCountType) Release(void) = 0;
virtual void NullifyStream() = 0; virtual void NullifyStream() = 0;
virtual JSObject* ReadableStreamBody() = 0;
}; };
/* /*
@ -228,6 +230,13 @@ public:
mFetchStreamReader = nullptr; mFetchStreamReader = nullptr;
} }
JSObject*
ReadableStreamBody() override
{
MOZ_ASSERT(mReadableStreamBody);
return mReadableStreamBody;
}
virtual AbortSignal* virtual AbortSignal*
GetSignal() const = 0; GetSignal() const = 0;

View file

@ -161,8 +161,6 @@ FetchStream::Create(JSContext* aCx, FetchStreamHolder* aStreamHolder,
return; return;
} }
stream->mReadableStream = body;
// This will be released in FetchStream::FinalizeCallback(). We are // This will be released in FetchStream::FinalizeCallback(). We are
// guaranteed the jsapi will call FinalizeCallback when ReadableStream // guaranteed the jsapi will call FinalizeCallback when ReadableStream
// js object is finalized. // js object is finalized.
@ -371,7 +369,6 @@ FetchStream::FetchStream(nsIGlobalObject* aGlobal,
, mStreamHolder(aStreamHolder) , mStreamHolder(aStreamHolder)
, mOriginalInputStream(aInputStream) , mOriginalInputStream(aInputStream)
, mOwningEventTarget(nullptr) , mOwningEventTarget(nullptr)
, mReadableStream(nullptr)
{ {
MOZ_DIAGNOSTIC_ASSERT(aInputStream); MOZ_DIAGNOSTIC_ASSERT(aInputStream);
MOZ_DIAGNOSTIC_ASSERT(aStreamHolder); MOZ_DIAGNOSTIC_ASSERT(aStreamHolder);
@ -428,7 +425,7 @@ FetchStream::OnInputStreamReady(nsIAsyncInputStream* aStream)
} }
JSContext* cx = jsapi.cx(); JSContext* cx = jsapi.cx();
JS::Rooted<JSObject*> stream(cx, mReadableStream); JS::Rooted<JSObject*> stream(cx, mStreamHolder->ReadableStreamBody());
uint64_t size = 0; uint64_t size = 0;
nsresult rv = mInputStream->Available(&size); nsresult rv = mInputStream->Available(&size);
@ -494,7 +491,7 @@ FetchStream::Close()
} }
JSContext* cx = jsapi.cx(); JSContext* cx = jsapi.cx();
JS::Rooted<JSObject*> stream(cx, mReadableStream); JS::Rooted<JSObject*> stream(cx, mStreamHolder->ReadableStreamBody());
CloseAndReleaseObjects(cx, stream); CloseAndReleaseObjects(cx, stream);
} }

View file

@ -125,8 +125,6 @@ private:
nsCOMPtr<nsIAsyncInputStream> mInputStream; nsCOMPtr<nsIAsyncInputStream> mInputStream;
UniquePtr<workers::WorkerHolder> mWorkerHolder; UniquePtr<workers::WorkerHolder> mWorkerHolder;
JS::Heap<JSObject*> mReadableStream;
}; };
} // dom namespace } // dom namespace