| Index: Source/bindings/dart/DartEventListener.cpp
 | 
| diff --git a/Source/bindings/dart/DartEventListener.cpp b/Source/bindings/dart/DartEventListener.cpp
 | 
| index 92602dedbb3295a30d6986a826fc9259a71e6933..95f21e9e9f3de58d111021fd693366cc99ca2d73 100644
 | 
| --- a/Source/bindings/dart/DartEventListener.cpp
 | 
| +++ b/Source/bindings/dart/DartEventListener.cpp
 | 
| @@ -96,6 +96,8 @@ void DartEventListener::handleEvent(ScriptExecutionContext* context, Event* even
 | 
|      // The callback function on XMLHttpRequest can clear the event listener and destroys 'this' object. Keep a local reference to it.
 | 
|      // See issue 889829.
 | 
|      RefPtr<DartEventListener> protect(this);
 | 
| +    // Keep a strong handle to the listener.
 | 
| +    Dart_Handle listener = Dart_HandleFromWeakPersistent(m_listener);
 | 
|  
 | 
|      // Get the Dart wrapper for the event object.
 | 
|      Dart_Handle dartEvent = DartEvent::toDart(event);
 | 
| @@ -103,7 +105,7 @@ void DartEventListener::handleEvent(ScriptExecutionContext* context, Event* even
 | 
|  
 | 
|      // FIXME: consider if DateExtension manipulations are necessary and if yes (most probably),
 | 
|      // factor out common logic. For example by introducing EventProcessScope RAII to manage DateExtension.
 | 
| -    Dart_Handle result = callListenerFunction(context, dartEvent, event);
 | 
| +    Dart_Handle result = callListenerFunction(context, listener, dartEvent);
 | 
|      if (Dart_IsError(result)) {
 | 
|          DartUtilities::reportProblem(context, result);
 | 
|          return;
 | 
| @@ -130,16 +132,16 @@ EventListener* DartEventListener::toNative(Dart_Handle handle, Dart_Handle& exce
 | 
|      return createOrFetch(handle);
 | 
|  }
 | 
|  
 | 
| -Dart_Handle DartEventListener::callListenerFunction(ScriptExecutionContext* context, Dart_Handle dartEvent, Event* event)
 | 
| +Dart_Handle DartEventListener::callListenerFunction(ScriptExecutionContext* context, Dart_Handle listener, Dart_Handle dartEvent)
 | 
|  {
 | 
| -    ASSERT(m_listener);
 | 
| +    ASSERT(listener);
 | 
|  
 | 
|      DartController* dartController = DartController::retrieve(context);
 | 
|      if (!dartController)
 | 
|          return Dart_Error("Internal error: failed to fetch Dart controller");
 | 
|  
 | 
|      Dart_Handle parameters[1] = { dartEvent };
 | 
| -    return dartController->callFunction(Dart_HandleFromWeakPersistent(m_listener), 1, parameters);
 | 
| +    return dartController->callFunction(listener, 1, parameters);
 | 
|  }
 | 
|  
 | 
|  }
 | 
| 
 |