Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java

Issue 2938253002: Reparent all tabs when entering/exiting VR. (Closed)
Patch Set: Address comments + add assert just in case Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c9bbaf81267378f94261983b13cc902806bded02..53190ec122d9c1926f2f186b9fa18d0758200697 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
@@ -33,7 +33,9 @@ import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tab.TabRedirectHandler;
+import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
+import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
@@ -100,7 +102,6 @@ public class VrShellImpl
private Boolean mCanGoBack;
private Boolean mCanGoForward;
- private WindowAndroid mOriginalWindowAndroid;
private VrWindowAndroid mContentVrWindowAndroid;
private boolean mReprojectedRendering;
@@ -320,6 +321,7 @@ public class VrShellImpl
// Set the UI and content sizes before we load the UI.
updateWebVrDisplaySize(forWebVr);
+ reparentAllTabs(mContentVrWindowAndroid);
swapToForegroundTab();
createTabList();
mActivity.getTabModelSelector().addObserver(mTabModelSelectorObserver);
@@ -367,21 +369,35 @@ public class VrShellImpl
}
private void initializeTabForVR() {
- mOriginalWindowAndroid = mTab.getWindowAndroid();
- mTab.updateWindowAndroid(mContentVrWindowAndroid);
-
// Make sure we are not redirecting to another app, i.e. out of VR mode.
mNonVrTabRedirectHandler = mTab.getTabRedirectHandler();
mTab.setTabRedirectHandler(mTabRedirectHandler);
+ assert mTab.getWindowAndroid() == mContentVrWindowAndroid;
}
private void restoreTabFromVR() {
mTab.setTabRedirectHandler(mNonVrTabRedirectHandler);
- mTab.updateWindowAndroid(mOriginalWindowAndroid);
- mOriginalWindowAndroid = null;
mNonVrTabRedirectHandler = null;
}
+ private void reparentAllTabs(WindowAndroid window) {
+ // Ensure new tabs are created with the correct window.
+ boolean[] values = {true, false};
+ for (boolean incognito : values) {
+ TabCreator tabCreator = mActivity.getTabCreator(incognito);
+ if (tabCreator instanceof ChromeTabCreator) {
+ ((ChromeTabCreator) tabCreator).setWindowAndroid(window);
+ }
+ }
+
+ // Reparent all existing tabs.
+ for (TabModel model : mActivity.getTabModelSelector().getModels()) {
+ for (int i = 0; i < model.getCount(); ++i) {
+ model.getTabAt(i).updateWindowAndroid(window);
+ }
+ }
+ }
+
// Exits VR, telling the user to remove their headset, and returning to Chromium.
@CalledByNative
public void forceExitVr() {
@@ -487,6 +503,7 @@ public class VrShellImpl
@Override
public void shutdown() {
+ reparentAllTabs(mActivity.getWindowAndroid());
if (mNativeVrShell != 0) {
nativeDestroy(mNativeVrShell);
mNativeVrShell = 0;
@@ -663,7 +680,7 @@ public class VrShellImpl
@CalledByNative
public float getNativePageScrollRatio() {
- return mOriginalWindowAndroid.getDisplay().getDipScale()
+ return mActivity.getWindowAndroid().getDisplay().getDipScale()
/ mContentVrWindowAndroid.getDisplay().getDipScale();
}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698