| 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 |