Index: android_webview/java/src/org/chromium/android_webview/AwContents.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
index 7c8df9fe3e2ddef444d38070d347ed86213215b2..cf682a775f51eb8b64011cd6c610948165e6b420 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
@@ -78,6 +78,7 @@ import org.chromium.net.NetworkChangeNotifier; |
import org.chromium.ui.base.ActivityWindowAndroid; |
import org.chromium.ui.base.PageTransition; |
import org.chromium.ui.base.ViewAndroidDelegate; |
+import org.chromium.ui.base.ViewRoot; |
import org.chromium.ui.base.WindowAndroid; |
import org.chromium.ui.display.DisplayAndroid.DisplayAndroidObserver; |
@@ -366,21 +367,26 @@ public class AwContents implements SmartClipProvider, PostMessageSender.PostMess |
private static String sCurrentLocales = ""; |
+ private ViewRoot mViewRoot; |
+ |
private static final class AwContentsDestroyRunnable implements Runnable { |
private final long mNativeAwContents; |
// Hold onto a reference to the window (via its wrapper), so that it is not destroyed |
// until we are done here. |
private final WindowAndroidWrapper mWindowAndroid; |
+ private final ViewRoot mViewRoot; |
private AwContentsDestroyRunnable( |
- long nativeAwContents, WindowAndroidWrapper windowAndroid) { |
+ long nativeAwContents, WindowAndroidWrapper windowAndroid, ViewRoot viewRoot) { |
mNativeAwContents = nativeAwContents; |
mWindowAndroid = windowAndroid; |
+ mViewRoot = viewRoot; |
} |
@Override |
public void run() { |
nativeDestroy(mNativeAwContents); |
+ mViewRoot.destroy(); |
} |
} |
@@ -809,12 +815,11 @@ public class AwContents implements SmartClipProvider, PostMessageSender.PostMess |
onContainerViewChanged(); |
} |
- private void initializeContentViewCore(ContentViewCore contentViewCore, |
- Context context, ViewAndroidDelegate viewDelegate, |
- InternalAccessDelegate internalDispatcher, WebContents webContents, |
- GestureStateListener gestureStateListener, ContentViewClient contentViewClient, |
- WindowAndroid windowAndroid) { |
- contentViewCore.initialize(viewDelegate, internalDispatcher, webContents, windowAndroid); |
+ private void initializeContentViewCore(ContentViewCore contentViewCore, Context context, |
+ ViewAndroidDelegate viewDelegate, InternalAccessDelegate internalDispatcher, |
+ WebContents webContents, GestureStateListener gestureStateListener, |
+ ContentViewClient contentViewClient, ViewRoot viewRoot) { |
+ contentViewCore.initialize(viewDelegate, internalDispatcher, webContents, viewRoot); |
contentViewCore.setActionModeCallback( |
new AwActionModeCallback(mContext, this, |
contentViewCore.getActionModeCallbackHelper())); |
@@ -1057,9 +1062,10 @@ public class AwContents implements SmartClipProvider, PostMessageSender.PostMess |
mContentViewCore = new ContentViewCore(mContext, PRODUCT_VERSION); |
mViewAndroidDelegate = new AwViewAndroidDelegate(mContainerView, |
mContentsClient, mContentViewCore.getRenderCoordinates()); |
+ mViewRoot = ViewRoot.create(mWindowAndroid.getWindowAndroid()); |
initializeContentViewCore(mContentViewCore, mContext, mViewAndroidDelegate, |
mInternalAccessAdapter, webContents, new AwGestureStateListener(), |
- mContentViewClient, mWindowAndroid.getWindowAndroid()); |
+ mContentViewClient, mViewRoot); |
nativeSetJavaPeers(mNativeAwContents, this, mWebContentsDelegate, mContentsClientBridge, |
mIoThreadClient, mInterceptNavigationDelegate); |
mWebContents = mContentViewCore.getWebContents(); |
@@ -1075,7 +1081,7 @@ public class AwContents implements SmartClipProvider, PostMessageSender.PostMess |
// The native side object has been bound to this java instance, so now is the time to |
// bind all the native->java relationships. |
mCleanupReference = new CleanupReference( |
- this, new AwContentsDestroyRunnable(mNativeAwContents, mWindowAndroid)); |
+ this, new AwContentsDestroyRunnable(mNativeAwContents, mWindowAndroid, mViewRoot)); |
} |
private void installWebContentsObserver() { |
@@ -1232,6 +1238,7 @@ public class AwContents implements SmartClipProvider, PostMessageSender.PostMess |
mNativeAwContents = 0; |
mWebContents = null; |
mNavigationController = null; |
+ mViewRoot = null; |
mCleanupReference.cleanupNow(); |
mCleanupReference = null; |