Commit 30be752d authored by Adam Rice's avatar Adam Rice Committed by Commit Bot

Make IsReadableStreamDefaultReader() take an ExceptionState&

Also remove the unsafe version of IsReadableStream().

Remove BooleanOperation() helper from readable_stream_operations.cc as
it is no longer used.

Modify the tests to pass an ExceptionState& argument to
IsReadableStream() and IsReadableStreamDefaultReader().

Bug: 853189
Change-Id: I26393861760e3bdab6991e522565067aabae5fb4
Reviewed-on: https://chromium-review.googlesource.com/1118089Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571086}
parent 1ad6448f
...@@ -17,20 +17,6 @@ namespace blink { ...@@ -17,20 +17,6 @@ namespace blink {
namespace { namespace {
base::Optional<bool> BooleanOperation(ScriptState* script_state,
ScriptValue value,
const char* operation) {
v8::Local<v8::Value> args[] = {value.V8Value()};
v8::Local<v8::Value> result_value;
bool result_bool = false;
if (V8ScriptRunner::CallExtra(script_state, operation, args)
.ToLocal(&result_value) &&
result_value->BooleanValue(script_state->GetContext()).To(&result_bool)) {
return result_bool;
}
return base::nullopt;
}
base::Optional<bool> BooleanOperationWithRethrow( base::Optional<bool> BooleanOperationWithRethrow(
ScriptState* script_state, ScriptState* script_state,
ScriptValue value, ScriptValue value,
...@@ -66,15 +52,18 @@ bool BooleanOperationForDCheck(ScriptState* script_state, ...@@ -66,15 +52,18 @@ bool BooleanOperationForDCheck(ScriptState* script_state,
ScriptValue value, ScriptValue value,
const char* operation, const char* operation,
bool fallback_value) { bool fallback_value) {
v8::Local<v8::Value> args[] = {value.V8Value()};
v8::Local<v8::Value> result_value;
bool result_bool = false;
v8::TryCatch block(script_state->GetIsolate()); v8::TryCatch block(script_state->GetIsolate());
base::Optional<bool> result = if (V8ScriptRunner::CallExtra(script_state, operation, args)
BooleanOperation(script_state, value, operation); .ToLocal(&result_value) &&
if (block.HasCaught()) { result_value->BooleanValue(script_state->GetContext()).To(&result_bool)) {
DCHECK(!result.has_value()); DCHECK(!block.HasCaught());
return fallback_value; return result_bool;
} }
DCHECK(result.has_value()); DCHECK(block.HasCaught());
return result.value(); return fallback_value;
} }
// Performs IsReadableStreamDefaultReader(value), catching exceptions. Should // Performs IsReadableStreamDefaultReader(value), catching exceptions. Should
...@@ -129,12 +118,6 @@ ScriptValue ReadableStreamOperations::GetReader(ScriptState* script_state, ...@@ -129,12 +118,6 @@ ScriptValue ReadableStreamOperations::GetReader(ScriptState* script_state,
return result; return result;
} }
base::Optional<bool> ReadableStreamOperations::IsReadableStream(
ScriptState* script_state,
ScriptValue value) {
return BooleanOperation(script_state, value, "IsReadableStream");
}
base::Optional<bool> ReadableStreamOperations::IsReadableStream( base::Optional<bool> ReadableStreamOperations::IsReadableStream(
ScriptState* script_state, ScriptState* script_state,
ScriptValue value, ScriptValue value,
...@@ -211,8 +194,10 @@ base::Optional<bool> ReadableStreamOperations::IsErrored( ...@@ -211,8 +194,10 @@ base::Optional<bool> ReadableStreamOperations::IsErrored(
base::Optional<bool> ReadableStreamOperations::IsReadableStreamDefaultReader( base::Optional<bool> ReadableStreamOperations::IsReadableStreamDefaultReader(
ScriptState* script_state, ScriptState* script_state,
ScriptValue value) { ScriptValue value,
return BooleanOperation(script_state, value, "IsReadableStreamDefaultReader"); ExceptionState& exception_state) {
return BooleanOperationWithRethrow(
script_state, value, "IsReadableStreamDefaultReader", exception_state);
} }
ScriptPromise ReadableStreamOperations::DefaultReaderRead( ScriptPromise ReadableStreamOperations::DefaultReaderRead(
......
...@@ -55,9 +55,6 @@ class CORE_EXPORT ReadableStreamOperations { ...@@ -55,9 +55,6 @@ class CORE_EXPORT ReadableStreamOperations {
// This function assumes |IsReadableStream(stream)|. // This function assumes |IsReadableStream(stream)|.
static ScriptValue GetReader(ScriptState*, ScriptValue stream); static ScriptValue GetReader(ScriptState*, ScriptValue stream);
// IsReadableStream. Exceptions are not caught.
static base::Optional<bool> IsReadableStream(ScriptState*, ScriptValue);
// IsReadableStream, exception-catching version. Exceptions will be passed to // IsReadableStream, exception-catching version. Exceptions will be passed to
// |exception_state|. // |exception_state|.
static base::Optional<bool> IsReadableStream(ScriptState*, static base::Optional<bool> IsReadableStream(ScriptState*,
...@@ -110,8 +107,10 @@ class CORE_EXPORT ReadableStreamOperations { ...@@ -110,8 +107,10 @@ class CORE_EXPORT ReadableStreamOperations {
ExceptionState& exception_state); ExceptionState& exception_state);
// IsReadableStreamDefaultReader. // IsReadableStreamDefaultReader.
static base::Optional<bool> IsReadableStreamDefaultReader(ScriptState*, static base::Optional<bool> IsReadableStreamDefaultReader(
ScriptValue); ScriptState*,
ScriptValue,
ExceptionState& exception_state);
// ReadableStreamDefaultReaderRead // ReadableStreamDefaultReaderRead
// This function assumes |IsReadableStreamDefaultReader(reader)|. // This function assumes |IsReadableStreamDefaultReader(reader)|.
......
...@@ -122,22 +122,25 @@ TEST(ReadableStreamOperationsTest, IsReadableStream) { ...@@ -122,22 +122,25 @@ TEST(ReadableStreamOperationsTest, IsReadableStream) {
EXPECT_FALSE(ReadableStreamOperations::IsReadableStream( EXPECT_FALSE(ReadableStreamOperations::IsReadableStream(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue(scope.GetScriptState(), ScriptValue(scope.GetScriptState(),
v8::Undefined(scope.GetIsolate()))) v8::Undefined(scope.GetIsolate())),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
EXPECT_FALSE(ReadableStreamOperations::IsReadableStream( EXPECT_FALSE(ReadableStreamOperations::IsReadableStream(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue::CreateNull(scope.GetScriptState())) ScriptValue::CreateNull(scope.GetScriptState()),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
EXPECT_FALSE(ReadableStreamOperations::IsReadableStream( EXPECT_FALSE(ReadableStreamOperations::IsReadableStream(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue(scope.GetScriptState(), ScriptValue(scope.GetScriptState(),
v8::Object::New(scope.GetIsolate()))) v8::Object::New(scope.GetIsolate())),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
ScriptValue stream = EvalWithPrintingError(&scope, "new ReadableStream()"); ScriptValue stream = EvalWithPrintingError(&scope, "new ReadableStream()");
EXPECT_FALSE(stream.IsEmpty()); EXPECT_FALSE(stream.IsEmpty());
EXPECT_TRUE( EXPECT_TRUE(ReadableStreamOperations::IsReadableStream(
ReadableStreamOperations::IsReadableStream(scope.GetScriptState(), stream) scope.GetScriptState(), stream, ASSERT_NO_EXCEPTION)
.value_or(false)); .value_or(false));
} }
TEST(ReadableStreamOperationsTest, IsReadableStreamDefaultReaderInvalid) { TEST(ReadableStreamOperationsTest, IsReadableStreamDefaultReaderInvalid) {
...@@ -146,22 +149,25 @@ TEST(ReadableStreamOperationsTest, IsReadableStreamDefaultReaderInvalid) { ...@@ -146,22 +149,25 @@ TEST(ReadableStreamOperationsTest, IsReadableStreamDefaultReaderInvalid) {
EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader( EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue(scope.GetScriptState(), ScriptValue(scope.GetScriptState(),
v8::Undefined(scope.GetIsolate()))) v8::Undefined(scope.GetIsolate())),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader( EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue::CreateNull(scope.GetScriptState())) ScriptValue::CreateNull(scope.GetScriptState()),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader( EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), scope.GetScriptState(),
ScriptValue(scope.GetScriptState(), ScriptValue(scope.GetScriptState(),
v8::Object::New(scope.GetIsolate()))) v8::Object::New(scope.GetIsolate())),
ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
ScriptValue stream = EvalWithPrintingError(&scope, "new ReadableStream()"); ScriptValue stream = EvalWithPrintingError(&scope, "new ReadableStream()");
ASSERT_FALSE(stream.IsEmpty()); ASSERT_FALSE(stream.IsEmpty());
EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader( EXPECT_FALSE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), stream) scope.GetScriptState(), stream, ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
} }
...@@ -181,11 +187,11 @@ TEST(ReadableStreamOperationsTest, GetReader) { ...@@ -181,11 +187,11 @@ TEST(ReadableStreamOperationsTest, GetReader) {
.value_or(false)); .value_or(false));
ASSERT_FALSE(reader.IsEmpty()); ASSERT_FALSE(reader.IsEmpty());
EXPECT_FALSE( EXPECT_FALSE(ReadableStreamOperations::IsReadableStream(
ReadableStreamOperations::IsReadableStream(scope.GetScriptState(), reader) scope.GetScriptState(), reader, ASSERT_NO_EXCEPTION)
.value_or(true)); .value_or(true));
EXPECT_TRUE(ReadableStreamOperations::IsReadableStreamDefaultReader( EXPECT_TRUE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), reader) scope.GetScriptState(), reader, ASSERT_NO_EXCEPTION)
.value_or(false)); .value_or(false));
// Already locked! // Already locked!
...@@ -221,7 +227,7 @@ TEST(ReadableStreamOperationsTest, Read) { ...@@ -221,7 +227,7 @@ TEST(ReadableStreamOperationsTest, Read) {
"new ReadableStream({start}).getReader()"); "new ReadableStream({start}).getReader()");
EXPECT_FALSE(reader.IsEmpty()); EXPECT_FALSE(reader.IsEmpty());
ASSERT_TRUE(ReadableStreamOperations::IsReadableStreamDefaultReader( ASSERT_TRUE(ReadableStreamOperations::IsReadableStreamDefaultReader(
scope.GetScriptState(), reader) scope.GetScriptState(), reader, ASSERT_NO_EXCEPTION)
.value_or(false)); .value_or(false));
Iteration* it1 = new Iteration(); Iteration* it1 = new Iteration();
......
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