Index: android_webview/java/src/org/chromium/android_webview/AwContentViewClient.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentViewClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentViewClient.java |
index 6ed4911ffaf2dae142ec0c2946e315b850d401c3..0e281851184aeda0a4aa778da4c6723cc7c5857c 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContentViewClient.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentViewClient.java |
@@ -5,6 +5,7 @@ |
package org.chromium.android_webview; |
import android.content.Context; |
+import android.graphics.RectF; |
import android.view.KeyEvent; |
import android.view.View; |
import android.webkit.URLUtil; |
@@ -13,6 +14,7 @@ import android.webkit.WebChromeClient; |
import org.chromium.content.browser.ContentVideoView; |
import org.chromium.content.browser.ContentVideoViewClient; |
import org.chromium.content.browser.ContentViewClient; |
+import org.chromium.content.browser.ContentViewCore; |
/** |
* ContentViewClient implementation for WebView |
@@ -46,6 +48,8 @@ public class AwContentViewClient extends ContentViewClient { |
private AwContentsClient mAwContentsClient; |
private AwSettings mAwSettings; |
+ private ContentViewCore mContentViewCore; |
+ private ExternalVideoSurfaceContainer mExternalVideoSurfaceContainer; |
public AwContentViewClient(AwContentsClient awContentsClient, AwSettings awSettings) { |
mAwContentsClient = awContentsClient; |
@@ -83,4 +87,48 @@ public class AwContentViewClient extends ContentViewClient { |
return mAwSettings != null ? |
mAwSettings.getBlockNetworkLoads() && URLUtil.isNetworkUrl(url) : true; |
} |
+ |
+ public void setContentViewCore(ContentViewCore contentViewCore) { |
+ mContentViewCore = contentViewCore; |
+ if (mExternalVideoSurfaceContainer != null) { |
+ mExternalVideoSurfaceContainer.releaseCurrentExternalVideoSurface(); |
+ mExternalVideoSurfaceContainer = null; |
+ } |
+ } |
+ |
+ @Override |
+ public void onRequestExternalVideoSurface(int playerId) { |
+ if (mExternalVideoSurfaceContainer == null) { |
+ mExternalVideoSurfaceContainer = new ExternalVideoSurfaceContainer(mContentViewCore); |
+ } |
+ mExternalVideoSurfaceContainer.requestExternalVideoSurface(playerId); |
+ } |
+ |
+ @Override |
+ public void onReleaseExternalVideoSurface(int playerId) { |
+ // mExternalVideoSurfaceContainer can be null in case that setContentViewCore() is called |
+ // twice in a pop up webview. |
+ if (mExternalVideoSurfaceContainer != null) { |
+ mExternalVideoSurfaceContainer.releaseExternalVideoSurface(playerId); |
+ } |
+ } |
+ |
+ @Override |
+ public void onExternalVideoSurfacePositionChanged(int playerId, RectF rect) { |
+ // mExternalVideoSurfaceContainer can be null in case that setContentViewCore() is called |
+ // twice in a pop up webview. |
+ if (mExternalVideoSurfaceContainer != null) { |
+ mExternalVideoSurfaceContainer.notifyExternalVideoSurfacePositionChanged( |
+ playerId, rect); |
+ } |
+ } |
+ |
+ @Override |
+ public void onExternalVideoSurfaceRenderCoordinatesChanged() { |
+ // mExternalVideoSurfaceContainer can be null in case that setContentViewCore() is called |
+ // twice in a pop up webview. |
+ if (mExternalVideoSurfaceContainer != null) { |
+ mExternalVideoSurfaceContainer.notifyExternalVideoSurfaceRenderCoordinatesChanged(); |
+ } |
+ } |
} |