Index: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java |
index 203ccc7dad9f8e948667caca1a47f6b87796f5f8..f1de498958b1bc01eec2bc71afb90f06b0bdbe89 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java |
@@ -40,7 +40,7 @@ import org.chromium.content.browser.ContentView; |
import org.chromium.content.browser.ContentViewCore; |
import org.chromium.content_public.browser.WebContents; |
import org.chromium.ui.base.ViewAndroidDelegate; |
-import org.chromium.ui.base.WindowAndroid; |
+import org.chromium.ui.base.ViewRoot; |
import org.chromium.ui.display.DisplayAndroid; |
import org.chromium.ui.display.VirtualDisplayAndroid; |
@@ -89,12 +89,14 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
// The ContentViewCore for the main content rect in VR. |
private ContentViewCore mContentCVC; |
- private WindowAndroid mOriginalWindowAndroid; |
+ private ViewRoot mOriginalViewRoot; |
private VrWindowAndroid mContentVrWindowAndroid; |
+ private ViewRoot mContentVrViewRoot; |
private WebContents mUiContents; |
private ContentViewCore mUiCVC; |
private VrWindowAndroid mUiVrWindowAndroid; |
+ private ViewRoot mUiVrViewRoot; |
private boolean mReprojectedRendering; |
@@ -212,18 +214,21 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
mTab = currentTab; |
mContentCVC = mTab.getContentViewCore(); |
mContentVrWindowAndroid = new VrWindowAndroid(mActivity, mContentVirtualDisplay); |
+ mContentVrViewRoot = ViewRoot.create(mContentVrWindowAndroid); |
mUiVrWindowAndroid = new VrWindowAndroid(mActivity, mUiVirtualDisplay); |
mUiContents = WebContentsFactory.createWebContents(true, false); |
+ mUiVrViewRoot = ViewRoot.create(mUiVrWindowAndroid); |
+ |
mUiCVC = new ContentViewCore(mActivity, ChromeVersionInfo.getProductVersion()); |
ContentView uiContentView = ContentView.createContentView(mActivity, mUiCVC); |
- mUiCVC.initialize(ViewAndroidDelegate.createBasicDelegate(uiContentView), |
- uiContentView, mUiContents, mUiVrWindowAndroid); |
+ mUiCVC.initialize(ViewAndroidDelegate.createBasicDelegate(uiContentView), uiContentView, |
+ mUiContents, mUiVrViewRoot); |
- mNativeVrShell = nativeInit(mContentCVC.getWebContents(), |
- mContentVrWindowAndroid.getNativePointer(), mUiContents, |
- mUiVrWindowAndroid.getNativePointer(), forWebVR, mDelegate, |
- getGvrApi().getNativeGvrContext(), mReprojectedRendering); |
+ mNativeVrShell = |
+ nativeInit(mContentCVC.getWebContents(), mContentVrViewRoot.getNativePointer(), |
+ mUiContents, mUiVrViewRoot.getNativePointer(), forWebVR, mDelegate, |
+ getGvrApi().getNativeGvrContext(), mReprojectedRendering); |
// Set the UI and content sizes before we load the UI. |
setUiCssSize(DEFAULT_UI_WIDTH, DEFAULT_UI_HEIGHT, DEFAULT_DPR); |
@@ -294,8 +299,9 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
} |
private void initializeTabForVR() { |
- mOriginalWindowAndroid = mContentCVC.getWindowAndroid(); |
- mTab.updateWindowAndroid(mContentVrWindowAndroid); |
+ mOriginalViewRoot = mTab.getViewRoot(); |
+ |
+ mTab.updateViewRoot(mContentVrViewRoot); |
mContentCVC.onAttachedToWindow(); |
mContentCVC.getContainerView().requestFocus(); |
@@ -306,8 +312,7 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
private void restoreTabFromVR() { |
mTab.setTabRedirectHandler(mNonVrTabRedirectHandler); |
- mTab.updateWindowAndroid(mOriginalWindowAndroid); |
- mOriginalWindowAndroid = null; |
+ mTab.updateViewRoot(mOriginalViewRoot); |
mNonVrTabRedirectHandler = null; |
} |
@@ -396,8 +401,15 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
mTab.removeObserver(mTabObserver); |
restoreTabFromVR(); |
mUiContents.destroy(); |
+ |
+ mContentVrViewRoot.destroy(); |
+ mContentVrWindowAndroid.destroy(); |
+ |
mContentVirtualDisplay.destroy(); |
mUiVirtualDisplay.destroy(); |
+ |
+ mUiVrViewRoot.destroy(); |
+ mUiVrWindowAndroid.destroy(); |
super.shutdown(); |
mCompositorViewHolder.onExitVR(mTabModelSelector); |
} |
@@ -473,9 +485,9 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
}; |
} |
- private native long nativeInit(WebContents contentWebContents, |
- long nativeContentWindowAndroid, WebContents uiWebContents, long nativeUiWindowAndroid, |
- boolean forWebVR, VrShellDelegate delegate, long gvrApi, boolean reprojectedRendering); |
+ private native long nativeInit(WebContents contentWebContents, long nativeContentViewRoot, |
+ WebContents uiWebContents, long nativeUiViewRoot, boolean forWebVR, |
+ VrShellDelegate delegate, long gvrApi, boolean reprojectedRendering); |
private native void nativeSetSurface(long nativeVrShell, Surface surface); |
private native void nativeSwapContents(long nativeVrShell, WebContents webContents); |
private native void nativeLoadUIContent(long nativeVrShell); |