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

Unified Diff: Source/bindings/core/v8/ScriptEventListener.cpp

Issue 1268353005: [DevTools] Support JQuery event listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
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 side-by-side diff with in-line comments
Download patch
Index: Source/bindings/core/v8/ScriptEventListener.cpp
diff --git a/Source/bindings/core/v8/ScriptEventListener.cpp b/Source/bindings/core/v8/ScriptEventListener.cpp
index ebf102ed9f69acc56d2c1e30a022bc4f453a17e1..314b351f7278450188d9ba696369b3e05051d331 100644
--- a/Source/bindings/core/v8/ScriptEventListener.cpp
+++ b/Source/bindings/core/v8/ScriptEventListener.cpp
@@ -88,69 +88,39 @@ PassRefPtrWillBeRawPtr<V8LazyEventListener> createAttributeEventListener(LocalFr
return V8LazyEventListener::create(name.localName(), eventParameterName, value, sourceURL, position, 0, toIsolate(frame));
}
-static v8::MaybeLocal<v8::Function> eventListenerEffectiveFunction(v8::Isolate* isolate, v8::Local<v8::Context> context, v8::Local<v8::Object> listenerObject)
-{
- if (listenerObject->IsFunction()) {
- return v8::MaybeLocal<v8::Function>(listenerObject.As<v8::Function>());
- } else if (listenerObject->IsObject()) {
- // Try the "handleEvent" method (EventListener interface).
- v8::Local<v8::Value> property;
- if (listenerObject->Get(context, v8AtomicString(isolate, "handleEvent")).ToLocal(&property) && property->IsFunction())
- return v8::MaybeLocal<v8::Function>(property.As<v8::Function>());
- // Fall back to the "constructor" property.
- if (listenerObject->Get(context, v8AtomicString(isolate, "constructor")).ToLocal(&property) && property->IsFunction())
- return v8::MaybeLocal<v8::Function>(property.As<v8::Function>());
- }
- return v8::MaybeLocal<v8::Function>();
-}
-
-ScriptValue eventListenerHandler(ExecutionContext* executionContext, EventListener* listener)
+v8::Local<v8::Object> eventListenerHandler(ExecutionContext* executionContext, EventListener* listener)
{
if (listener->type() != EventListener::JSEventListenerType)
- return ScriptValue();
-
- v8::Isolate* isolate = toIsolate(executionContext);
- v8::HandleScope scope(isolate);
+ return v8::Local<v8::Object>();
V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener);
- v8::Local<v8::Context> context = toV8Context(executionContext, v8Listener->world());
- v8::Context::Scope contextScope(context);
- v8::Local<v8::Object> function = v8Listener->getListenerObject(executionContext);
- if (function.IsEmpty())
- return ScriptValue();
- return ScriptValue(ScriptState::from(context), function);
+ return v8Listener->getListenerObject(executionContext);
}
-ScriptState* eventListenerHandlerScriptState(LocalFrame* frame, EventListener* listener)
+v8::Local<v8::Function> eventListenerEffectiveFunction(v8::Isolate* isolate, v8::Local<v8::Object> handler)
{
- if (listener->type() != EventListener::JSEventListenerType)
- return 0;
- V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener);
- v8::HandleScope scope(toIsolate(frame));
- v8::Local<v8::Context> v8Context = frame->script().windowProxy(v8Listener->world())->context();
- return ScriptState::from(v8Context);
+ v8::Local<v8::Function> function;
+ if (handler->IsFunction()) {
+ function = handler.As<v8::Function>();
+ } else if (handler->IsObject()) {
+ v8::Local<v8::Value> property;
+ // Try the "handleEvent" method (EventListener interface).
+ if (handler->Get(handler->CreationContext(), v8AtomicString(isolate, "handleEvent")).ToLocal(&property) && property->IsFunction())
+ function = property.As<v8::Function>();
+ // Fall back to the "constructor" property.
+ else if (handler->Get(handler->CreationContext(), v8AtomicString(isolate, "constructor")).ToLocal(&property) && property->IsFunction())
+ function = property.As<v8::Function>();
+ }
+ if (!function.IsEmpty())
+ return getBoundFunction(function);
+ return v8::Local<v8::Function>();
}
-bool eventListenerHandlerLocation(ExecutionContext* executionContext, EventListener* listener, String& scriptId, int& lineNumber, int& columnNumber)
+void functionLocation(v8::Local<v8::Function> function, String& scriptId, int& lineNumber, int& columnNumber)
yurys 2015/08/11 21:10:24 style: getFunctionLocation since we use return par
kozy 2015/08/12 18:02:22 Done.
{
- if (listener->type() != EventListener::JSEventListenerType)
- return false;
-
- v8::HandleScope scope(toIsolate(executionContext));
- V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener);
- v8::Local<v8::Context> context = toV8Context(executionContext, v8Listener->world());
- v8::Context::Scope contextScope(context);
- v8::Local<v8::Object> object = v8Listener->getListenerObject(executionContext);
- if (object.IsEmpty())
- return false;
- v8::Local<v8::Function> function;
- if (!eventListenerEffectiveFunction(scope.GetIsolate(), context, object).ToLocal(&function))
- return false;
- v8::Local<v8::Function> originalFunction = getBoundFunction(function);
- int scriptIdValue = originalFunction->ScriptId();
+ int scriptIdValue = function->ScriptId();
scriptId = String::number(scriptIdValue);
- lineNumber = originalFunction->GetScriptLineNumber();
- columnNumber = originalFunction->GetScriptColumnNumber();
- return true;
+ lineNumber = function->GetScriptLineNumber();
+ columnNumber = function->GetScriptColumnNumber();
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698