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

Side by Side Diff: Source/core/inspector/v8/V8InjectedScriptHost.cpp

Issue 1238083002: Oilpan: Move the EventListener hierarchy to Oilpan's heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 | Annotate | Revision Log
OLDNEW
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 "core/inspector/v8/V8InjectedScriptHost.h" 6 #include "core/inspector/v8/V8InjectedScriptHost.h"
7 7
8 #include "bindings/core/v8/ExceptionState.h" 8 #include "bindings/core/v8/ExceptionState.h"
9 #include "bindings/core/v8/ScriptValue.h" 9 #include "bindings/core/v8/ScriptValue.h"
10 #include "bindings/core/v8/V8AbstractEventListener.h" 10 #include "bindings/core/v8/V8AbstractEventListener.h"
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]); 251 v8::Local<v8::Object> object = v8::Local<v8::Object>::Cast(info[0]);
252 v8::MaybeLocal<v8::Array> properties = v8::Debug::GetInternalProperties(info .GetIsolate(), object); 252 v8::MaybeLocal<v8::Array> properties = v8::Debug::GetInternalProperties(info .GetIsolate(), object);
253 v8SetReturnValue(info, properties); 253 v8SetReturnValue(info, properties);
254 } 254 }
255 255
256 static v8::Local<v8::Array> getJSListenerFunctions(v8::Isolate* isolate, Executi onContext* executionContext, const EventListenerInfo& listenerInfo) 256 static v8::Local<v8::Array> getJSListenerFunctions(v8::Isolate* isolate, Executi onContext* executionContext, const EventListenerInfo& listenerInfo)
257 { 257 {
258 v8::Local<v8::Array> result = v8::Array::New(isolate); 258 v8::Local<v8::Array> result = v8::Array::New(isolate);
259 size_t handlersCount = listenerInfo.eventListenerVector.size(); 259 size_t handlersCount = listenerInfo.eventListenerVector.size();
260 for (size_t i = 0, outputIndex = 0; i < handlersCount; ++i) { 260 for (size_t i = 0, outputIndex = 0; i < handlersCount; ++i) {
261 RefPtr<EventListener> listener = listenerInfo.eventListenerVector[i].lis tener; 261 EventListener* listener = listenerInfo.eventListenerVector[i].listener.g et();
262 RefPtrWillBeRawPtr<EventListener> protect(listener);
262 if (listener->type() != EventListener::JSEventListenerType) { 263 if (listener->type() != EventListener::JSEventListenerType) {
263 ASSERT_NOT_REACHED(); 264 ASSERT_NOT_REACHED();
264 continue; 265 continue;
265 } 266 }
266 V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListene r*>(listener.get()); 267 V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListene r*>(listener);
267 v8::Local<v8::Context> context = toV8Context(executionContext, v8Listene r->world()); 268 v8::Local<v8::Context> context = toV8Context(executionContext, v8Listene r->world());
268 // Hide listeners from other contexts. 269 // Hide listeners from other contexts.
269 if (context != isolate->GetCurrentContext()) 270 if (context != isolate->GetCurrentContext())
270 continue; 271 continue;
271 v8::Local<v8::Object> function; 272 v8::Local<v8::Object> function;
272 { 273 {
273 // getListenerObject() may cause JS in the event attribute to get co mpiled, potentially unsuccessfully. 274 // getListenerObject() may cause JS in the event attribute to get co mpiled, potentially unsuccessfully.
274 v8::TryCatch block; 275 v8::TryCatch block;
275 function = v8Listener->getListenerObject(executionContext); 276 function = v8Listener->getListenerObject(executionContext);
276 if (block.HasCaught()) 277 if (block.HasCaught())
(...skipping 10 matching lines...) Expand all
287 288
288 void V8InjectedScriptHost::getEventListenersCallback(const v8::FunctionCallbackI nfo<v8::Value>& info) 289 void V8InjectedScriptHost::getEventListenersCallback(const v8::FunctionCallbackI nfo<v8::Value>& info)
289 { 290 {
290 if (info.Length() < 1) 291 if (info.Length() < 1)
291 return; 292 return;
292 293
293 EventTarget* target = InjectedScriptHost::eventTargetFromV8Value(info.GetIso late(), info[0]); 294 EventTarget* target = InjectedScriptHost::eventTargetFromV8Value(info.GetIso late(), info[0]);
294 if (!target) 295 if (!target)
295 return; 296 return;
296 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.Holder()); 297 InjectedScriptHost* host = V8InjectedScriptHost::unwrap(info.Holder());
297 Vector<EventListenerInfo> listenersArray; 298 WillBeHeapVector<EventListenerInfo> listenersArray;
298 host->getEventListenersImpl(target, listenersArray); 299 host->getEventListenersImpl(target, listenersArray);
299 300
300 v8::Local<v8::Object> result = v8::Object::New(info.GetIsolate()); 301 v8::Local<v8::Object> result = v8::Object::New(info.GetIsolate());
301 for (size_t i = 0; i < listenersArray.size(); ++i) { 302 for (size_t i = 0; i < listenersArray.size(); ++i) {
302 v8::Local<v8::Array> listeners = getJSListenerFunctions(info.GetIsolate( ), target->executionContext(), listenersArray[i]); 303 v8::Local<v8::Array> listeners = getJSListenerFunctions(info.GetIsolate( ), target->executionContext(), listenersArray[i]);
303 if (!listeners->Length()) 304 if (!listeners->Length())
304 continue; 305 continue;
305 AtomicString eventType = listenersArray[i].eventType; 306 AtomicString eventType = listenersArray[i].eventType;
306 result->Set(v8String(info.GetIsolate(), eventType), listeners); 307 result->Set(v8String(info.GetIsolate(), eventType), listeners);
307 } 308 }
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 { 615 {
615 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host); 616 return InjectedScriptHostWrapper::wrap(constructorTemplate, context, host);
616 } 617 }
617 618
618 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Object> object) 619 InjectedScriptHost* V8InjectedScriptHost::unwrap(v8::Local<v8::Object> object)
619 { 620 {
620 return InjectedScriptHostWrapper::unwrap(object); 621 return InjectedScriptHostWrapper::unwrap(object);
621 } 622 }
622 623
623 } // namespace blink 624 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698