| 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..496204194d65fce6ccd53b85c426bf853b08ec39 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 getFunctionLocation(v8::Local<v8::Function> function, String& scriptId, int& lineNumber, int& columnNumber)
 | 
|  {
 | 
| -    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
 | 
| 
 |