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 "config.h" | 5 #include "config.h" |
6 #include "bindings/core/v8/RejectedPromises.h" | 6 #include "bindings/core/v8/RejectedPromises.h" |
7 | 7 |
8 #include "bindings/core/v8/ScopedPersistent.h" | 8 #include "bindings/core/v8/ScopedPersistent.h" |
9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
10 #include "bindings/core/v8/ScriptValue.h" | 10 #include "bindings/core/v8/ScriptValue.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 auto& message = m_reportedAsErrors.at(i); | 220 auto& message = m_reportedAsErrors.at(i); |
221 if (!message->isCollected() && message->hasPromise(data.GetPromise())) { | 221 if (!message->isCollected() && message->hasPromise(data.GetPromise())) { |
222 message->makePromiseStrong(); | 222 message->makePromiseStrong(); |
223 Platform::current()->currentThread()->scheduler()->timerTaskRunner()
->postTask(FROM_HERE, new Task(bind(&RejectedPromises::revokeNow, this, message.
release()))); | 223 Platform::current()->currentThread()->scheduler()->timerTaskRunner()
->postTask(FROM_HERE, new Task(bind(&RejectedPromises::revokeNow, this, message.
release()))); |
224 m_reportedAsErrors.remove(i); | 224 m_reportedAsErrors.remove(i); |
225 return; | 225 return; |
226 } | 226 } |
227 } | 227 } |
228 } | 228 } |
229 | 229 |
230 PassOwnPtrWillBeRawPtr<RejectedPromises::MessageQueue> RejectedPromises::createM
essageQueue() | |
231 { | |
232 return adoptPtrWillBeNoop(new MessageQueue()); | |
233 } | |
234 | |
235 void RejectedPromises::dispose() | 230 void RejectedPromises::dispose() |
236 { | 231 { |
237 if (m_queue.isEmpty()) | 232 if (!m_queue.isEmpty()) { |
238 return; | 233 OwnPtrWillBeRawPtr<WillBeHeapDeque<OwnPtrWillBeMember<Message>>> queue =
adoptPtr(new WillBeHeapDeque<OwnPtrWillBeMember<Message>>()); |
239 | 234 queue->swap(m_queue); |
240 OwnPtrWillBeRawPtr<MessageQueue> queue = createMessageQueue(); | 235 processQueueNow(queue.release()); |
241 queue->swap(m_queue); | 236 } |
242 processQueueNow(queue.release()); | |
243 } | 237 } |
244 | 238 |
245 void RejectedPromises::processQueue() | 239 void RejectedPromises::processQueue() |
246 { | 240 { |
247 if (m_queue.isEmpty()) | 241 if (m_queue.isEmpty()) |
248 return; | 242 return; |
249 | 243 OwnPtrWillBeRawPtr<WillBeHeapDeque<OwnPtrWillBeMember<Message>>> queue = ado
ptPtr(new WillBeHeapDeque<OwnPtrWillBeMember<Message>>()); |
250 OwnPtrWillBeRawPtr<MessageQueue> queue = createMessageQueue(); | |
251 queue->swap(m_queue); | 244 queue->swap(m_queue); |
252 Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTa
sk(FROM_HERE, new Task(bind(&RejectedPromises::processQueueNow, this, queue.rele
ase()))); | 245 Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTa
sk(FROM_HERE, new Task(bind(&RejectedPromises::processQueueNow, this, queue.rele
ase()))); |
253 } | 246 } |
254 | 247 |
255 void RejectedPromises::processQueueNow(PassOwnPtrWillBeRawPtr<MessageQueue> queu
e) | 248 void RejectedPromises::processQueueNow(PassOwnPtrWillBeRawPtr<WillBeHeapDeque<Ow
nPtrWillBeMember<Message>>> queue) |
256 { | 249 { |
257 // Remove collected handlers. | 250 // Remove collected handlers. |
258 for (size_t i = 0; i < m_reportedAsErrors.size();) { | 251 for (size_t i = 0; i < m_reportedAsErrors.size();) { |
259 if (m_reportedAsErrors.at(i)->isCollected()) | 252 if (m_reportedAsErrors.at(i)->isCollected()) |
260 m_reportedAsErrors.remove(i); | 253 m_reportedAsErrors.remove(i); |
261 else | 254 else |
262 ++i; | 255 ++i; |
263 } | 256 } |
264 | 257 |
265 while (!queue->isEmpty()) { | 258 while (!queue->isEmpty()) { |
266 OwnPtrWillBeRawPtr<Message> message = queue->takeFirst(); | 259 OwnPtrWillBeRawPtr<Message> message = queue->takeFirst(); |
267 if (!message->hasHandler()) { | 260 if (!message->hasHandler()) { |
268 message->report(); | 261 message->report(); |
269 message->makePromiseWeak(); | 262 message->makePromiseWeak(); |
270 m_reportedAsErrors.append(message.release()); | 263 m_reportedAsErrors.append(message.release()); |
271 if (m_reportedAsErrors.size() > maxReportedHandlersPendingResolution
) | 264 if (m_reportedAsErrors.size() > maxReportedHandlersPendingResolution
) |
272 m_reportedAsErrors.remove(0, maxReportedHandlersPendingResolutio
n / 10); | 265 m_reportedAsErrors.remove(0, maxReportedHandlersPendingResolutio
n / 10); |
273 } | 266 } |
274 } | 267 } |
275 } | 268 } |
276 | 269 |
277 void RejectedPromises::revokeNow(PassOwnPtrWillBeRawPtr<Message> message) | 270 void RejectedPromises::revokeNow(PassOwnPtrWillBeRawPtr<Message> message) |
278 { | 271 { |
279 message->revoke(); | 272 message->revoke(); |
280 } | 273 } |
281 | 274 |
282 } // namespace blink | 275 } // namespace blink |
OLD | NEW |