Index: Source/core/streams/ExclusiveStreamReader.cpp |
diff --git a/Source/core/streams/ExclusiveStreamReader.cpp b/Source/core/streams/ExclusiveStreamReader.cpp |
deleted file mode 100644 |
index f94e9ec67104e16ff3ee1295b4b395f108d4ef75..0000000000000000000000000000000000000000 |
--- a/Source/core/streams/ExclusiveStreamReader.cpp |
+++ /dev/null |
@@ -1,198 +0,0 @@ |
-// 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 "core/streams/ExclusiveStreamReader.h" |
- |
-#include "bindings/core/v8/ExceptionState.h" |
-#include "bindings/core/v8/ScriptFunction.h" |
-#include "bindings/core/v8/ScriptPromiseResolver.h" |
-#include "core/dom/DOMException.h" |
-#include "core/streams/ReadableStream.h" |
- |
-namespace blink { |
- |
-namespace { |
- |
-class PromiseRaceFulfillHandler : public ScriptFunction { |
-public: |
- static v8::Handle<v8::Function> create(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
- { |
- return (new PromiseRaceFulfillHandler(resolver))->bindToV8Function(); |
- } |
- |
- DEFINE_INLINE_TRACE() |
- { |
- visitor->trace(m_resolver); |
- ScriptFunction::trace(visitor); |
- } |
- |
-private: |
- explicit PromiseRaceFulfillHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
- : ScriptFunction(resolver->scriptState()) |
- , m_resolver(resolver) { } |
- ScriptValue call(ScriptValue value) override |
- { |
- m_resolver->resolve(value); |
- return ScriptValue(scriptState(), v8::Undefined(scriptState()->isolate())); |
- } |
- |
- RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; |
-}; |
- |
-class PromiseRaceRejectHandler : public ScriptFunction { |
-public: |
- static v8::Handle<v8::Function> create(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
- { |
- return (new PromiseRaceRejectHandler(resolver))->bindToV8Function(); |
- } |
- |
- DEFINE_INLINE_TRACE() |
- { |
- visitor->trace(m_resolver); |
- ScriptFunction::trace(visitor); |
- } |
- |
-private: |
- explicit PromiseRaceRejectHandler(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
- : ScriptFunction(resolver->scriptState()) |
- , m_resolver(resolver) { } |
- ScriptValue call(ScriptValue value) override |
- { |
- m_resolver->reject(value); |
- return ScriptValue(scriptState(), v8::Undefined(scriptState()->isolate())); |
- } |
- |
- RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; |
-}; |
- |
-ScriptPromise race(ScriptState* scriptState, const Vector<ScriptPromise>& promises) |
-{ |
- RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scriptState); |
- for (ScriptPromise promise : promises) { |
- promise.then(PromiseRaceFulfillHandler::create(resolver), PromiseRaceRejectHandler::create(resolver)); |
- } |
- return resolver->promise(); |
-} |
- |
-} // namespace |
- |
-ExclusiveStreamReader::ExclusiveStreamReader(ReadableStream* stream) |
- : ActiveDOMObject(stream->executionContext()) |
- , m_stream(stream) |
- , m_released(new ReleasedPromise(stream->executionContext(), this, ReleasedPromise::Released)) |
- , m_stateAfterRelease(ReadableStream::Closed) |
-{ |
- suspendIfNeeded(); |
- ASSERT(m_stream->isLockedTo(nullptr)); |
- m_stream->setReader(this); |
-} |
- |
-ScriptPromise ExclusiveStreamReader::closed(ScriptState* scriptState) |
-{ |
- if (isActive()) { |
- Vector<ScriptPromise> promises; |
- promises.append(m_stream->closed(scriptState)); |
- promises.append(m_released->promise(scriptState->world())); |
- return race(scriptState, promises); |
- } |
- ASSERT(m_released); |
- return m_closedAfterRelease->promise(scriptState->world()); |
-} |
- |
-bool ExclusiveStreamReader::isActive() const |
-{ |
- return m_stream->isLockedTo(this); |
-} |
- |
-ScriptPromise ExclusiveStreamReader::ready(ScriptState* scriptState) |
-{ |
- if (isActive()) { |
- Vector<ScriptPromise> promises; |
- promises.append(m_stream->readyInternal(scriptState)); |
- promises.append(m_released->promise(scriptState->world())); |
- return race(scriptState, promises); |
- } |
- ASSERT(m_readyAfterRelease); |
- return m_readyAfterRelease->promise(scriptState->world()); |
-} |
- |
-String ExclusiveStreamReader::state() const |
-{ |
- if (isActive()) |
- return ReadableStream::stateToString(m_stream->stateInternal()); |
- return ReadableStream::stateToString(m_stateAfterRelease); |
-} |
- |
-ScriptPromise ExclusiveStreamReader::cancel(ScriptState* scriptState, ScriptValue reason) |
-{ |
- if (isActive()) { |
- releaseLock(); |
- return m_stream->cancel(scriptState, reason); |
- } |
- return m_closedAfterRelease->promise(scriptState->world()); |
-} |
- |
-ScriptValue ExclusiveStreamReader::read(ScriptState* scriptState, ExceptionState& es) |
-{ |
- if (!isActive()) { |
- es.throwTypeError("The stream is not locked to this reader"); |
- return ScriptValue(); |
- } |
- return m_stream->readInternal(scriptState, es); |
-} |
- |
-void ExclusiveStreamReader::releaseLock() |
-{ |
- if (!isActive()) |
- return; |
- |
- m_stream->setReader(nullptr); |
- |
- m_readyAfterRelease = new ReadyPromise(executionContext(), this, ReadyPromise::Ready); |
- m_readyAfterRelease->resolve(ToV8UndefinedGenerator()); |
- m_closedAfterRelease = new ClosedPromise(executionContext(), this, ReadyPromise::Closed); |
- |
- if (m_stream->stateInternal() == ReadableStream::Closed) { |
- m_stateAfterRelease = ReadableStream::Closed; |
- m_closedAfterRelease->resolve(ToV8UndefinedGenerator()); |
- } else if (m_stream->stateInternal() == ReadableStream::Errored) { |
- m_stateAfterRelease = ReadableStream::Errored; |
- m_closedAfterRelease->reject(m_stream->storedException()); |
- } else { |
- m_stateAfterRelease = ReadableStream::Closed; |
- m_closedAfterRelease->resolve(ToV8UndefinedGenerator()); |
- } |
- m_released->resolve(ToV8UndefinedGenerator()); |
- ASSERT(!isActive()); |
-} |
- |
-ScriptPromise ExclusiveStreamReader::released(ScriptState* scriptState) |
-{ |
- return m_released->promise(scriptState->world()); |
-} |
- |
-bool ExclusiveStreamReader::hasPendingActivity() const |
-{ |
- // We need to extend ExclusiveStreamReader's wrapper's life while it is |
- // active in order to call resolve / reject on ScriptPromiseProperties. |
- return isActive(); |
-} |
- |
-void ExclusiveStreamReader::stop() |
-{ |
- releaseLock(); |
- ActiveDOMObject::stop(); |
-} |
- |
-DEFINE_TRACE(ExclusiveStreamReader) |
-{ |
- visitor->trace(m_stream); |
- visitor->trace(m_released); |
- visitor->trace(m_closedAfterRelease); |
- visitor->trace(m_readyAfterRelease); |
- ActiveDOMObject::trace(visitor); |
-} |
- |
-} // namespace blink |