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/ScriptPromisePropertyBase.h" | 5 #include "bindings/core/v8/ScriptPromisePropertyBase.h" |
6 | 6 |
7 #include "bindings/core/v8/ScopedPersistent.h" | 7 #include "bindings/core/v8/ScopedPersistent.h" |
8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
9 #include "bindings/core/v8/V8Binding.h" | 9 #include "bindings/core/v8/V8Binding.h" |
10 #include "bindings/core/v8/V8HiddenValue.h" | 10 #include "bindings/core/v8/V8HiddenValue.h" |
11 #include "core/dom/ExecutionContext.h" | 11 #include "core/dom/ExecutionContext.h" |
| 12 #include "wtf/PtrUtil.h" |
| 13 #include <memory> |
12 | 14 |
13 namespace blink { | 15 namespace blink { |
14 | 16 |
15 ScriptPromisePropertyBase::ScriptPromisePropertyBase(ExecutionContext* execution
Context, Name name) | 17 ScriptPromisePropertyBase::ScriptPromisePropertyBase(ExecutionContext* execution
Context, Name name) |
16 : ContextLifecycleObserver(executionContext) | 18 : ContextLifecycleObserver(executionContext) |
17 , m_isolate(toIsolate(executionContext)) | 19 , m_isolate(toIsolate(executionContext)) |
18 , m_name(name) | 20 , m_name(name) |
19 , m_state(Pending) | 21 , m_state(Pending) |
20 { | 22 { |
21 } | 23 } |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 { | 76 { |
75 ASSERT(getExecutionContext()); | 77 ASSERT(getExecutionContext()); |
76 ASSERT(m_state == Pending); | 78 ASSERT(m_state == Pending); |
77 ASSERT(targetState == Resolved || targetState == Rejected); | 79 ASSERT(targetState == Resolved || targetState == Rejected); |
78 | 80 |
79 m_state = targetState; | 81 m_state = targetState; |
80 | 82 |
81 v8::HandleScope handleScope(m_isolate); | 83 v8::HandleScope handleScope(m_isolate); |
82 size_t i = 0; | 84 size_t i = 0; |
83 while (i < m_wrappers.size()) { | 85 while (i < m_wrappers.size()) { |
84 const OwnPtr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i]; | 86 const std::unique_ptr<ScopedPersistent<v8::Object>>& persistent = m_wrap
pers[i]; |
85 if (persistent->isEmpty()) { | 87 if (persistent->isEmpty()) { |
86 // wrapper has died. | 88 // wrapper has died. |
87 // Since v8 GC can run during the iteration and clear the reference, | 89 // Since v8 GC can run during the iteration and clear the reference, |
88 // we can't move this check out of the loop. | 90 // we can't move this check out of the loop. |
89 m_wrappers.remove(i); | 91 m_wrappers.remove(i); |
90 continue; | 92 continue; |
91 } | 93 } |
92 v8::Local<v8::Object> wrapper = persistent->newLocal(m_isolate); | 94 v8::Local<v8::Object> wrapper = persistent->newLocal(m_isolate); |
93 ScriptState* scriptState = ScriptState::from(wrapper->CreationContext())
; | 95 ScriptState* scriptState = ScriptState::from(wrapper->CreationContext())
; |
94 ScriptState::Scope scope(scriptState); | 96 ScriptState::Scope scope(scriptState); |
(...skipping 27 matching lines...) Expand all Loading... |
122 resolver->Reject(context, rejectedValue(m_isolate, context->Global())); | 124 resolver->Reject(context, rejectedValue(m_isolate, context->Global())); |
123 break; | 125 break; |
124 } | 126 } |
125 } | 127 } |
126 | 128 |
127 v8::Local<v8::Object> ScriptPromisePropertyBase::ensureHolderWrapper(ScriptState
* scriptState) | 129 v8::Local<v8::Object> ScriptPromisePropertyBase::ensureHolderWrapper(ScriptState
* scriptState) |
128 { | 130 { |
129 v8::Local<v8::Context> context = scriptState->context(); | 131 v8::Local<v8::Context> context = scriptState->context(); |
130 size_t i = 0; | 132 size_t i = 0; |
131 while (i < m_wrappers.size()) { | 133 while (i < m_wrappers.size()) { |
132 const OwnPtr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i]; | 134 const std::unique_ptr<ScopedPersistent<v8::Object>>& persistent = m_wrap
pers[i]; |
133 if (persistent->isEmpty()) { | 135 if (persistent->isEmpty()) { |
134 // wrapper has died. | 136 // wrapper has died. |
135 // Since v8 GC can run during the iteration and clear the reference, | 137 // Since v8 GC can run during the iteration and clear the reference, |
136 // we can't move this check out of the loop. | 138 // we can't move this check out of the loop. |
137 m_wrappers.remove(i); | 139 m_wrappers.remove(i); |
138 continue; | 140 continue; |
139 } | 141 } |
140 | 142 |
141 v8::Local<v8::Object> wrapper = persistent->newLocal(m_isolate); | 143 v8::Local<v8::Object> wrapper = persistent->newLocal(m_isolate); |
142 if (wrapper->CreationContext() == context) | 144 if (wrapper->CreationContext() == context) |
143 return wrapper; | 145 return wrapper; |
144 ++i; | 146 ++i; |
145 } | 147 } |
146 v8::Local<v8::Object> wrapper = holder(m_isolate, context->Global()); | 148 v8::Local<v8::Object> wrapper = holder(m_isolate, context->Global()); |
147 OwnPtr<ScopedPersistent<v8::Object>> weakPersistent = adoptPtr(new ScopedPer
sistent<v8::Object>); | 149 std::unique_ptr<ScopedPersistent<v8::Object>> weakPersistent = wrapUnique(ne
w ScopedPersistent<v8::Object>); |
148 weakPersistent->set(m_isolate, wrapper); | 150 weakPersistent->set(m_isolate, wrapper); |
149 weakPersistent->setWeak(weakPersistent.get(), &clearHandle); | 151 weakPersistent->setWeak(weakPersistent.get(), &clearHandle); |
150 m_wrappers.append(std::move(weakPersistent)); | 152 m_wrappers.append(std::move(weakPersistent)); |
151 return wrapper; | 153 return wrapper; |
152 } | 154 } |
153 | 155 |
154 void ScriptPromisePropertyBase::clearWrappers() | 156 void ScriptPromisePropertyBase::clearWrappers() |
155 { | 157 { |
156 checkThis(); | 158 checkThis(); |
157 checkWrappers(); | 159 checkWrappers(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 ASSERT_NOT_REACHED(); | 210 ASSERT_NOT_REACHED(); |
209 return v8::Local<v8::String>(); | 211 return v8::Local<v8::String>(); |
210 } | 212 } |
211 | 213 |
212 DEFINE_TRACE(ScriptPromisePropertyBase) | 214 DEFINE_TRACE(ScriptPromisePropertyBase) |
213 { | 215 { |
214 ContextLifecycleObserver::trace(visitor); | 216 ContextLifecycleObserver::trace(visitor); |
215 } | 217 } |
216 | 218 |
217 } // namespace blink | 219 } // namespace blink |
OLD | NEW |