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/inspector/V8InjectedScriptHost.h" | 6 #include "bindings/core/v8/inspector/V8InjectedScriptHost.h" |
7 | 7 |
8 #include "bindings/core/v8/BindingSecurity.h" | 8 #include "bindings/core/v8/BindingSecurity.h" |
9 #include "bindings/core/v8/ExceptionState.h" | 9 #include "bindings/core/v8/ExceptionState.h" |
10 #include "bindings/core/v8/ScriptValue.h" | 10 #include "bindings/core/v8/ScriptValue.h" |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]); | 278 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]); |
279 v8::MaybeLocal<v8::Array> properties = v8::Debug::GetInternalProperties(info
.GetIsolate(), object); | 279 v8::MaybeLocal<v8::Array> properties = v8::Debug::GetInternalProperties(info
.GetIsolate(), object); |
280 v8SetReturnValue(info, properties); | 280 v8SetReturnValue(info, properties); |
281 } | 281 } |
282 | 282 |
283 static v8::Local<v8::Array> getJSListenerFunctions(v8::Isolate* isolate, Executi
onContext* executionContext, const EventListenerInfo& listenerInfo) | 283 static v8::Local<v8::Array> getJSListenerFunctions(v8::Isolate* isolate, Executi
onContext* executionContext, const EventListenerInfo& listenerInfo) |
284 { | 284 { |
285 v8::Local<v8::Array> result = v8::Array::New(isolate); | 285 v8::Local<v8::Array> result = v8::Array::New(isolate); |
286 size_t handlersCount = listenerInfo.eventListenerVector.size(); | 286 size_t handlersCount = listenerInfo.eventListenerVector.size(); |
287 for (size_t i = 0, outputIndex = 0; i < handlersCount; ++i) { | 287 for (size_t i = 0, outputIndex = 0; i < handlersCount; ++i) { |
288 RefPtr<EventListener> listener = listenerInfo.eventListenerVector[i].lis
tener; | 288 EventListener* listener = listenerInfo.eventListenerVector[i].listener.g
et(); |
| 289 RefPtrWillBeRawPtr<EventListener> protect(listener); |
289 if (listener->type() != EventListener::JSEventListenerType) { | 290 if (listener->type() != EventListener::JSEventListenerType) { |
290 ASSERT_NOT_REACHED(); | 291 ASSERT_NOT_REACHED(); |
291 continue; | 292 continue; |
292 } | 293 } |
293 V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListene
r*>(listener.get()); | 294 V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListene
r*>(listener); |
294 v8::Local<v8::Context> context = toV8Context(executionContext, v8Listene
r->world()); | 295 v8::Local<v8::Context> context = toV8Context(executionContext, v8Listene
r->world()); |
295 // Hide listeners from other contexts. | 296 // Hide listeners from other contexts. |
296 if (context != isolate->GetCurrentContext()) | 297 if (context != isolate->GetCurrentContext()) |
297 continue; | 298 continue; |
298 v8::Local<v8::Object> function; | 299 v8::Local<v8::Object> function; |
299 { | 300 { |
300 // getListenerObject() may cause JS in the event attribute to get co
mpiled, potentially unsuccessfully. | 301 // getListenerObject() may cause JS in the event attribute to get co
mpiled, potentially unsuccessfully. |
301 v8::TryCatch block; | 302 v8::TryCatch block; |
302 function = v8Listener->getListenerObject(executionContext); | 303 function = v8Listener->getListenerObject(executionContext); |
303 if (block.HasCaught()) | 304 if (block.HasCaught()) |
(...skipping 10 matching lines...) Expand all Loading... |
314 | 315 |
315 void V8InjectedScriptHost::getEventListenersCallback(const v8::FunctionCallbackI
nfo<v8::Value>& info) | 316 void V8InjectedScriptHost::getEventListenersCallback(const v8::FunctionCallbackI
nfo<v8::Value>& info) |
316 { | 317 { |
317 if (info.Length() < 1) | 318 if (info.Length() < 1) |
318 return; | 319 return; |
319 | 320 |
320 EventTarget* target = eventTargetFromScriptValue(info.GetIsolate(), info[0])
; | 321 EventTarget* target = eventTargetFromScriptValue(info.GetIsolate(), info[0])
; |
321 if (!target) | 322 if (!target) |
322 return; | 323 return; |
323 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.Holder()); | 324 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.Holder()); |
324 Vector<EventListenerInfo> listenersArray; | 325 WillBeHeapVector<EventListenerInfo> listenersArray; |
325 host->getEventListenersImpl(target, listenersArray); | 326 host->getEventListenersImpl(target, listenersArray); |
326 | 327 |
327 v8::Local<v8::Object> result = v8::Object::New(info.GetIsolate()); | 328 v8::Local<v8::Object> result = v8::Object::New(info.GetIsolate()); |
328 for (size_t i = 0; i < listenersArray.size(); ++i) { | 329 for (size_t i = 0; i < listenersArray.size(); ++i) { |
329 v8::Local<v8::Array> listeners = getJSListenerFunctions(info.GetIsolate(
), target->executionContext(), listenersArray[i]); | 330 v8::Local<v8::Array> listeners = getJSListenerFunctions(info.GetIsolate(
), target->executionContext(), listenersArray[i]); |
330 if (!listeners->Length()) | 331 if (!listeners->Length()) |
331 continue; | 332 continue; |
332 AtomicString eventType = listenersArray[i].eventType; | 333 AtomicString eventType = listenersArray[i].eventType; |
333 result->Set(v8String(info.GetIsolate(), eventType), listeners); | 334 result->Set(v8String(info.GetIsolate(), eventType), listeners); |
334 } | 335 } |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 { | 642 { |
642 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host); | 643 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host); |
643 } | 644 } |
644 | 645 |
645 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Object> object) | 646 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Object> object) |
646 { | 647 { |
647 return InjectedScriptHostWrapper::unwrap(object); | 648 return InjectedScriptHostWrapper::unwrap(object); |
648 } | 649 } |
649 | 650 |
650 } // namespace blink | 651 } // namespace blink |
OLD | NEW |