Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1387)

Unified Diff: Source/core/streams/ReadableStream.h

Issue 837673002: Introduce ExclusiveStreamReader. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/streams/ExclusiveStreamReaderTest.cpp ('k') | Source/core/streams/ReadableStream.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/streams/ReadableStream.h
diff --git a/Source/core/streams/ReadableStream.h b/Source/core/streams/ReadableStream.h
index 28deb583ab43af3d2ba1556aa53298a3328d3445..36ca2b9267d83db05da82ff46affe4b5df877d8a 100644
--- a/Source/core/streams/ReadableStream.h
+++ b/Source/core/streams/ReadableStream.h
@@ -21,6 +21,7 @@ namespace blink {
class DOMException;
class ExceptionState;
+class ExclusiveStreamReader;
class UnderlyingSource;
class ReadableStream : public GarbageCollectedFinalized<ReadableStream>, public ScriptWrappable, public ActiveDOMObject {
@@ -43,31 +44,49 @@ public:
bool isStarted() const { return m_isStarted; }
bool isDraining() const { return m_isDraining; }
bool isPulling() const { return m_isPulling; }
- State state() const { return m_state; }
- String stateString() const;
+ State stateInternal() const { return m_state; }
+ DOMException* storedException() { return m_exception.get(); }
- virtual ScriptValue read(ScriptState*, ExceptionState&) = 0;
+ // |stateString|, |read| and |ready| are affected by an exclusive lock. Use
+ // |stateInternal|, |readInternal| and |readyInternal| if you want to avoid
+ // that.
+ String stateString() const;
+ ScriptValue read(ScriptState*, ExceptionState&);
ScriptPromise ready(ScriptState*);
ScriptPromise cancel(ScriptState*, ScriptValue reason);
ScriptPromise closed(ScriptState*);
+ virtual ScriptValue readInternal(ScriptState*, ExceptionState&) = 0;
+ ScriptPromise readyInternal(ScriptState*);
+
void close();
void error(PassRefPtrWillBeRawPtr<DOMException>);
void didSourceStart();
+ // This function is not a getter. It creates an ExclusiveStreamReader and
+ // returns it.
+ ExclusiveStreamReader* getReader(ExceptionState&);
+ // Only ExclusiveStreamReader methods should call this function.
+ void setReader(ExclusiveStreamReader*);
+ bool isLockedTo(const ExclusiveStreamReader* reader) const { return m_reader == reader; }
+
bool hasPendingActivity() const override;
- virtual void trace(Visitor*) override;
+ void stop() override;
+ void trace(Visitor*) override;
+
+ // Returns the string representation of the given State.
+ static String stateToString(State);
protected:
bool enqueuePreliminaryCheck();
bool enqueuePostAction();
- void readPreliminaryCheck(ExceptionState&);
- void readPostAction();
+ void readInternalPreliminaryCheck(ExceptionState&);
+ void readInternalPostAction();
private:
- typedef ScriptPromiseProperty<Member<ReadableStream>, ToV8UndefinedGenerator, RefPtrWillBeMember<DOMException> > WaitPromise;
- typedef ScriptPromiseProperty<Member<ReadableStream>, ToV8UndefinedGenerator, RefPtrWillBeMember<DOMException> > ClosedPromise;
+ using WaitPromise = ScriptPromiseProperty<Member<ReadableStream>, ToV8UndefinedGenerator, RefPtrWillBeMember<DOMException>>;
+ using ClosedPromise = ScriptPromiseProperty<Member<ReadableStream>, ToV8UndefinedGenerator, RefPtrWillBeMember<DOMException>>;
virtual bool isQueueEmpty() const = 0;
virtual void clearQueue() = 0;
@@ -84,7 +103,9 @@ private:
Member<WaitPromise> m_ready;
Member<ClosedPromise> m_closed;
+
RefPtrWillBeMember<DOMException> m_exception;
+ Member<ExclusiveStreamReader> m_reader;
};
} // namespace blink
« no previous file with comments | « Source/core/streams/ExclusiveStreamReaderTest.cpp ('k') | Source/core/streams/ReadableStream.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698