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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/ReadableStreamBytesConsumer.h

Issue 2365853002: Implement ReadableStreamBytesConsumer (Closed)
Patch Set: git cl format Created 4 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef ReadableStreamBytesConsumer_h
6 #define ReadableStreamBytesConsumer_h
7
8 #include "bindings/core/v8/ScriptValue.h"
9 #include "core/dom/DOMTypedArray.h"
10 #include "modules/ModulesExport.h"
11 #include "modules/fetch/BytesConsumer.h"
12 #include "platform/heap/Handle.h"
13 #include "wtf/Forward.h"
14 #include "wtf/RefPtr.h"
15 #include <memory>
16
17 namespace blink {
18
19 class ScriptState;
20
21 // This class is a BytesConsumer pulling bytes from ReadableStream
22 // implemented with V8 Extras.
23 // The stream will be immediately locked by the consumer and will never be
24 // released.
25 //
26 // The ReadableStreamReader handle held in a ReadableStreamDataConsumerHandle
27 // is weak. A user must guarantee that the ReadableStreamReader object is kept
28 // alive appropriately.
29 class MODULES_EXPORT ReadableStreamBytesConsumer final : public BytesConsumer {
30 WTF_MAKE_NONCOPYABLE(ReadableStreamBytesConsumer);
31 USING_PRE_FINALIZER(ReadableStreamBytesConsumer, dispose);
32
33 public:
34 ReadableStreamBytesConsumer(ScriptState*, ScriptValue streamReader);
35 ~ReadableStreamBytesConsumer() override;
36
37 Result beginRead(const char** buffer, size_t* available) override;
38 Result endRead(size_t readSize) override;
39 void setClient(BytesConsumer::Client*) override;
40 void clearClient() override;
41
42 void cancel() override;
43 PublicState getPublicState() const override;
44 Error getError() const override;
45 String debugName() const override { return "ReadableStreamBytesConsumer"; }
46
47 DECLARE_TRACE();
48
49 private:
50 class OnFulfilled;
51 class OnRejected;
52
53 void dispose();
54 void onRead(DOMUint8Array*);
55 void onReadDone();
56 void onRejected();
57 void notify();
58
59 // |m_reader| is a weak persistent. It should be kept alive by someone
60 // outside of ReadableStreamBytesConsumer.
61 // Holding a ScopedPersistent here is safe in terms of cross-world wrapper
62 // leakage because we read only Uint8Array chunks from the reader.
63 ScopedPersistent<v8::Value> m_reader;
64 RefPtr<ScriptState> m_scriptState;
65 Member<BytesConsumer::Client> m_client;
66 Member<DOMUint8Array> m_pendingBuffer;
67 size_t m_pendingOffset = 0;
68 PublicState m_state = PublicState::ReadableOrWaiting;
69 bool m_isReading = false;
70 };
71
72 } // namespace blink
73
74 #endif // ReadableStreamBytesConsumer_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698