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 |