OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef ReadableStreamImpl_h | 5 #ifndef ReadableStreamImpl_h |
6 #define ReadableStreamImpl_h | 6 #define ReadableStreamImpl_h |
7 | 7 |
8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
9 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 | 111 |
112 // This function is intended to be used by internal code to withdraw | 112 // This function is intended to be used by internal code to withdraw |
113 // queued data. This pulls all data from this stream's queue, but | 113 // queued data. This pulls all data from this stream's queue, but |
114 // ReadableStream public APIs can work with the behavior (i.e. it behaves | 114 // ReadableStream public APIs can work with the behavior (i.e. it behaves |
115 // as if multiple read-one-buffer calls were made). | 115 // as if multiple read-one-buffer calls were made). |
116 void readInternal(Deque<std::pair<typename ChunkTypeTraits::HoldType, size_t
>>& queue); | 116 void readInternal(Deque<std::pair<typename ChunkTypeTraits::HoldType, size_t
>>& queue); |
117 | 117 |
118 DEFINE_INLINE_VIRTUAL_TRACE() | 118 DEFINE_INLINE_VIRTUAL_TRACE() |
119 { | 119 { |
120 visitor->trace(m_strategy); | 120 visitor->trace(m_strategy); |
121 #if ENABLE(OILPAN) | |
122 visitor->trace(m_pendingReads); | 121 visitor->trace(m_pendingReads); |
123 #endif | |
124 ReadableStream::trace(visitor); | 122 ReadableStream::trace(visitor); |
125 } | 123 } |
126 | 124 |
127 private: | 125 private: |
128 #if ENABLE(OILPAN) | |
129 using PendingReads = HeapDeque<Member<ScriptPromiseResolver>>; | 126 using PendingReads = HeapDeque<Member<ScriptPromiseResolver>>; |
130 #else | |
131 using PendingReads = Deque<RefPtr<ScriptPromiseResolver>>; | |
132 #endif | |
133 | 127 |
134 // ReadableStream methods | 128 // ReadableStream methods |
135 bool isQueueEmpty() const override { return m_queue.isEmpty(); } | 129 bool isQueueEmpty() const override { return m_queue.isEmpty(); } |
136 void clearQueue() override | 130 void clearQueue() override |
137 { | 131 { |
138 m_queue.clear(); | 132 m_queue.clear(); |
139 m_totalQueueSize = 0; | 133 m_totalQueueSize = 0; |
140 } | 134 } |
141 | 135 |
142 void resolveAllPendingReadsAsDone() override | 136 void resolveAllPendingReadsAsDone() override |
(...skipping 30 matching lines...) Expand all Loading... |
173 size_t size = m_strategy->size(chunk, this); | 167 size_t size = m_strategy->size(chunk, this); |
174 if (!enqueuePreliminaryCheck()) | 168 if (!enqueuePreliminaryCheck()) |
175 return false; | 169 return false; |
176 | 170 |
177 if (m_pendingReads.isEmpty()) { | 171 if (m_pendingReads.isEmpty()) { |
178 m_queue.append(std::make_pair(chunk, size)); | 172 m_queue.append(std::make_pair(chunk, size)); |
179 m_totalQueueSize += size; | 173 m_totalQueueSize += size; |
180 return enqueuePostAction(); | 174 return enqueuePostAction(); |
181 } | 175 } |
182 | 176 |
183 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = m_pendingReads.takeFirs
t(); | 177 ScriptPromiseResolver* resolver = m_pendingReads.takeFirst(); |
184 ScriptState* scriptState = resolver->scriptState(); | 178 ScriptState* scriptState = resolver->scriptState(); |
185 ScriptState::Scope scope(scriptState); | 179 ScriptState::Scope scope(scriptState); |
186 resolver->resolve(v8IteratorResult(scriptState, chunk)); | 180 resolver->resolve(v8IteratorResult(scriptState, chunk)); |
187 return enqueuePostAction(); | 181 return enqueuePostAction(); |
188 } | 182 } |
189 | 183 |
190 template <typename ChunkTypeTraits> | 184 template <typename ChunkTypeTraits> |
191 ScriptPromise ReadableStreamImpl<ChunkTypeTraits>::read(ScriptState* scriptState
) | 185 ScriptPromise ReadableStreamImpl<ChunkTypeTraits>::read(ScriptState* scriptState
) |
192 { | 186 { |
193 ASSERT(stateInternal() == Readable); | 187 ASSERT(stateInternal() == Readable); |
(...skipping 23 matching lines...) Expand all Loading... |
217 ASSERT(queue.isEmpty()); | 211 ASSERT(queue.isEmpty()); |
218 | 212 |
219 queue.swap(m_queue); | 213 queue.swap(m_queue); |
220 m_totalQueueSize = 0; | 214 m_totalQueueSize = 0; |
221 readInternalPostAction(); | 215 readInternalPostAction(); |
222 } | 216 } |
223 | 217 |
224 } // namespace blink | 218 } // namespace blink |
225 | 219 |
226 #endif // ReadableStreamImpl_h | 220 #endif // ReadableStreamImpl_h |
OLD | NEW |