Bug 1402205 - Non-existent background page blocks extension startup. r=kmag

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 : rebase_source : fef29e1601c1a53d3b7ff3a9d96450b3ab8fe003
This commit is contained in:
Haik Aftandilian 2017-09-25 15:48:40 -07:00
parent 4b693cc30d
commit 09191cce06

View File

@ -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);
}
}