Chromium Code Reviews| 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 b5f9ce36dd28985b4dcb6b00b7c5efa7fafcb7d9..d3faf51f52924b54aaabeac3bd9724d4017def5f 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 |
| @@ -43,7 +43,7 @@ import org.chromium.content.browser.ContentViewCore; |
| import org.chromium.content_public.browser.WebContents; |
| import org.chromium.ui.UiUtils; |
| 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; |
| @@ -92,12 +92,16 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| private Tab mTab; |
| private NativePage mNativePage; |
| - private WindowAndroid mOriginalWindowAndroid; |
| + // The ContentViewCore for the main content rect in VR. |
| + private ContentViewCore mContentCVC; |
|
mthiesse
2017/02/14 16:54:28
Remove mContentCVC
|
| + private ViewRoot mOriginalViewRoot; |
| private VrWindowAndroid mContentVrWindowAndroid; |
| + private ViewRoot mContentVrViewRoot; |
| private WebContents mUiContents; |
| private ContentViewCore mUiCVC; |
| private VrWindowAndroid mUiVrWindowAndroid; |
| + private ViewRoot mUiVrViewRoot; |
| private boolean mReprojectedRendering; |
| @@ -256,16 +260,19 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| @Override |
| public void initializeNative(Tab currentTab, boolean forWebVR) { |
| 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(mUiContents, mContentVrWindowAndroid.getNativePointer(), |
| - mUiVrWindowAndroid.getNativePointer(), forWebVR, mDelegate, |
| + mNativeVrShell = nativeInit(mUiContents, mContentVrViewRoot.getNativePointer(), |
| + mUiVrViewRoot.getNativePointer(), forWebVR, mDelegate, |
| getGvrApi().getNativeGvrContext(), mReprojectedRendering); |
| // Set the UI and content sizes before we load the UI. |
| @@ -335,8 +342,10 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| } |
| private void initializeTabForVR() { |
| - mOriginalWindowAndroid = mTab.getWindowAndroid(); |
| - mTab.updateWindowAndroid(mContentVrWindowAndroid); |
| + mOriginalViewRoot = mTab.getViewRoot(); |
| + mTab.updateViewRoot(mContentVrViewRoot); |
| + mContentCVC.onAttachedToWindow(); |
|
mthiesse
2017/02/14 16:54:28
mContentCVC is gone on ToT, we no longer rely on a
|
| + mContentCVC.getContainerView().requestFocus(); |
| // Make sure we are not redirecting to another app, i.e. out of VR mode. |
| mNonVrTabRedirectHandler = mTab.getTabRedirectHandler(); |
| @@ -345,8 +354,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; |
| } |
| @@ -456,8 +464,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); |
| } |
| @@ -533,8 +548,8 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| }; |
| } |
| - private native long nativeInit(WebContents uiWebContents, long nativeContentWindowAndroid, |
| - long nativeUiWindowAndroid, boolean forWebVR, VrShellDelegate delegate, long gvrApi, |
| + private native long nativeInit(WebContents uiWebContents, long nativeContentViewRoot, |
| + 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); |