Make sure the onended event is dispatched even when
the user dismisses the video before it plays to completion.

Fix bug: 2533272

Change-Id: I73f216f4f416f5fdca0bbba2244b88666f8f6eac
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index eee8025..eda2e72 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -132,6 +132,7 @@
                     if (mVideoView.isPlaying()) {
                         mVideoView.stopPlayback();
                     }
+                    mCurrentProxy.dispatchOnEnded();
                     mCurrentProxy = null;
                     mLayout.removeView(mVideoView);
                     mVideoView = null;
@@ -154,7 +155,7 @@
 
             if (mCurrentProxy != null) {
                 // Some other video is already playing. Notify the caller that its playback ended.
-                proxy.playbackEnded();
+                proxy.dispatchOnEnded();
                 return;
             }
 
@@ -245,7 +246,10 @@
 
     // MediaPlayer.OnCompletionListener;
     public void onCompletion(MediaPlayer mp) {
-        playbackEnded();
+        // The video ended by itself, so we need to
+        // send a message to the UI thread to dismiss
+        // the video view and to return to the WebView.
+        sendMessage(obtainMessage(ENDED));
     }
 
     // MediaPlayer.OnErrorListener
@@ -254,11 +258,9 @@
         return false;
     }
 
-    public void playbackEnded() {
+    public void dispatchOnEnded() {
         Message msg = Message.obtain(mWebCoreHandler, ENDED);
         mWebCoreHandler.sendMessage(msg);
-        // also send a message to ourselves to return to the WebView
-        sendMessage(obtainMessage(ENDED));
     }
 
     public void onTimeupdate() {