зеркало из 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,
|
uint32_t aRequestedCount,
|
||||||
nsIEventTarget* aEventTarget) {
|
nsIEventTarget* aEventTarget) {
|
||||||
if (mClosed) {
|
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);
|
MutexAutoLock lock(mMutex);
|
||||||
if (mAsyncWaitCallback && aCallback) {
|
if (mAsyncWaitCallback && aCallback) {
|
||||||
|
@ -250,6 +258,8 @@ PartiallySeekableInputStream::AsyncWait(nsIInputStreamCallback* aCallback,
|
||||||
mAsyncWaitCallback = aCallback;
|
mAsyncWaitCallback = aCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_ENSURE_STATE(mWeakAsyncInputStream);
|
||||||
|
nsCOMPtr<nsIInputStreamCallback> callback = aCallback ? this : nullptr;
|
||||||
return mWeakAsyncInputStream->AsyncWait(callback, aFlags, aRequestedCount,
|
return mWeakAsyncInputStream->AsyncWait(callback, aFlags, aRequestedCount,
|
||||||
aEventTarget);
|
aEventTarget);
|
||||||
}
|
}
|
||||||
|
@ -379,6 +389,22 @@ PartiallySeekableInputStream::Length(int64_t* aLength) {
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
PartiallySeekableInputStream::AsyncLengthWait(
|
PartiallySeekableInputStream::AsyncLengthWait(
|
||||||
nsIInputStreamLengthCallback* aCallback, nsIEventTarget* aEventTarget) {
|
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);
|
NS_ENSURE_STATE(mWeakAsyncInputStreamLength);
|
||||||
|
|
||||||
nsCOMPtr<nsIInputStreamLengthCallback> callback = aCallback ? this : nullptr;
|
nsCOMPtr<nsIInputStreamLengthCallback> callback = aCallback ? this : nullptr;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче