Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
index 6d44e042af538f17c108e45c3c0b3dc3706ee2b3..471a127e3147f4841c84307d0f549e72bf367938 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
@@ -51,7 +51,9 @@ import org.chromium.content.browser.input.InsertionHandleController; |
import org.chromium.content.browser.input.SelectPopupDialog; |
import org.chromium.content.browser.input.SelectionHandleController; |
import org.chromium.content.common.TraceEvent; |
-import org.chromium.ui.gfx.NativeWindow; |
+import org.chromium.ui.ViewAndroidDelegate; |
+import org.chromium.ui.ViewAndroid; |
+import org.chromium.ui.gfx.WindowAndroid; |
import java.lang.annotation.Annotation; |
import java.util.HashMap; |
@@ -248,6 +250,8 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
// Whether we use hardware-accelerated drawing. |
private boolean mHardwareAccelerated = false; |
+ private ViewAndroid mViewAndroid; |
+ |
/** |
* Constructs a new ContentViewCore. Embedders must call initialize() after constructing |
* a ContentViewCore and before using it. |
@@ -309,11 +313,11 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
* compatibility breaks with existing applications. If in doubt, contact the |
* android_webview/OWNERS |
* |
- * @return A ContainerViewDelegate that can be used to add and remove views. |
+ * @return A ViewAndroidDelegate that can be used to add and remove views. |
*/ |
- @CalledByNative |
- public ContainerViewDelegate getContainerViewDelegate() { |
- return new ContainerViewDelegate() { |
+ @VisibleForTesting |
+ public ViewAndroidDelegate getViewAndroidDelegate() { |
+ return new ViewAndroidDelegate() { |
@Override |
public void addViewToContainerView(View view) { |
mContainerView.addView(view); |
@@ -451,7 +455,10 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
* @param internalDispatcher Handles dispatching all hidden or super methods to the |
* containerView. |
* @param nativeWebContents A pointer to the native web contents. |
- * @param nativeWindow An instance of the NativeWindow. |
+ * @param windowAndroid An instance of the WindowAndroid. |
+ * @param shouldCreateViewAndroid Whether ContentViewCore creates a ViewAndroid object. WebView |
+ * currently does not create ViewAndroid. If that should change, |
+ * ViewAndroid should be rewritten to use CleanupReference. |
* @param isAccessFromFileURLsGrantedByDefault Default WebSettings configuration. |
*/ |
// Perform important post-construction set up of the ContentViewCore. |
@@ -464,7 +471,7 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
// Note that the caller remains the owner of the nativeWebContents and is responsible for |
// deleting it after destroying the ContentViewCore. |
public void initialize(ViewGroup containerView, InternalAccessDelegate internalDispatcher, |
- int nativeWebContents, NativeWindow nativeWindow, |
+ int nativeWebContents, WindowAndroid windowAndroid, boolean shouldCreateViewAndroid, |
joth
2013/04/18 01:41:17
Seems odd to pass in the window here, along with b
aurimas (slooooooooow)
2013/04/18 02:49:57
Does WebView support JavascriptAppModalDialog or S
|
boolean isAccessFromFileURLsGrantedByDefault) { |
// Check whether to use hardware acceleration. This is a bit hacky, and |
// only works if the Context is actually an Activity (as it is in the |
@@ -486,8 +493,15 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN); |
mContainerView = containerView; |
+ |
+ int viewAndroidNativePointer = 0; |
+ if (shouldCreateViewAndroid) { |
+ mViewAndroid = new ViewAndroid(windowAndroid, getViewAndroidDelegate()); |
+ viewAndroidNativePointer = mViewAndroid.getNativePointer(); |
+ } |
+ |
mNativeContentViewCore = nativeInit(mHardwareAccelerated, inputEventsDeliveredAtVSync, |
- nativeWebContents, nativeWindow.getNativePointer()); |
+ nativeWebContents, viewAndroidNativePointer, windowAndroid.getNativePointer()); |
mContentSettings = new ContentSettings( |
this, mNativeContentViewCore, isAccessFromFileURLsGrantedByDefault); |
initializeContainerView(internalDispatcher); |
@@ -639,6 +653,7 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
if (mNativeContentViewCore != 0) { |
nativeOnJavaContentViewCoreDestroyed(mNativeContentViewCore); |
} |
+ if (mViewAndroid != null) mViewAndroid.destroy(); |
mNativeContentViewCore = 0; |
mContentSettings = null; |
mJavaScriptInterfaces.clear(); |
@@ -2643,7 +2658,7 @@ public class ContentViewCore implements MotionEventDelegate, NavigationClient { |
} |
private native int nativeInit(boolean hardwareAccelerated, boolean inputEventsDeliveredAtVSync, |
- int webContentsPtr, int windowAndroidPtr); |
+ int webContentsPtr, int viewAndroidPtr, int windowAndroidPtr); |
private native void nativeOnJavaContentViewCoreDestroyed(int nativeContentViewCoreImpl); |