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 fd53a6590c01d0f9c0ffdae4a2d28602ca1670f6..d592e45a998f243522754e0d267d587569b67f95 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 |
| @@ -65,6 +65,7 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| private final CompositorViewHolder mCompositorViewHolder; |
| private final VirtualDisplayAndroid mContentVirtualDisplay; |
| private final VirtualDisplayAndroid mUiVirtualDisplay; |
| + private final TabRedirectHandler mTabRedirectHandler; |
| private long mNativeVrShell; |
| @@ -123,6 +124,13 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| mContentVirtualDisplay.setTo(primaryDisplay); |
| mUiVirtualDisplay = VirtualDisplayAndroid.createVirtualDisplay(); |
| mUiVirtualDisplay.setTo(primaryDisplay); |
| + |
| + mTabRedirectHandler = new TabRedirectHandler(mActivity) { |
| + @Override |
| + public boolean shouldStayInChrome(boolean hasExternalProtocol) { |
| + return true; |
| + } |
| + }; |
| } |
| @Override |
| @@ -132,15 +140,6 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| mContentCVC = mTab.getContentViewCore(); |
| mContentVrWindowAndroid = new VrWindowAndroid(mActivity, mContentVirtualDisplay); |
| - // Make sure we are not redirecting to another app, i.e. out of VR mode. |
| - mNonVrTabRedirectHandler = mTab.getTabRedirectHandler(); |
| - mTab.setTabRedirectHandler(new TabRedirectHandler(mActivity) { |
| - @Override |
| - public boolean shouldStayInChrome(boolean hasExternalProtocol) { |
| - return true; |
| - } |
| - }); |
| - |
| mUiVrWindowAndroid = new VrWindowAndroid(mActivity, mUiVirtualDisplay); |
| mUiContents = WebContentsFactory.createWebContents(true, false); |
| mUiCVC = new ContentViewCore(mActivity, ChromeVersionInfo.getProductVersion()); |
| @@ -187,9 +186,36 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| mUiCVC.setTopControlsHeight(0, false); |
| mUiVrWindowAndroid.onVisibilityChanged(true); |
| + initializeTabForVR(); |
| + } |
| + |
| + private void initializeTabForVR() { |
| mOriginalWindowAndroid = mContentCVC.getWindowAndroid(); |
| mTab.updateWindowAndroid(mContentVrWindowAndroid); |
| mContentCVC.onAttachedToWindow(); |
| + |
| + // Make sure we are not redirecting to another app, i.e. out of VR mode. |
| + mNonVrTabRedirectHandler = mTab.getTabRedirectHandler(); |
| + mTab.setTabRedirectHandler(mTabRedirectHandler); |
| + } |
| + |
| + private void restoreTabFromVR() { |
| + mTab.setTabRedirectHandler(mNonVrTabRedirectHandler); |
| + mTab.updateWindowAndroid(mOriginalWindowAndroid); |
| + mOriginalWindowAndroid = null; |
| + mNonVrTabRedirectHandler = null; |
| + } |
| + |
| + @Override |
| + public void swapTab(final Tab newTab) { |
| + restoreTabFromVR(); |
| + mTab = newTab; |
| + mContentCVC = mTab.getContentViewCore(); |
| + initializeTabForVR(); |
| + |
| + nativeSwapContents(mNativeVrShell, mContentCVC.getWebContents()); |
| + // TODO(mthiesse): Use last set values, rather than default values here. |
|
bshe
2017/01/25 22:15:45
nit: create a crbug so that we wont forget.
mthiesse
2017/01/25 22:34:26
Oops this TODO was to remind myself to do this bef
|
| + setContentCssSize(DEFAULT_CONTENT_WIDTH, DEFAULT_CONTENT_HEIGHT, DEFAULT_DPR); |
| } |
| @CalledByNative |
| @@ -270,15 +296,12 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| nativeDestroy(mNativeVrShell); |
| mNativeVrShell = 0; |
| } |
| - mCompositorViewHolder.onExitVR(mTabModelSelector); |
| - mTab.setTabRedirectHandler(mNonVrTabRedirectHandler); |
| - mTab.updateWindowAndroid(mOriginalWindowAndroid); |
| - mContentCVC.onSizeChanged(mContentCVC.getContainerView().getWidth(), |
| - mContentCVC.getContainerView().getHeight(), 0, 0); |
| + restoreTabFromVR(); |
| mUiContents.destroy(); |
| mContentVirtualDisplay.destroy(); |
| mUiVirtualDisplay.destroy(); |
| super.shutdown(); |
| + mCompositorViewHolder.onExitVR(mTabModelSelector); |
| } |
| @Override |
| @@ -333,6 +356,7 @@ public class VrShellImpl extends GvrLayout implements VrShell, SurfaceHolder.Cal |
| long nativeContentWindowAndroid, WebContents uiWebContents, long nativeUiWindowAndroid, |
| 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); |
| private native void nativeDestroy(long nativeVrShell); |
| private native void nativeOnTriggerEvent(long nativeVrShell); |