Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp |
| diff --git a/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..87fb8830bf6933addd8ac0fdaff76ad59a96dd04 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperations.cpp |
| @@ -0,0 +1,99 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "config.h" |
| +#include "bindings/core/v8/ReadableStreamOperations.h" |
| + |
| +#include "bindings/core/v8/ScriptState.h" |
| + |
| +namespace blink { |
| + |
| +namespace { |
| + |
| +v8::MaybeLocal<v8::Value> call(ScriptState* scriptState, const char* name, size_t numArgs, v8::Local<v8::Value>* args) |
| +{ |
| + v8::Isolate* isolate = scriptState->isolate(); |
| + v8::Local<v8::Context> context = scriptState->context(); |
| + v8::Local<v8::Value> undefined = v8::Undefined(isolate); |
| + v8::Local<v8::Value> functionValue = scriptState->getFromExtrasExports(name).v8Value(); |
| + ASSERT(!functionValue.IsEmpty() && functionValue->IsFunction()); |
| + v8::Local<v8::Function> function = functionValue.As<v8::Function>(); |
| + return function->Call(context, undefined, numArgs, args); |
| +} |
| + |
| +template <size_t N> |
|
domenic
2015/12/02 17:53:03
Do you think this might be useful enough that it s
yhirano
2015/12/03 11:18:29
For now, I think having this utility function here
|
| +v8::MaybeLocal<v8::Value> call(ScriptState* scriptState, const char* name, v8::Local<v8::Value>(&args)[N]) |
| +{ |
| + return call(scriptState, name, N, args); |
| +} |
| + |
| +} // namespace |
| + |
| +ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, v8::Local<v8::Value> stream) |
| +{ |
| + ASSERT(isReadableStream(scriptState, stream)); |
| + |
| + v8::Local<v8::Value> args[] = { stream }; |
| + return ScriptValue(scriptState, call(scriptState, "AcquireReadableStreamReader", args)); |
| +} |
| + |
| +bool ReadableStreamOperations::isReadableStream(ScriptState* scriptState, v8::Local<v8::Value> value) |
| +{ |
| + if (!value->IsObject()) |
| + return false; |
| + |
| + v8::Local<v8::Value> args[] = { value }; |
| + v8::Local<v8::Value> resultValue; |
| + bool ok = call(scriptState, "IsReadableStream", args).ToLocal(&resultValue); |
| + ASSERT_UNUSED(ok, ok); |
| + return resultValue->ToBoolean()->Value(); |
| +} |
| + |
| +bool ReadableStreamOperations::isDisturbed(ScriptState* scriptState, v8::Local<v8::Value> stream) |
| +{ |
| + ASSERT(isReadableStream(scriptState, stream)); |
| + |
| + v8::Local<v8::Value> args[] = { stream }; |
| + v8::Local<v8::Value> resultValue; |
| + bool ok = call(scriptState, "IsReadableStreamDisturbed", args).ToLocal(&resultValue); |
| + ASSERT_UNUSED(ok, ok); |
| + return resultValue->ToBoolean()->Value(); |
| +} |
| + |
| +bool ReadableStreamOperations::isLocked(ScriptState* scriptState, v8::Local<v8::Value> stream) |
| +{ |
| + ASSERT(isReadableStream(scriptState, stream)); |
| + |
| + v8::Local<v8::Value> resultValue; |
| + v8::Local<v8::Value> args[] = { stream }; |
| + bool ok = call(scriptState, "IsReadableStreamLocked", args).ToLocal(&resultValue); |
| + ASSERT_UNUSED(ok, ok); |
| + return resultValue->ToBoolean()->Value(); |
| +} |
| + |
| +bool ReadableStreamOperations::isReadableStreamReader(ScriptState* scriptState, v8::Local<v8::Value> value) |
| +{ |
| + if (!value->IsObject()) |
| + return false; |
| + |
| + v8::Local<v8::Value> resultValue; |
| + v8::Local<v8::Value> args[] = { value }; |
| + bool ok = call(scriptState, "IsReadableStreamReader", args).ToLocal(&resultValue); |
| + ASSERT_UNUSED(ok, ok); |
| + return resultValue->ToBoolean()->Value(); |
| +} |
| + |
| +ScriptPromise ReadableStreamOperations::read(ScriptState* scriptState, v8::Local<v8::Value> reader) |
| +{ |
| + ASSERT(isReadableStreamReader(scriptState, reader)); |
| + |
| + v8::Local<v8::Value> resultValue; |
| + v8::Local<v8::Value> args[] = { reader }; |
| + bool ok = call(scriptState, "ReadFromReadableStreamReader", args).ToLocal(&resultValue); |
| + ASSERT_UNUSED(ok, ok); |
| + return ScriptPromise::cast(scriptState, resultValue); |
| +} |
| + |
| +} // namespace blink |
| + |