| 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 #include "bindings/core/v8/ScriptPromiseResolver.h" | 5 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptFunction.h" | 7 #include "bindings/core/v8/ScriptFunction.h" |
| 8 #include "bindings/core/v8/ScriptValue.h" | 8 #include "bindings/core/v8/ScriptValue.h" |
| 9 #include "bindings/core/v8/V8Binding.h" | 9 #include "bindings/core/v8/V8Binding.h" |
| 10 #include "core/dom/DOMException.h" | 10 #include "core/dom/DOMException.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 } | 53 } |
| 54 | 54 |
| 55 ~ScriptPromiseResolverTest() override | 55 ~ScriptPromiseResolverTest() override |
| 56 { | 56 { |
| 57 ScriptState::Scope scope(getScriptState()); | 57 ScriptState::Scope scope(getScriptState()); |
| 58 // FIXME: We put this statement here to clear an exception from the | 58 // FIXME: We put this statement here to clear an exception from the |
| 59 // isolate. | 59 // isolate. |
| 60 createClosure(callback, v8::Undefined(isolate()), isolate()); | 60 createClosure(callback, v8::Undefined(isolate()), isolate()); |
| 61 | 61 |
| 62 // Execute all pending microtasks | 62 // Execute all pending microtasks |
| 63 isolate()->RunMicrotasks(); | 63 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 64 } | 64 } |
| 65 | 65 |
| 66 OwnPtr<DummyPageHolder> m_pageHolder; | 66 OwnPtr<DummyPageHolder> m_pageHolder; |
| 67 ScriptState* getScriptState() const { return ScriptState::forMainWorld(&m_pa
geHolder->frame()); } | 67 ScriptState* getScriptState() const { return ScriptState::forMainWorld(&m_pa
geHolder->frame()); } |
| 68 ExecutionContext* getExecutionContext() const { return &m_pageHolder->docume
nt(); } | 68 ExecutionContext* getExecutionContext() const { return &m_pageHolder->docume
nt(); } |
| 69 v8::Isolate* isolate() const { return getScriptState()->isolate(); } | 69 v8::Isolate* isolate() const { return getScriptState()->isolate(); } |
| 70 }; | 70 }; |
| 71 | 71 |
| 72 TEST_F(ScriptPromiseResolverTest, construct) | 72 TEST_F(ScriptPromiseResolverTest, construct) |
| 73 { | 73 { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 89 String onFulfilled, onRejected; | 89 String onFulfilled, onRejected; |
| 90 ASSERT_FALSE(promise.isEmpty()); | 90 ASSERT_FALSE(promise.isEmpty()); |
| 91 { | 91 { |
| 92 ScriptState::Scope scope(getScriptState()); | 92 ScriptState::Scope scope(getScriptState()); |
| 93 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); | 93 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); |
| 94 } | 94 } |
| 95 | 95 |
| 96 EXPECT_EQ(String(), onFulfilled); | 96 EXPECT_EQ(String(), onFulfilled); |
| 97 EXPECT_EQ(String(), onRejected); | 97 EXPECT_EQ(String(), onRejected); |
| 98 | 98 |
| 99 isolate()->RunMicrotasks(); | 99 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 100 | 100 |
| 101 EXPECT_EQ(String(), onFulfilled); | 101 EXPECT_EQ(String(), onFulfilled); |
| 102 EXPECT_EQ(String(), onRejected); | 102 EXPECT_EQ(String(), onRejected); |
| 103 | 103 |
| 104 resolver->resolve("hello"); | 104 resolver->resolve("hello"); |
| 105 | 105 |
| 106 { | 106 { |
| 107 ScriptState::Scope scope(getScriptState()); | 107 ScriptState::Scope scope(getScriptState()); |
| 108 EXPECT_TRUE(resolver->promise().isEmpty()); | 108 EXPECT_TRUE(resolver->promise().isEmpty()); |
| 109 } | 109 } |
| 110 | 110 |
| 111 EXPECT_EQ(String(), onFulfilled); | 111 EXPECT_EQ(String(), onFulfilled); |
| 112 EXPECT_EQ(String(), onRejected); | 112 EXPECT_EQ(String(), onRejected); |
| 113 | 113 |
| 114 isolate()->RunMicrotasks(); | 114 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 115 | 115 |
| 116 EXPECT_EQ("hello", onFulfilled); | 116 EXPECT_EQ("hello", onFulfilled); |
| 117 EXPECT_EQ(String(), onRejected); | 117 EXPECT_EQ(String(), onRejected); |
| 118 | 118 |
| 119 resolver->resolve("bye"); | 119 resolver->resolve("bye"); |
| 120 resolver->reject("bye"); | 120 resolver->reject("bye"); |
| 121 isolate()->RunMicrotasks(); | 121 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 122 | 122 |
| 123 EXPECT_EQ("hello", onFulfilled); | 123 EXPECT_EQ("hello", onFulfilled); |
| 124 EXPECT_EQ(String(), onRejected); | 124 EXPECT_EQ(String(), onRejected); |
| 125 } | 125 } |
| 126 | 126 |
| 127 TEST_F(ScriptPromiseResolverTest, reject) | 127 TEST_F(ScriptPromiseResolverTest, reject) |
| 128 { | 128 { |
| 129 ScriptPromiseResolver* resolver = nullptr; | 129 ScriptPromiseResolver* resolver = nullptr; |
| 130 ScriptPromise promise; | 130 ScriptPromise promise; |
| 131 { | 131 { |
| 132 ScriptState::Scope scope(getScriptState()); | 132 ScriptState::Scope scope(getScriptState()); |
| 133 resolver = ScriptPromiseResolver::create(getScriptState()); | 133 resolver = ScriptPromiseResolver::create(getScriptState()); |
| 134 promise = resolver->promise(); | 134 promise = resolver->promise(); |
| 135 } | 135 } |
| 136 | 136 |
| 137 String onFulfilled, onRejected; | 137 String onFulfilled, onRejected; |
| 138 ASSERT_FALSE(promise.isEmpty()); | 138 ASSERT_FALSE(promise.isEmpty()); |
| 139 { | 139 { |
| 140 ScriptState::Scope scope(getScriptState()); | 140 ScriptState::Scope scope(getScriptState()); |
| 141 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); | 141 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); |
| 142 } | 142 } |
| 143 | 143 |
| 144 EXPECT_EQ(String(), onFulfilled); | 144 EXPECT_EQ(String(), onFulfilled); |
| 145 EXPECT_EQ(String(), onRejected); | 145 EXPECT_EQ(String(), onRejected); |
| 146 | 146 |
| 147 isolate()->RunMicrotasks(); | 147 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 148 | 148 |
| 149 EXPECT_EQ(String(), onFulfilled); | 149 EXPECT_EQ(String(), onFulfilled); |
| 150 EXPECT_EQ(String(), onRejected); | 150 EXPECT_EQ(String(), onRejected); |
| 151 | 151 |
| 152 resolver->reject("hello"); | 152 resolver->reject("hello"); |
| 153 | 153 |
| 154 { | 154 { |
| 155 ScriptState::Scope scope(getScriptState()); | 155 ScriptState::Scope scope(getScriptState()); |
| 156 EXPECT_TRUE(resolver->promise().isEmpty()); | 156 EXPECT_TRUE(resolver->promise().isEmpty()); |
| 157 } | 157 } |
| 158 | 158 |
| 159 EXPECT_EQ(String(), onFulfilled); | 159 EXPECT_EQ(String(), onFulfilled); |
| 160 EXPECT_EQ(String(), onRejected); | 160 EXPECT_EQ(String(), onRejected); |
| 161 | 161 |
| 162 isolate()->RunMicrotasks(); | 162 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 163 | 163 |
| 164 EXPECT_EQ(String(), onFulfilled); | 164 EXPECT_EQ(String(), onFulfilled); |
| 165 EXPECT_EQ("hello", onRejected); | 165 EXPECT_EQ("hello", onRejected); |
| 166 | 166 |
| 167 resolver->resolve("bye"); | 167 resolver->resolve("bye"); |
| 168 resolver->reject("bye"); | 168 resolver->reject("bye"); |
| 169 isolate()->RunMicrotasks(); | 169 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 170 | 170 |
| 171 EXPECT_EQ(String(), onFulfilled); | 171 EXPECT_EQ(String(), onFulfilled); |
| 172 EXPECT_EQ("hello", onRejected); | 172 EXPECT_EQ("hello", onRejected); |
| 173 } | 173 } |
| 174 | 174 |
| 175 TEST_F(ScriptPromiseResolverTest, stop) | 175 TEST_F(ScriptPromiseResolverTest, stop) |
| 176 { | 176 { |
| 177 ScriptPromiseResolver* resolver = nullptr; | 177 ScriptPromiseResolver* resolver = nullptr; |
| 178 ScriptPromise promise; | 178 ScriptPromise promise; |
| 179 { | 179 { |
| 180 ScriptState::Scope scope(getScriptState()); | 180 ScriptState::Scope scope(getScriptState()); |
| 181 resolver = ScriptPromiseResolver::create(getScriptState()); | 181 resolver = ScriptPromiseResolver::create(getScriptState()); |
| 182 promise = resolver->promise(); | 182 promise = resolver->promise(); |
| 183 } | 183 } |
| 184 | 184 |
| 185 String onFulfilled, onRejected; | 185 String onFulfilled, onRejected; |
| 186 ASSERT_FALSE(promise.isEmpty()); | 186 ASSERT_FALSE(promise.isEmpty()); |
| 187 { | 187 { |
| 188 ScriptState::Scope scope(getScriptState()); | 188 ScriptState::Scope scope(getScriptState()); |
| 189 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); | 189 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); |
| 190 } | 190 } |
| 191 | 191 |
| 192 getExecutionContext()->stopActiveDOMObjects(); | 192 getExecutionContext()->stopActiveDOMObjects(); |
| 193 { | 193 { |
| 194 ScriptState::Scope scope(getScriptState()); | 194 ScriptState::Scope scope(getScriptState()); |
| 195 EXPECT_TRUE(resolver->promise().isEmpty()); | 195 EXPECT_TRUE(resolver->promise().isEmpty()); |
| 196 } | 196 } |
| 197 | 197 |
| 198 resolver->resolve("hello"); | 198 resolver->resolve("hello"); |
| 199 isolate()->RunMicrotasks(); | 199 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 200 | 200 |
| 201 EXPECT_EQ(String(), onFulfilled); | 201 EXPECT_EQ(String(), onFulfilled); |
| 202 EXPECT_EQ(String(), onRejected); | 202 EXPECT_EQ(String(), onRejected); |
| 203 } | 203 } |
| 204 | 204 |
| 205 class ScriptPromiseResolverKeepAlive : public ScriptPromiseResolver { | 205 class ScriptPromiseResolverKeepAlive : public ScriptPromiseResolver { |
| 206 public: | 206 public: |
| 207 static ScriptPromiseResolverKeepAlive* create(ScriptState* scriptState) | 207 static ScriptPromiseResolverKeepAlive* create(ScriptState* scriptState) |
| 208 { | 208 { |
| 209 ScriptPromiseResolverKeepAlive* resolver = new ScriptPromiseResolverKeep
Alive(scriptState); | 209 ScriptPromiseResolverKeepAlive* resolver = new ScriptPromiseResolverKeep
Alive(scriptState); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 } | 314 } |
| 315 | 315 |
| 316 String onFulfilled, onRejected; | 316 String onFulfilled, onRejected; |
| 317 ASSERT_FALSE(promise.isEmpty()); | 317 ASSERT_FALSE(promise.isEmpty()); |
| 318 { | 318 { |
| 319 ScriptState::Scope scope(getScriptState()); | 319 ScriptState::Scope scope(getScriptState()); |
| 320 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); | 320 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); |
| 321 } | 321 } |
| 322 | 322 |
| 323 resolver->resolve(); | 323 resolver->resolve(); |
| 324 isolate()->RunMicrotasks(); | 324 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 325 | 325 |
| 326 EXPECT_EQ("undefined", onFulfilled); | 326 EXPECT_EQ("undefined", onFulfilled); |
| 327 EXPECT_EQ(String(), onRejected); | 327 EXPECT_EQ(String(), onRejected); |
| 328 } | 328 } |
| 329 | 329 |
| 330 TEST_F(ScriptPromiseResolverTest, rejectVoid) | 330 TEST_F(ScriptPromiseResolverTest, rejectVoid) |
| 331 { | 331 { |
| 332 ScriptPromiseResolver* resolver = nullptr; | 332 ScriptPromiseResolver* resolver = nullptr; |
| 333 ScriptPromise promise; | 333 ScriptPromise promise; |
| 334 { | 334 { |
| 335 ScriptState::Scope scope(getScriptState()); | 335 ScriptState::Scope scope(getScriptState()); |
| 336 resolver = ScriptPromiseResolver::create(getScriptState()); | 336 resolver = ScriptPromiseResolver::create(getScriptState()); |
| 337 promise = resolver->promise(); | 337 promise = resolver->promise(); |
| 338 } | 338 } |
| 339 | 339 |
| 340 String onFulfilled, onRejected; | 340 String onFulfilled, onRejected; |
| 341 ASSERT_FALSE(promise.isEmpty()); | 341 ASSERT_FALSE(promise.isEmpty()); |
| 342 { | 342 { |
| 343 ScriptState::Scope scope(getScriptState()); | 343 ScriptState::Scope scope(getScriptState()); |
| 344 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); | 344 promise.then(Function::createFunction(getScriptState(), &onFulfilled), F
unction::createFunction(getScriptState(), &onRejected)); |
| 345 } | 345 } |
| 346 | 346 |
| 347 resolver->reject(); | 347 resolver->reject(); |
| 348 isolate()->RunMicrotasks(); | 348 v8::MicrotasksScope::PerformCheckpoint(isolate()); |
| 349 | 349 |
| 350 EXPECT_EQ(String(), onFulfilled); | 350 EXPECT_EQ(String(), onFulfilled); |
| 351 EXPECT_EQ("undefined", onRejected); | 351 EXPECT_EQ("undefined", onRejected); |
| 352 } | 352 } |
| 353 | 353 |
| 354 } // namespace | 354 } // namespace |
| 355 | 355 |
| 356 } // namespace blink | 356 } // namespace blink |
| OLD | NEW |