Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp

Issue 1743763004: Use v8::MicrotasksScope internally in V8RecursionScope. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v8rs-2-endofscope
Patch Set: v8_helpers Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698