Commit fcc0363c authored by Adam Rice's avatar Adam Rice Committed by Commit Bot

Correct DCHECKs in ReadableStreamOperations

Previously ReadableStreamOperations assumed that the operations
would always return a value unless an exception had been thrown.

However, thread termination can also cause operations to not
return a value. Correct the DCHECKs accordingly.

BUG=882841

Change-Id: Ia62dd7ce090b0a9938ab106ad5c06cf5e4677da7
Reviewed-on: https://chromium-review.googlesource.com/1222269Reviewed-by: default avatarYuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarHiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591361}
parent c84819af
......@@ -35,7 +35,8 @@ base::Optional<bool> BooleanOperationWithRethrow(
if (!V8ScriptRunner::CallExtra(script_state, operation, args)
.ToLocal(&local_value) ||
!local_value->BooleanValue(script_state->GetContext()).To(&result_bool)) {
DCHECK(block.HasCaught());
DCHECK(block.HasCaught() ||
script_state->GetIsolate()->IsExecutionTerminating());
exception_state.RethrowV8Exception(block.Exception());
return base::nullopt;
}
......@@ -62,7 +63,8 @@ bool BooleanOperationForDCheck(ScriptState* script_state,
DCHECK(!block.HasCaught());
return result_bool;
}
DCHECK(block.HasCaught());
DCHECK(block.HasCaught() ||
script_state->GetIsolate()->IsExecutionTerminating());
return fallback_value;
}
......@@ -120,7 +122,8 @@ ScriptValue ReadableStreamOperations::GetReader(
exception_state.RethrowV8Exception(block.Exception());
return ScriptValue();
}
DCHECK(!result.IsEmpty());
DCHECK(!result.IsEmpty() ||
script_state->GetIsolate()->IsExecutionTerminating());
return result;
}
......@@ -216,7 +219,8 @@ ScriptPromise ReadableStreamOperations::DefaultReaderRead(
v8::MaybeLocal<v8::Value> maybe_result = V8ScriptRunner::CallExtra(
script_state, "ReadableStreamDefaultReaderRead", args);
if (maybe_result.IsEmpty()) {
DCHECK(block.HasCaught());
DCHECK(block.HasCaught() ||
script_state->GetIsolate()->IsExecutionTerminating());
return ScriptPromise::Reject(script_state, block.Exception());
}
return ScriptPromise::Cast(script_state, maybe_result.ToLocalChecked());
......@@ -236,7 +240,8 @@ void ReadableStreamOperations::Tee(ScriptState* script_state,
v8::Local<v8::Value> result;
if (!V8ScriptRunner::CallExtra(script_state, "ReadableStreamTee", args)
.ToLocal(&result)) {
DCHECK(block.HasCaught());
DCHECK(block.HasCaught() ||
script_state->GetIsolate()->IsExecutionTerminating());
exception_state.RethrowV8Exception(block.Exception());
return;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment