OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "core/streams/ReadableStreamReader.h" | 5 #include "core/streams/ReadableStreamReader.h" |
6 | 6 |
7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
9 #include "bindings/core/v8/ToV8.h" | 9 #include "bindings/core/v8/ToV8.h" |
10 #include "bindings/core/v8/V8ThrowException.h" | 10 #include "bindings/core/v8/V8ThrowException.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 private: | 42 private: |
43 StringCapturingFunction(ScriptState* scriptState, String* value) | 43 StringCapturingFunction(ScriptState* scriptState, String* value) |
44 : ScriptFunction(scriptState) | 44 : ScriptFunction(scriptState) |
45 , m_value(value) | 45 , m_value(value) |
46 { | 46 { |
47 } | 47 } |
48 | 48 |
49 ScriptValue call(ScriptValue value) override | 49 ScriptValue call(ScriptValue value) override |
50 { | 50 { |
51 ASSERT(!value.isEmpty()); | 51 ASSERT(!value.isEmpty()); |
52 *m_value = toCoreString(value.v8Value()->ToString(scriptState()->context
()).ToLocalChecked()); | 52 *m_value = toCoreString(value.v8Value()->ToString(getScriptState()->cont
ext()).ToLocalChecked()); |
53 return value; | 53 return value; |
54 } | 54 } |
55 | 55 |
56 String* m_value; | 56 String* m_value; |
57 }; | 57 }; |
58 | 58 |
59 class ReadResultCapturingFunction final : public ScriptFunction { | 59 class ReadResultCapturingFunction final : public ScriptFunction { |
60 public: | 60 public: |
61 static v8::Local<v8::Function> createFunction(ScriptState* scriptState, Read
Result* value) | 61 static v8::Local<v8::Function> createFunction(ScriptState* scriptState, Read
Result* value) |
62 { | 62 { |
63 ReadResultCapturingFunction* self = new ReadResultCapturingFunction(scri
ptState, value); | 63 ReadResultCapturingFunction* self = new ReadResultCapturingFunction(scri
ptState, value); |
64 return self->bindToV8Function(); | 64 return self->bindToV8Function(); |
65 } | 65 } |
66 | 66 |
67 private: | 67 private: |
68 ReadResultCapturingFunction(ScriptState* scriptState, ReadResult* value) | 68 ReadResultCapturingFunction(ScriptState* scriptState, ReadResult* value) |
69 : ScriptFunction(scriptState) | 69 : ScriptFunction(scriptState) |
70 , m_result(value) | 70 , m_result(value) |
71 { | 71 { |
72 } | 72 } |
73 | 73 |
74 ScriptValue call(ScriptValue result) override | 74 ScriptValue call(ScriptValue result) override |
75 { | 75 { |
76 ASSERT(!result.isEmpty()); | 76 ASSERT(!result.isEmpty()); |
77 v8::Isolate* isolate = scriptState()->isolate(); | 77 v8::Isolate* isolate = getScriptState()->isolate(); |
78 if (!result.isObject()) { | 78 if (!result.isObject()) { |
79 return result; | 79 return result; |
80 } | 80 } |
81 v8::Local<v8::Object> object = result.v8Value().As<v8::Object>(); | 81 v8::Local<v8::Object> object = result.v8Value().As<v8::Object>(); |
82 v8::Local<v8::String> doneString = v8String(isolate, "done"); | 82 v8::Local<v8::String> doneString = v8String(isolate, "done"); |
83 v8::Local<v8::String> valueString = v8String(isolate, "value"); | 83 v8::Local<v8::String> valueString = v8String(isolate, "value"); |
84 v8::Local<v8::Context> context = scriptState()->context(); | 84 v8::Local<v8::Context> context = getScriptState()->context(); |
85 v8::Maybe<bool> hasDone = object->Has(context, doneString); | 85 v8::Maybe<bool> hasDone = object->Has(context, doneString); |
86 v8::Maybe<bool> hasValue = object->Has(context, valueString); | 86 v8::Maybe<bool> hasValue = object->Has(context, valueString); |
87 | 87 |
88 if (hasDone.IsNothing() || !hasDone.FromJust() || hasValue.IsNothing() |
| !hasValue.FromJust()) { | 88 if (hasDone.IsNothing() || !hasDone.FromJust() || hasValue.IsNothing() |
| !hasValue.FromJust()) { |
89 return result; | 89 return result; |
90 } | 90 } |
91 | 91 |
92 v8::Local<v8::Value> done; | 92 v8::Local<v8::Value> done; |
93 v8::Local<v8::Value> value; | 93 v8::Local<v8::Value> value; |
94 | 94 |
95 if (!object->Get(context, doneString).ToLocal(&done) || !object->Get(con
text, valueString).ToLocal(&value) || !done->IsBoolean()) { | 95 if (!object->Get(context, doneString).ToLocal(&done) || !object->Get(con
text, valueString).ToLocal(&value) || !done->IsBoolean()) { |
96 return result; | 96 return result; |
97 } | 97 } |
98 | 98 |
99 m_result->isSet = true; | 99 m_result->isSet = true; |
100 m_result->isDone = done.As<v8::Boolean>()->Value(); | 100 m_result->isDone = done.As<v8::Boolean>()->Value(); |
101 m_result->valueString = toCoreString(value->ToString(scriptState()->cont
ext()).ToLocalChecked()); | 101 m_result->valueString = toCoreString(value->ToString(getScriptState()->c
ontext()).ToLocalChecked()); |
102 return result; | 102 return result; |
103 } | 103 } |
104 | 104 |
105 ReadResult* m_result; | 105 ReadResult* m_result; |
106 }; | 106 }; |
107 | 107 |
108 class NoopUnderlyingSource final : public GarbageCollectedFinalized<NoopUnderlyi
ngSource>, public UnderlyingSource { | 108 class NoopUnderlyingSource final : public GarbageCollectedFinalized<NoopUnderlyi
ngSource>, public UnderlyingSource { |
109 USING_GARBAGE_COLLECTED_MIXIN(NoopUnderlyingSource); | 109 USING_GARBAGE_COLLECTED_MIXIN(NoopUnderlyingSource); |
110 public: | 110 public: |
111 ~NoopUnderlyingSource() override { } | 111 ~NoopUnderlyingSource() override { } |
(...skipping 17 matching lines...) Expand all Loading... |
129 m_stream->didSourceStart(); | 129 m_stream->didSourceStart(); |
130 } | 130 } |
131 | 131 |
132 ~ReadableStreamReaderTest() override | 132 ~ReadableStreamReaderTest() override |
133 { | 133 { |
134 // We need to call |error| in order to make | 134 // We need to call |error| in order to make |
135 // ActiveDOMObject::hasPendingActivity return false. | 135 // ActiveDOMObject::hasPendingActivity return false. |
136 m_stream->error(DOMException::create(AbortError, "done")); | 136 m_stream->error(DOMException::create(AbortError, "done")); |
137 } | 137 } |
138 | 138 |
139 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume
nt().frame()); } | 139 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc
ument().frame()); } |
140 v8::Isolate* isolate() { return scriptState()->isolate(); } | 140 v8::Isolate* isolate() { return getScriptState()->isolate(); } |
141 ExecutionContext* executionContext() { return scriptState()->executionContex
t(); } | 141 ExecutionContext* getExecutionContext() { return getScriptState()->getExecut
ionContext(); } |
142 | 142 |
143 v8::Local<v8::Function> createCaptor(String* value) | 143 v8::Local<v8::Function> createCaptor(String* value) |
144 { | 144 { |
145 return StringCapturingFunction::createFunction(scriptState(), value); | 145 return StringCapturingFunction::createFunction(getScriptState(), value); |
146 } | 146 } |
147 | 147 |
148 v8::Local<v8::Function> createResultCaptor(ReadResult* value) | 148 v8::Local<v8::Function> createResultCaptor(ReadResult* value) |
149 { | 149 { |
150 return ReadResultCapturingFunction::createFunction(scriptState(), value)
; | 150 return ReadResultCapturingFunction::createFunction(getScriptState(), val
ue); |
151 } | 151 } |
152 | 152 |
153 OwnPtr<DummyPageHolder> m_page; | 153 OwnPtr<DummyPageHolder> m_page; |
154 Persistent<StringStream> m_stream; | 154 Persistent<StringStream> m_stream; |
155 }; | 155 }; |
156 | 156 |
157 TEST_F(ReadableStreamReaderTest, Construct) | 157 TEST_F(ReadableStreamReaderTest, Construct) |
158 { | 158 { |
159 ScriptState::Scope scope(scriptState()); | 159 ScriptState::Scope scope(getScriptState()); |
160 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 160 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
161 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 161 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
162 EXPECT_TRUE(reader->isActive()); | 162 EXPECT_TRUE(reader->isActive()); |
163 EXPECT_FALSE(exceptionState.hadException()); | 163 EXPECT_FALSE(exceptionState.hadException()); |
164 } | 164 } |
165 | 165 |
166 TEST_F(ReadableStreamReaderTest, Release) | 166 TEST_F(ReadableStreamReaderTest, Release) |
167 { | 167 { |
168 ScriptState::Scope scope(scriptState()); | 168 ScriptState::Scope scope(getScriptState()); |
169 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 169 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
170 String onFulfilled, onRejected; | 170 String onFulfilled, onRejected; |
171 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 171 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
172 EXPECT_TRUE(reader->isActive()); | 172 EXPECT_TRUE(reader->isActive()); |
173 | 173 |
174 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(
&onRejected)); | 174 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt
or(&onRejected)); |
175 reader->releaseLock(exceptionState); | 175 reader->releaseLock(exceptionState); |
176 EXPECT_FALSE(reader->isActive()); | 176 EXPECT_FALSE(reader->isActive()); |
177 EXPECT_FALSE(exceptionState.hadException()); | 177 EXPECT_FALSE(exceptionState.hadException()); |
178 | 178 |
179 EXPECT_TRUE(onFulfilled.isNull()); | 179 EXPECT_TRUE(onFulfilled.isNull()); |
180 EXPECT_TRUE(onRejected.isNull()); | 180 EXPECT_TRUE(onRejected.isNull()); |
181 | 181 |
182 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 182 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
183 EXPECT_TRUE(onFulfilled.isNull()); | 183 EXPECT_TRUE(onFulfilled.isNull()); |
184 EXPECT_EQ("AbortError: the reader is already released", onRejected); | 184 EXPECT_EQ("AbortError: the reader is already released", onRejected); |
185 | 185 |
186 ReadableStreamReader* another = new ReadableStreamReader(executionContext(),
m_stream); | 186 ReadableStreamReader* another = new ReadableStreamReader(getExecutionContext
(), m_stream); |
187 EXPECT_TRUE(another->isActive()); | 187 EXPECT_TRUE(another->isActive()); |
188 EXPECT_FALSE(reader->isActive()); | 188 EXPECT_FALSE(reader->isActive()); |
189 reader->releaseLock(exceptionState); | 189 reader->releaseLock(exceptionState); |
190 EXPECT_TRUE(another->isActive()); | 190 EXPECT_TRUE(another->isActive()); |
191 EXPECT_FALSE(reader->isActive()); | 191 EXPECT_FALSE(reader->isActive()); |
192 EXPECT_FALSE(exceptionState.hadException()); | 192 EXPECT_FALSE(exceptionState.hadException()); |
193 } | 193 } |
194 | 194 |
195 TEST_F(ReadableStreamReaderTest, ReadAfterRelease) | 195 TEST_F(ReadableStreamReaderTest, ReadAfterRelease) |
196 { | 196 { |
197 ScriptState::Scope scope(scriptState()); | 197 ScriptState::Scope scope(getScriptState()); |
198 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 198 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
199 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 199 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
200 EXPECT_TRUE(reader->isActive()); | 200 EXPECT_TRUE(reader->isActive()); |
201 reader->releaseLock(exceptionState); | 201 reader->releaseLock(exceptionState); |
202 EXPECT_FALSE(exceptionState.hadException()); | 202 EXPECT_FALSE(exceptionState.hadException()); |
203 EXPECT_FALSE(reader->isActive()); | 203 EXPECT_FALSE(reader->isActive()); |
204 | 204 |
205 ReadResult result; | 205 ReadResult result; |
206 String onRejected; | 206 String onRejected; |
207 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 207 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onRejected)); |
208 | 208 |
209 EXPECT_FALSE(result.isSet); | 209 EXPECT_FALSE(result.isSet); |
210 EXPECT_TRUE(onRejected.isNull()); | 210 EXPECT_TRUE(onRejected.isNull()); |
211 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 211 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
212 | 212 |
213 EXPECT_FALSE(result.isSet); | 213 EXPECT_FALSE(result.isSet); |
214 EXPECT_EQ("TypeError: the reader is already released", onRejected); | 214 EXPECT_EQ("TypeError: the reader is already released", onRejected); |
215 EXPECT_FALSE(exceptionState.hadException()); | 215 EXPECT_FALSE(exceptionState.hadException()); |
216 } | 216 } |
217 | 217 |
218 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading) | 218 TEST_F(ReadableStreamReaderTest, ReleaseShouldFailWhenCalledWhileReading) |
219 { | 219 { |
220 ScriptState::Scope scope(scriptState()); | 220 ScriptState::Scope scope(getScriptState()); |
221 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 221 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
222 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 222 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
223 EXPECT_TRUE(reader->isActive()); | 223 EXPECT_TRUE(reader->isActive()); |
224 reader->read(scriptState()); | 224 reader->read(getScriptState()); |
225 | 225 |
226 reader->releaseLock(exceptionState); | 226 reader->releaseLock(exceptionState); |
227 EXPECT_TRUE(reader->isActive()); | 227 EXPECT_TRUE(reader->isActive()); |
228 EXPECT_TRUE(exceptionState.hadException()); | 228 EXPECT_TRUE(exceptionState.hadException()); |
229 exceptionState.clearException(); | 229 exceptionState.clearException(); |
230 | 230 |
231 m_stream->enqueue("hello"); | 231 m_stream->enqueue("hello"); |
232 reader->releaseLock(exceptionState); | 232 reader->releaseLock(exceptionState); |
233 EXPECT_FALSE(reader->isActive()); | 233 EXPECT_FALSE(reader->isActive()); |
234 EXPECT_FALSE(exceptionState.hadException()); | 234 EXPECT_FALSE(exceptionState.hadException()); |
235 } | 235 } |
236 | 236 |
237 TEST_F(ReadableStreamReaderTest, EnqueueThenRead) | 237 TEST_F(ReadableStreamReaderTest, EnqueueThenRead) |
238 { | 238 { |
239 ScriptState::Scope scope(scriptState()); | 239 ScriptState::Scope scope(getScriptState()); |
240 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 240 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
241 m_stream->enqueue("hello"); | 241 m_stream->enqueue("hello"); |
242 m_stream->enqueue("world"); | 242 m_stream->enqueue("world"); |
243 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 243 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
244 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 244 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
245 | 245 |
246 ReadResult result; | 246 ReadResult result; |
247 String onRejected; | 247 String onRejected; |
248 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 248 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onRejected)); |
249 | 249 |
250 EXPECT_FALSE(result.isSet); | 250 EXPECT_FALSE(result.isSet); |
251 EXPECT_TRUE(onRejected.isNull()); | 251 EXPECT_TRUE(onRejected.isNull()); |
252 | 252 |
253 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 253 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
254 | 254 |
255 EXPECT_TRUE(result.isSet); | 255 EXPECT_TRUE(result.isSet); |
256 EXPECT_FALSE(result.isDone); | 256 EXPECT_FALSE(result.isDone); |
257 EXPECT_EQ("hello", result.valueString); | 257 EXPECT_EQ("hello", result.valueString); |
258 EXPECT_TRUE(onRejected.isNull()); | 258 EXPECT_TRUE(onRejected.isNull()); |
259 | 259 |
260 ReadResult result2; | 260 ReadResult result2; |
261 String onRejected2; | 261 String onRejected2; |
262 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); | 262 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt
or(&onRejected2)); |
263 | 263 |
264 EXPECT_FALSE(result2.isSet); | 264 EXPECT_FALSE(result2.isSet); |
265 EXPECT_TRUE(onRejected2.isNull()); | 265 EXPECT_TRUE(onRejected2.isNull()); |
266 | 266 |
267 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 267 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
268 | 268 |
269 EXPECT_TRUE(result2.isSet); | 269 EXPECT_TRUE(result2.isSet); |
270 EXPECT_FALSE(result2.isDone); | 270 EXPECT_FALSE(result2.isDone); |
271 EXPECT_EQ("world", result2.valueString); | 271 EXPECT_EQ("world", result2.valueString); |
272 EXPECT_TRUE(onRejected2.isNull()); | 272 EXPECT_TRUE(onRejected2.isNull()); |
273 EXPECT_FALSE(exceptionState.hadException()); | 273 EXPECT_FALSE(exceptionState.hadException()); |
274 } | 274 } |
275 | 275 |
276 TEST_F(ReadableStreamReaderTest, ReadThenEnqueue) | 276 TEST_F(ReadableStreamReaderTest, ReadThenEnqueue) |
277 { | 277 { |
278 ScriptState::Scope scope(scriptState()); | 278 ScriptState::Scope scope(getScriptState()); |
279 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 279 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
280 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 280 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
281 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 281 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
282 | 282 |
283 ReadResult result, result2; | 283 ReadResult result, result2; |
284 String onRejected, onRejected2; | 284 String onRejected, onRejected2; |
285 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 285 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onRejected)); |
286 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); | 286 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt
or(&onRejected2)); |
287 | 287 |
288 EXPECT_FALSE(result.isSet); | 288 EXPECT_FALSE(result.isSet); |
289 EXPECT_TRUE(onRejected.isNull()); | 289 EXPECT_TRUE(onRejected.isNull()); |
290 EXPECT_FALSE(result2.isSet); | 290 EXPECT_FALSE(result2.isSet); |
291 EXPECT_TRUE(onRejected2.isNull()); | 291 EXPECT_TRUE(onRejected2.isNull()); |
292 | 292 |
293 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 293 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
294 | 294 |
295 EXPECT_FALSE(result.isSet); | 295 EXPECT_FALSE(result.isSet); |
296 EXPECT_TRUE(onRejected.isNull()); | 296 EXPECT_TRUE(onRejected.isNull()); |
(...skipping 15 matching lines...) Expand all Loading... |
312 | 312 |
313 EXPECT_TRUE(result2.isSet); | 313 EXPECT_TRUE(result2.isSet); |
314 EXPECT_FALSE(result2.isDone); | 314 EXPECT_FALSE(result2.isDone); |
315 EXPECT_EQ("world", result2.valueString); | 315 EXPECT_EQ("world", result2.valueString); |
316 EXPECT_TRUE(onRejected2.isNull()); | 316 EXPECT_TRUE(onRejected2.isNull()); |
317 EXPECT_FALSE(exceptionState.hadException()); | 317 EXPECT_FALSE(exceptionState.hadException()); |
318 } | 318 } |
319 | 319 |
320 TEST_F(ReadableStreamReaderTest, ClosedReader) | 320 TEST_F(ReadableStreamReaderTest, ClosedReader) |
321 { | 321 { |
322 ScriptState::Scope scope(scriptState()); | 322 ScriptState::Scope scope(getScriptState()); |
323 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 323 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
324 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 324 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
325 | 325 |
326 m_stream->close(); | 326 m_stream->close(); |
327 | 327 |
328 EXPECT_TRUE(reader->isActive()); | 328 EXPECT_TRUE(reader->isActive()); |
329 | 329 |
330 String onClosedFulfilled, onClosedRejected; | 330 String onClosedFulfilled, onClosedRejected; |
331 ReadResult result; | 331 ReadResult result; |
332 String onReadRejected; | 332 String onReadRejected; |
333 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 333 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
334 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); | 334 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea
teCaptor(&onClosedRejected)); |
335 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onReadRejected)); | 335 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onReadRejected)); |
336 EXPECT_TRUE(onClosedFulfilled.isNull()); | 336 EXPECT_TRUE(onClosedFulfilled.isNull()); |
337 EXPECT_TRUE(onClosedRejected.isNull()); | 337 EXPECT_TRUE(onClosedRejected.isNull()); |
338 EXPECT_FALSE(result.isSet); | 338 EXPECT_FALSE(result.isSet); |
339 EXPECT_TRUE(onReadRejected.isNull()); | 339 EXPECT_TRUE(onReadRejected.isNull()); |
340 | 340 |
341 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 341 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
342 EXPECT_EQ("undefined", onClosedFulfilled); | 342 EXPECT_EQ("undefined", onClosedFulfilled); |
343 EXPECT_TRUE(onClosedRejected.isNull()); | 343 EXPECT_TRUE(onClosedRejected.isNull()); |
344 EXPECT_TRUE(result.isSet); | 344 EXPECT_TRUE(result.isSet); |
345 EXPECT_TRUE(result.isDone); | 345 EXPECT_TRUE(result.isDone); |
346 EXPECT_EQ("undefined", result.valueString); | 346 EXPECT_EQ("undefined", result.valueString); |
347 EXPECT_TRUE(onReadRejected.isNull()); | 347 EXPECT_TRUE(onReadRejected.isNull()); |
348 EXPECT_FALSE(exceptionState.hadException()); | 348 EXPECT_FALSE(exceptionState.hadException()); |
349 } | 349 } |
350 | 350 |
351 TEST_F(ReadableStreamReaderTest, ErroredReader) | 351 TEST_F(ReadableStreamReaderTest, ErroredReader) |
352 { | 352 { |
353 ScriptState::Scope scope(scriptState()); | 353 ScriptState::Scope scope(getScriptState()); |
354 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 354 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
355 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 355 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
356 | 356 |
357 m_stream->error(DOMException::create(SyntaxError, "some error")); | 357 m_stream->error(DOMException::create(SyntaxError, "some error")); |
358 | 358 |
359 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); | 359 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); |
360 EXPECT_TRUE(reader->isActive()); | 360 EXPECT_TRUE(reader->isActive()); |
361 | 361 |
362 String onClosedFulfilled, onClosedRejected; | 362 String onClosedFulfilled, onClosedRejected; |
363 String onReadFulfilled, onReadRejected; | 363 String onReadFulfilled, onReadRejected; |
364 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 364 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
365 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); | 365 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea
teCaptor(&onClosedRejected)); |
366 reader->read(scriptState()).then(createCaptor(&onReadFulfilled), createCapto
r(&onReadRejected)); | 366 reader->read(getScriptState()).then(createCaptor(&onReadFulfilled), createCa
ptor(&onReadRejected)); |
367 EXPECT_TRUE(onClosedFulfilled.isNull()); | 367 EXPECT_TRUE(onClosedFulfilled.isNull()); |
368 EXPECT_TRUE(onClosedRejected.isNull()); | 368 EXPECT_TRUE(onClosedRejected.isNull()); |
369 EXPECT_TRUE(onReadFulfilled.isNull()); | 369 EXPECT_TRUE(onReadFulfilled.isNull()); |
370 EXPECT_TRUE(onReadRejected.isNull()); | 370 EXPECT_TRUE(onReadRejected.isNull()); |
371 | 371 |
372 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 372 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
373 EXPECT_TRUE(onClosedFulfilled.isNull()); | 373 EXPECT_TRUE(onClosedFulfilled.isNull()); |
374 EXPECT_EQ("SyntaxError: some error", onClosedRejected); | 374 EXPECT_EQ("SyntaxError: some error", onClosedRejected); |
375 EXPECT_TRUE(onReadFulfilled.isNull()); | 375 EXPECT_TRUE(onReadFulfilled.isNull()); |
376 EXPECT_EQ("SyntaxError: some error", onReadRejected); | 376 EXPECT_EQ("SyntaxError: some error", onReadRejected); |
377 EXPECT_FALSE(exceptionState.hadException()); | 377 EXPECT_FALSE(exceptionState.hadException()); |
378 } | 378 } |
379 | 379 |
380 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenClosed) | 380 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenClosed) |
381 { | 381 { |
382 ScriptState::Scope scope(scriptState()); | 382 ScriptState::Scope scope(getScriptState()); |
383 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 383 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
384 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 384 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
385 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 385 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
386 | 386 |
387 ReadResult result, result2; | 387 ReadResult result, result2; |
388 String onRejected, onRejected2; | 388 String onRejected, onRejected2; |
389 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 389 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onRejected)); |
390 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); | 390 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt
or(&onRejected2)); |
391 | 391 |
392 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 392 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
393 EXPECT_FALSE(result.isSet); | 393 EXPECT_FALSE(result.isSet); |
394 EXPECT_TRUE(onRejected.isNull()); | 394 EXPECT_TRUE(onRejected.isNull()); |
395 EXPECT_FALSE(result2.isSet); | 395 EXPECT_FALSE(result2.isSet); |
396 EXPECT_TRUE(onRejected2.isNull()); | 396 EXPECT_TRUE(onRejected2.isNull()); |
397 | 397 |
398 m_stream->close(); | 398 m_stream->close(); |
399 EXPECT_FALSE(result.isSet); | 399 EXPECT_FALSE(result.isSet); |
400 EXPECT_TRUE(onRejected.isNull()); | 400 EXPECT_TRUE(onRejected.isNull()); |
401 EXPECT_FALSE(result2.isSet); | 401 EXPECT_FALSE(result2.isSet); |
402 EXPECT_TRUE(onRejected2.isNull()); | 402 EXPECT_TRUE(onRejected2.isNull()); |
403 | 403 |
404 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 404 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
405 | 405 |
406 EXPECT_TRUE(result.isSet); | 406 EXPECT_TRUE(result.isSet); |
407 EXPECT_TRUE(result.isDone); | 407 EXPECT_TRUE(result.isDone); |
408 EXPECT_EQ("undefined", result.valueString); | 408 EXPECT_EQ("undefined", result.valueString); |
409 EXPECT_TRUE(onRejected.isNull()); | 409 EXPECT_TRUE(onRejected.isNull()); |
410 | 410 |
411 EXPECT_TRUE(result2.isSet); | 411 EXPECT_TRUE(result2.isSet); |
412 EXPECT_TRUE(result2.isDone); | 412 EXPECT_TRUE(result2.isDone); |
413 EXPECT_EQ("undefined", result2.valueString); | 413 EXPECT_EQ("undefined", result2.valueString); |
414 EXPECT_TRUE(onRejected2.isNull()); | 414 EXPECT_TRUE(onRejected2.isNull()); |
415 EXPECT_FALSE(exceptionState.hadException()); | 415 EXPECT_FALSE(exceptionState.hadException()); |
416 } | 416 } |
417 | 417 |
418 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeRejectedWhenErrored) | 418 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeRejectedWhenErrored) |
419 { | 419 { |
420 ScriptState::Scope scope(scriptState()); | 420 ScriptState::Scope scope(getScriptState()); |
421 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 421 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
422 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 422 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
423 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 423 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
424 | 424 |
425 String onFulfilled, onFulfilled2; | 425 String onFulfilled, onFulfilled2; |
426 String onRejected, onRejected2; | 426 String onRejected, onRejected2; |
427 reader->read(scriptState()).then(createCaptor(&onFulfilled), createCaptor(&o
nRejected)); | 427 reader->read(getScriptState()).then(createCaptor(&onFulfilled), createCaptor
(&onRejected)); |
428 reader->read(scriptState()).then(createCaptor(&onFulfilled2), createCaptor(&
onRejected2)); | 428 reader->read(getScriptState()).then(createCaptor(&onFulfilled2), createCapto
r(&onRejected2)); |
429 | 429 |
430 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 430 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
431 EXPECT_TRUE(onFulfilled.isNull()); | 431 EXPECT_TRUE(onFulfilled.isNull()); |
432 EXPECT_TRUE(onRejected.isNull()); | 432 EXPECT_TRUE(onRejected.isNull()); |
433 EXPECT_TRUE(onFulfilled2.isNull()); | 433 EXPECT_TRUE(onFulfilled2.isNull()); |
434 EXPECT_TRUE(onRejected2.isNull()); | 434 EXPECT_TRUE(onRejected2.isNull()); |
435 | 435 |
436 m_stream->error(DOMException::create(SyntaxError, "some error")); | 436 m_stream->error(DOMException::create(SyntaxError, "some error")); |
437 EXPECT_TRUE(onFulfilled.isNull()); | 437 EXPECT_TRUE(onFulfilled.isNull()); |
438 EXPECT_TRUE(onRejected.isNull()); | 438 EXPECT_TRUE(onRejected.isNull()); |
439 EXPECT_TRUE(onFulfilled2.isNull()); | 439 EXPECT_TRUE(onFulfilled2.isNull()); |
440 EXPECT_TRUE(onRejected2.isNull()); | 440 EXPECT_TRUE(onRejected2.isNull()); |
441 | 441 |
442 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 442 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
443 | 443 |
444 EXPECT_TRUE(onFulfilled.isNull()); | 444 EXPECT_TRUE(onFulfilled.isNull()); |
445 EXPECT_EQ(onRejected, "SyntaxError: some error"); | 445 EXPECT_EQ(onRejected, "SyntaxError: some error"); |
446 EXPECT_TRUE(onFulfilled2.isNull()); | 446 EXPECT_TRUE(onFulfilled2.isNull()); |
447 EXPECT_EQ(onRejected2, "SyntaxError: some error"); | 447 EXPECT_EQ(onRejected2, "SyntaxError: some error"); |
448 EXPECT_FALSE(exceptionState.hadException()); | 448 EXPECT_FALSE(exceptionState.hadException()); |
449 } | 449 } |
450 | 450 |
451 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenCanceled) | 451 TEST_F(ReadableStreamReaderTest, PendingReadsShouldBeResolvedWhenCanceled) |
452 { | 452 { |
453 ScriptState::Scope scope(scriptState()); | 453 ScriptState::Scope scope(getScriptState()); |
454 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 454 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
455 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 455 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
456 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 456 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
457 | 457 |
458 ReadResult result, result2; | 458 ReadResult result, result2; |
459 String onRejected, onRejected2; | 459 String onRejected, onRejected2; |
460 reader->read(scriptState()).then(createResultCaptor(&result), createCaptor(&
onRejected)); | 460 reader->read(getScriptState()).then(createResultCaptor(&result), createCapto
r(&onRejected)); |
461 reader->read(scriptState()).then(createResultCaptor(&result2), createCaptor(
&onRejected2)); | 461 reader->read(getScriptState()).then(createResultCaptor(&result2), createCapt
or(&onRejected2)); |
462 | 462 |
463 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 463 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
464 EXPECT_FALSE(result.isSet); | 464 EXPECT_FALSE(result.isSet); |
465 EXPECT_TRUE(onRejected.isNull()); | 465 EXPECT_TRUE(onRejected.isNull()); |
466 EXPECT_FALSE(result2.isSet); | 466 EXPECT_FALSE(result2.isSet); |
467 EXPECT_TRUE(onRejected2.isNull()); | 467 EXPECT_TRUE(onRejected2.isNull()); |
468 | 468 |
469 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))); | 469 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined
(isolate()))); |
470 EXPECT_TRUE(reader->isActive()); | 470 EXPECT_TRUE(reader->isActive()); |
471 EXPECT_FALSE(result.isSet); | 471 EXPECT_FALSE(result.isSet); |
472 EXPECT_TRUE(onRejected.isNull()); | 472 EXPECT_TRUE(onRejected.isNull()); |
473 EXPECT_FALSE(result2.isSet); | 473 EXPECT_FALSE(result2.isSet); |
474 EXPECT_TRUE(onRejected2.isNull()); | 474 EXPECT_TRUE(onRejected2.isNull()); |
475 | 475 |
476 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 476 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
477 | 477 |
478 EXPECT_TRUE(result.isSet); | 478 EXPECT_TRUE(result.isSet); |
479 EXPECT_TRUE(result.isDone); | 479 EXPECT_TRUE(result.isDone); |
480 EXPECT_EQ("undefined", result.valueString); | 480 EXPECT_EQ("undefined", result.valueString); |
481 EXPECT_TRUE(onRejected.isNull()); | 481 EXPECT_TRUE(onRejected.isNull()); |
482 | 482 |
483 EXPECT_TRUE(result2.isSet); | 483 EXPECT_TRUE(result2.isSet); |
484 EXPECT_TRUE(result2.isDone); | 484 EXPECT_TRUE(result2.isDone); |
485 EXPECT_EQ("undefined", result2.valueString); | 485 EXPECT_EQ("undefined", result2.valueString); |
486 EXPECT_TRUE(onRejected2.isNull()); | 486 EXPECT_TRUE(onRejected2.isNull()); |
487 EXPECT_FALSE(exceptionState.hadException()); | 487 EXPECT_FALSE(exceptionState.hadException()); |
488 } | 488 } |
489 | 489 |
490 TEST_F(ReadableStreamReaderTest, CancelShouldNotWorkWhenNotActive) | 490 TEST_F(ReadableStreamReaderTest, CancelShouldNotWorkWhenNotActive) |
491 { | 491 { |
492 ScriptState::Scope scope(scriptState()); | 492 ScriptState::Scope scope(getScriptState()); |
493 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 493 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
494 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 494 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
495 reader->releaseLock(exceptionState); | 495 reader->releaseLock(exceptionState); |
496 EXPECT_FALSE(reader->isActive()); | 496 EXPECT_FALSE(reader->isActive()); |
497 | 497 |
498 String onFulfilled, onRejected; | 498 String onFulfilled, onRejected; |
499 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); | 499 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined
(isolate()))).then(createCaptor(&onFulfilled), createCaptor(&onRejected)); |
500 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 500 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
501 | 501 |
502 EXPECT_TRUE(onFulfilled.isNull()); | 502 EXPECT_TRUE(onFulfilled.isNull()); |
503 EXPECT_TRUE(onRejected.isNull()); | 503 EXPECT_TRUE(onRejected.isNull()); |
504 | 504 |
505 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 505 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
506 | 506 |
507 EXPECT_TRUE(onFulfilled.isNull()); | 507 EXPECT_TRUE(onFulfilled.isNull()); |
508 EXPECT_EQ("TypeError: the reader is already released", onRejected); | 508 EXPECT_EQ("TypeError: the reader is already released", onRejected); |
509 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 509 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
510 EXPECT_FALSE(exceptionState.hadException()); | 510 EXPECT_FALSE(exceptionState.hadException()); |
511 } | 511 } |
512 | 512 |
513 TEST_F(ReadableStreamReaderTest, Cancel) | 513 TEST_F(ReadableStreamReaderTest, Cancel) |
514 { | 514 { |
515 ScriptState::Scope scope(scriptState()); | 515 ScriptState::Scope scope(getScriptState()); |
516 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 516 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
517 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 517 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
518 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 518 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
519 | 519 |
520 String onClosedFulfilled, onClosedRejected; | 520 String onClosedFulfilled, onClosedRejected; |
521 String onCancelFulfilled, onCancelRejected; | 521 String onCancelFulfilled, onCancelRejected; |
522 reader->closed(scriptState()).then(createCaptor(&onClosedFulfilled), createC
aptor(&onClosedRejected)); | 522 reader->closed(getScriptState()).then(createCaptor(&onClosedFulfilled), crea
teCaptor(&onClosedRejected)); |
523 reader->cancel(scriptState(), ScriptValue(scriptState(), v8::Undefined(isola
te()))).then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRejected)); | 523 reader->cancel(getScriptState(), ScriptValue(getScriptState(), v8::Undefined
(isolate()))).then(createCaptor(&onCancelFulfilled), createCaptor(&onCancelRejec
ted)); |
524 | 524 |
525 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); | 525 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); |
526 EXPECT_TRUE(onClosedFulfilled.isNull()); | 526 EXPECT_TRUE(onClosedFulfilled.isNull()); |
527 EXPECT_TRUE(onClosedRejected.isNull()); | 527 EXPECT_TRUE(onClosedRejected.isNull()); |
528 EXPECT_TRUE(onCancelFulfilled.isNull()); | 528 EXPECT_TRUE(onCancelFulfilled.isNull()); |
529 EXPECT_TRUE(onCancelRejected.isNull()); | 529 EXPECT_TRUE(onCancelRejected.isNull()); |
530 | 530 |
531 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 531 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
532 EXPECT_EQ("undefined", onClosedFulfilled); | 532 EXPECT_EQ("undefined", onClosedFulfilled); |
533 EXPECT_TRUE(onClosedRejected.isNull()); | 533 EXPECT_TRUE(onClosedRejected.isNull()); |
534 EXPECT_EQ("undefined", onCancelFulfilled); | 534 EXPECT_EQ("undefined", onCancelFulfilled); |
535 EXPECT_TRUE(onCancelRejected.isNull()); | 535 EXPECT_TRUE(onCancelRejected.isNull()); |
536 EXPECT_FALSE(exceptionState.hadException()); | 536 EXPECT_FALSE(exceptionState.hadException()); |
537 } | 537 } |
538 | 538 |
539 TEST_F(ReadableStreamReaderTest, Close) | 539 TEST_F(ReadableStreamReaderTest, Close) |
540 { | 540 { |
541 ScriptState::Scope scope(scriptState()); | 541 ScriptState::Scope scope(getScriptState()); |
542 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 542 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
543 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 543 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
544 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 544 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
545 | 545 |
546 String onFulfilled, onRejected; | 546 String onFulfilled, onRejected; |
547 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(
&onRejected)); | 547 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt
or(&onRejected)); |
548 | 548 |
549 m_stream->close(); | 549 m_stream->close(); |
550 | 550 |
551 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); | 551 EXPECT_EQ(ReadableStream::Closed, m_stream->stateInternal()); |
552 EXPECT_TRUE(onFulfilled.isNull()); | 552 EXPECT_TRUE(onFulfilled.isNull()); |
553 EXPECT_TRUE(onRejected.isNull()); | 553 EXPECT_TRUE(onRejected.isNull()); |
554 | 554 |
555 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 555 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
556 EXPECT_EQ("undefined", onFulfilled); | 556 EXPECT_EQ("undefined", onFulfilled); |
557 EXPECT_TRUE(onRejected.isNull()); | 557 EXPECT_TRUE(onRejected.isNull()); |
558 EXPECT_FALSE(exceptionState.hadException()); | 558 EXPECT_FALSE(exceptionState.hadException()); |
559 } | 559 } |
560 | 560 |
561 TEST_F(ReadableStreamReaderTest, Error) | 561 TEST_F(ReadableStreamReaderTest, Error) |
562 { | 562 { |
563 ScriptState::Scope scope(scriptState()); | 563 ScriptState::Scope scope(getScriptState()); |
564 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", scriptState()->context()->Global(), isolate()); | 564 ExceptionState exceptionState(ExceptionState::ConstructionContext, "property
", "interface", getScriptState()->context()->Global(), isolate()); |
565 ReadableStreamReader* reader = new ReadableStreamReader(executionContext(),
m_stream); | 565 ReadableStreamReader* reader = new ReadableStreamReader(getExecutionContext(
), m_stream); |
566 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); | 566 EXPECT_EQ(ReadableStream::Readable, m_stream->stateInternal()); |
567 | 567 |
568 String onFulfilled, onRejected; | 568 String onFulfilled, onRejected; |
569 reader->closed(scriptState()).then(createCaptor(&onFulfilled), createCaptor(
&onRejected)); | 569 reader->closed(getScriptState()).then(createCaptor(&onFulfilled), createCapt
or(&onRejected)); |
570 | 570 |
571 m_stream->error(DOMException::create(SyntaxError, "some error")); | 571 m_stream->error(DOMException::create(SyntaxError, "some error")); |
572 | 572 |
573 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); | 573 EXPECT_EQ(ReadableStream::Errored, m_stream->stateInternal()); |
574 EXPECT_TRUE(onFulfilled.isNull()); | 574 EXPECT_TRUE(onFulfilled.isNull()); |
575 EXPECT_TRUE(onRejected.isNull()); | 575 EXPECT_TRUE(onRejected.isNull()); |
576 | 576 |
577 v8::MicrotasksScope::PerformCheckpoint(isolate()); | 577 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
578 EXPECT_TRUE(onFulfilled.isNull()); | 578 EXPECT_TRUE(onFulfilled.isNull()); |
579 EXPECT_EQ("SyntaxError: some error", onRejected); | 579 EXPECT_EQ("SyntaxError: some error", onRejected); |
580 EXPECT_FALSE(exceptionState.hadException()); | 580 EXPECT_FALSE(exceptionState.hadException()); |
581 } | 581 } |
582 | 582 |
583 } // namespace | 583 } // namespace |
584 | 584 |
585 } // namespace blink | 585 } // namespace blink |
OLD | NEW |