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 |