diff --git a/dom/fetch/Fetch.cpp b/dom/fetch/Fetch.cpp index 53ada9378b..dfc65c840e 100644 --- a/dom/fetch/Fetch.cpp +++ b/dom/fetch/Fetch.cpp @@ -1139,6 +1139,10 @@ FetchBody::LockStream(JSContext* aCx, JS::HandleObject aStream, ErrorResult& aRv) { + MOZ_ASSERT(JS::ReadableStreamGetMode(aStream) == + JS::ReadableStreamMode::ExternalSource); + + // This is native stream, creating a reader will not execute any JS code. JS::Rooted reader(aCx, JS::ReadableStreamGetReader(aCx, aStream, JS::ReadableStreamReaderMode::Default)); diff --git a/dom/fetch/FetchStreamReader.cpp b/dom/fetch/FetchStreamReader.cpp index 98d2588a0e..5d9719a0c1 100644 --- a/dom/fetch/FetchStreamReader.cpp +++ b/dom/fetch/FetchStreamReader.cpp @@ -169,17 +169,13 @@ FetchStreamReader::OnOutputStreamReady(nsIAsyncOutputStream* aStream) return WriteBuffer(); } - AutoJSAPI jsapi; - if (NS_WARN_IF(!jsapi.Init(mGlobal))) { - CloseAndRelease(NS_ERROR_DOM_INVALID_STATE_ERR); - return NS_ERROR_FAILURE; - } + // TODO: We need to verify this is the correct global per the spec. + // See bug 1385890. + AutoEntryScript aes(mGlobal, "ReadableStreamReader.read", !mWorkerHolder); - JSContext* cx = jsapi.cx(); - - JS::Rooted reader(cx, mReader); - JS::Rooted promise(cx, - JS::ReadableStreamDefaultReaderRead(cx, + JS::Rooted reader(aes.cx(), mReader); + JS::Rooted promise(aes.cx(), + JS::ReadableStreamDefaultReaderRead(aes.cx(), reader)); if (NS_WARN_IF(!promise)) { // Let's close the stream.