commit 86b6592ab804 Author: Haik Aftandilian Date: Mon Sep 25 15:48:40 2017 -0700 Bug 1402205 - Non-existent background page blocks extension startup. r=kmag, a=sledru Add calls to OnStartRequest() and OnStopRequest() to properly handle async read failures for remote JAR's and remote unpacked extension resources. MozReview-Commit-ID: Dcg0LDht9B9 --HG-- extra : source : 611582e42451dd26fcaa38f251e2203a6e8b0bf9 --- netwerk/protocol/res/ExtensionProtocolHandler.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git netwerk/protocol/res/ExtensionProtocolHandler.cpp netwerk/protocol/res/ExtensionProtocolHandler.cpp index 326c21d13057..a2d900f95b96 100644 --- netwerk/protocol/res/ExtensionProtocolHandler.cpp +++ netwerk/protocol/res/ExtensionProtocolHandler.cpp @@ -253,6 +253,19 @@ ExtensionStreamGetter::GetAsync(nsIStreamListener* aListener, return Ok(); } +static void +CancelRequest(nsIStreamListener* aListener, + nsIChannel* aChannel, + nsresult aResult) +{ + MOZ_ASSERT(aListener); + MOZ_ASSERT(aChannel); + + aListener->OnStartRequest(aChannel, nullptr); + aListener->OnStopRequest(aChannel, nullptr, aResult); + aChannel->Cancel(NS_BINDING_ABORTED); +} + // Handle an input stream sent from the parent. void ExtensionStreamGetter::OnStream(nsIInputStream* aStream) @@ -269,9 +282,7 @@ ExtensionStreamGetter::OnStream(nsIInputStream* aStream) if (!aStream) { // The parent didn't send us back a stream. - listener->OnStartRequest(mChannel, nullptr); - listener->OnStopRequest(mChannel, nullptr, NS_ERROR_FILE_ACCESS_DENIED); - mChannel->Cancel(NS_BINDING_ABORTED); + CancelRequest(listener, mChannel, NS_ERROR_FILE_ACCESS_DENIED); return; } @@ -279,13 +290,13 @@ ExtensionStreamGetter::OnStream(nsIInputStream* aStream) nsresult rv = NS_NewInputStreamPump(getter_AddRefs(pump), aStream, -1, -1, 0, 0, false, mMainThreadEventTarget); if (NS_FAILED(rv)) { - mChannel->Cancel(NS_BINDING_ABORTED); + CancelRequest(listener, mChannel, rv); return; } rv = pump->AsyncRead(listener, nullptr); if (NS_FAILED(rv)) { - mChannel->Cancel(NS_BINDING_ABORTED); + CancelRequest(listener, mChannel, rv); } } @@ -310,7 +321,7 @@ ExtensionStreamGetter::OnFD(const FileDescriptor& aFD) mJarChannel->SetJarFile(fdFile); nsresult rv = mJarChannel->AsyncOpen2(listener); if (NS_FAILED(rv)) { - mChannel->Cancel(NS_BINDING_ABORTED); + CancelRequest(listener, mChannel, rv); } }