| 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 "core/inspector/InspectorInstrumentation.h" |
| 8 |
| 7 namespace blink { | 9 namespace blink { |
| 8 | 10 |
| 9 ScriptPromiseResolver::ScriptPromiseResolver(ScriptState* scriptState) | 11 ScriptPromiseResolver::ScriptPromiseResolver(ScriptState* scriptState) |
| 10 : ActiveDOMObject(scriptState->getExecutionContext()) | 12 : ActiveDOMObject(scriptState->getExecutionContext()) |
| 11 , m_state(Pending) | 13 , m_state(Pending) |
| 12 , m_scriptState(scriptState) | 14 , m_scriptState(scriptState) |
| 13 , m_timer(this, &ScriptPromiseResolver::onTimerFired) | 15 , m_timer(this, &ScriptPromiseResolver::onTimerFired) |
| 14 , m_resolver(scriptState) | 16 , m_resolver(scriptState) |
| 15 #if ENABLE(ASSERT) | 17 #if ENABLE(ASSERT) |
| 16 , m_isPromiseCalled(false) | 18 , m_isPromiseCalled(false) |
| 17 #endif | 19 #endif |
| 18 { | 20 { |
| 19 if (getExecutionContext()->activeDOMObjectsAreStopped()) { | 21 if (getExecutionContext()->activeDOMObjectsAreStopped()) { |
| 20 m_state = Detached; | 22 m_state = Detached; |
| 21 m_resolver.clear(); | 23 m_resolver.clear(); |
| 22 } | 24 } |
| 25 InspectorInstrumentation::asyncTaskScheduled(getExecutionContext(), "Promise
", this); |
| 23 } | 26 } |
| 24 | 27 |
| 25 void ScriptPromiseResolver::suspend() | 28 void ScriptPromiseResolver::suspend() |
| 26 { | 29 { |
| 27 m_timer.stop(); | 30 m_timer.stop(); |
| 28 } | 31 } |
| 29 | 32 |
| 30 void ScriptPromiseResolver::resume() | 33 void ScriptPromiseResolver::resume() |
| 31 { | 34 { |
| 32 if (m_state == Resolving || m_state == Rejecting) | 35 if (m_state == Resolving || m_state == Rejecting) |
| 33 m_timer.startOneShot(0, BLINK_FROM_HERE); | 36 m_timer.startOneShot(0, BLINK_FROM_HERE); |
| 34 } | 37 } |
| 35 | 38 |
| 36 void ScriptPromiseResolver::detach() | 39 void ScriptPromiseResolver::detach() |
| 37 { | 40 { |
| 38 if (m_state == Detached) | 41 if (m_state == Detached) |
| 39 return; | 42 return; |
| 40 m_timer.stop(); | 43 m_timer.stop(); |
| 41 m_state = Detached; | 44 m_state = Detached; |
| 42 m_resolver.clear(); | 45 m_resolver.clear(); |
| 43 m_value.clear(); | 46 m_value.clear(); |
| 44 m_keepAlive.clear(); | 47 m_keepAlive.clear(); |
| 48 InspectorInstrumentation::asyncTaskCanceled(getExecutionContext(), this); |
| 45 } | 49 } |
| 46 | 50 |
| 47 void ScriptPromiseResolver::keepAliveWhilePending() | 51 void ScriptPromiseResolver::keepAliveWhilePending() |
| 48 { | 52 { |
| 49 // keepAliveWhilePending() will be called twice if the resolver | 53 // keepAliveWhilePending() will be called twice if the resolver |
| 50 // is created in a suspended execution context and the resolver | 54 // is created in a suspended execution context and the resolver |
| 51 // is then resolved/rejected while in that suspended state. | 55 // is then resolved/rejected while in that suspended state. |
| 52 if (m_state == Detached || m_keepAlive) | 56 if (m_state == Detached || m_keepAlive) |
| 53 return; | 57 return; |
| 54 | 58 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 67 | 71 |
| 68 ScriptState::Scope scope(m_scriptState.get()); | 72 ScriptState::Scope scope(m_scriptState.get()); |
| 69 resolveOrRejectImmediately(); | 73 resolveOrRejectImmediately(); |
| 70 } | 74 } |
| 71 | 75 |
| 72 void ScriptPromiseResolver::resolveOrRejectImmediately() | 76 void ScriptPromiseResolver::resolveOrRejectImmediately() |
| 73 { | 77 { |
| 74 ASSERT(!getExecutionContext()->activeDOMObjectsAreStopped()); | 78 ASSERT(!getExecutionContext()->activeDOMObjectsAreStopped()); |
| 75 ASSERT(!getExecutionContext()->activeDOMObjectsAreSuspended()); | 79 ASSERT(!getExecutionContext()->activeDOMObjectsAreSuspended()); |
| 76 { | 80 { |
| 81 InspectorInstrumentation::AsyncTask asyncTask(getExecutionContext(), thi
s); |
| 77 if (m_state == Resolving) { | 82 if (m_state == Resolving) { |
| 78 m_resolver.resolve(m_value.newLocal(m_scriptState->isolate())); | 83 m_resolver.resolve(m_value.newLocal(m_scriptState->isolate())); |
| 79 } else { | 84 } else { |
| 80 ASSERT(m_state == Rejecting); | 85 ASSERT(m_state == Rejecting); |
| 81 m_resolver.reject(m_value.newLocal(m_scriptState->isolate())); | 86 m_resolver.reject(m_value.newLocal(m_scriptState->isolate())); |
| 82 } | 87 } |
| 83 } | 88 } |
| 84 detach(); | 89 detach(); |
| 85 } | 90 } |
| 86 | 91 |
| 87 DEFINE_TRACE(ScriptPromiseResolver) | 92 DEFINE_TRACE(ScriptPromiseResolver) |
| 88 { | 93 { |
| 89 ActiveDOMObject::trace(visitor); | 94 ActiveDOMObject::trace(visitor); |
| 90 } | 95 } |
| 91 | 96 |
| 92 } // namespace blink | 97 } // namespace blink |
| OLD | NEW |