зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1641826 - P1 - PartiallySeekableInputStream does not return error and executes callback on AsyncWait/AsyncLengthWait if stream is closed r=baku,necko-reviewers,mayhemer
Differential Revision: https://phabricator.services.mozilla.com/D77409
This commit is contained in:
Родитель
ad95ccf4d2
Коммит
d95870593b
|
@ -235,12 +235,20 @@ PartiallySeekableInputStream::AsyncWait(nsIInputStreamCallback* aCallback,
|
|||
uint32_t aRequestedCount,
|
||||
nsIEventTarget* aEventTarget) {
|
||||
if (mClosed) {
|
||||
return NS_BASE_STREAM_CLOSED;
|
||||
if (aCallback) {
|
||||
if (aEventTarget) {
|
||||
nsCOMPtr<nsIInputStreamCallback> callable = NS_NewInputStreamReadyEvent(
|
||||
"PartiallySeekableInputStream::OnInputStreamReady", aCallback,
|
||||
aEventTarget);
|
||||
callable->OnInputStreamReady(this);
|
||||
} else {
|
||||
aCallback->OnInputStreamReady(this);
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_ENSURE_STATE(mWeakAsyncInputStream);
|
||||
|
||||
nsCOMPtr<nsIInputStreamCallback> callback = aCallback ? this : nullptr;
|
||||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
if (mAsyncWaitCallback && aCallback) {
|
||||
|
@ -250,6 +258,8 @@ PartiallySeekableInputStream::AsyncWait(nsIInputStreamCallback* aCallback,
|
|||
mAsyncWaitCallback = aCallback;
|
||||
}
|
||||
|
||||
NS_ENSURE_STATE(mWeakAsyncInputStream);
|
||||
nsCOMPtr<nsIInputStreamCallback> callback = aCallback ? this : nullptr;
|
||||
return mWeakAsyncInputStream->AsyncWait(callback, aFlags, aRequestedCount,
|
||||
aEventTarget);
|
||||
}
|
||||
|
@ -379,6 +389,22 @@ PartiallySeekableInputStream::Length(int64_t* aLength) {
|
|||
NS_IMETHODIMP
|
||||
PartiallySeekableInputStream::AsyncLengthWait(
|
||||
nsIInputStreamLengthCallback* aCallback, nsIEventTarget* aEventTarget) {
|
||||
if (mClosed) {
|
||||
if (aCallback) {
|
||||
const RefPtr<PartiallySeekableInputStream> self = this;
|
||||
const nsCOMPtr<nsIInputStreamLengthCallback> callback = aCallback;
|
||||
nsCOMPtr<nsIRunnable> runnable = NS_NewRunnableFunction(
|
||||
"PartiallySeekableInputStream::OnInputStreamLengthReady",
|
||||
[self, callback] { callback->OnInputStreamLengthReady(self, -1); });
|
||||
if (aEventTarget) {
|
||||
aEventTarget->Dispatch(runnable, NS_DISPATCH_NORMAL);
|
||||
} else {
|
||||
runnable->Run();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_ENSURE_STATE(mWeakAsyncInputStreamLength);
|
||||
|
||||
nsCOMPtr<nsIInputStreamLengthCallback> callback = aCallback ? this : nullptr;
|
||||
|
|
Загрузка…
Ссылка в новой задаче