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

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

Issue 2464373005: Fix VR Shell crashing when renderer crashes or native page is shown. (Closed)
Patch Set: Rebase + address comment Created 4 years, 1 month 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
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 470b8fee24bb8d89551590c8d2f20aa21f6111a7..1ed2b95ca413c3b6041e53015f79c19e10a4af62 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
@@ -35,6 +35,7 @@ import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.WebContentsFactory;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabContentViewParent;
import org.chromium.content.browser.ContentView;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content_public.browser.WebContents;
@@ -73,12 +74,11 @@ public class VrShellImpl extends GvrLayout implements GLSurfaceView.Renderer, Vr
// The ContentViewCore for the main content rect in VR.
private ContentViewCore mContentCVC;
-
- // The non-VR container view for mContentCVC.
- private ViewGroup mOriginalContentViewParent;
+ private TabContentViewParent mTabParent;
+ private ViewGroup mTabParentParent;
// TODO(mthiesse): Instead of caching these values, make tab reparenting work for this case.
- private int mOriginalContentViewIndex;
+ private int mOriginalTabParentIndex;
private ViewGroup.LayoutParams mOriginalLayoutParams;
private WindowAndroid mOriginalWindowAndroid;
@@ -164,23 +164,26 @@ public class VrShellImpl extends GvrLayout implements GLSurfaceView.Renderer, Vr
mTab.updateWindowAndroid(mContentVrWindowAndroid);
- ViewGroup contentContentView = mContentCVC.getContainerView();
- mOriginalContentViewParent = ((ViewGroup) contentContentView.getParent());
- mOriginalContentViewIndex = mOriginalContentViewParent.indexOfChild(contentContentView);
- mOriginalLayoutParams = contentContentView.getLayoutParams();
- mOriginalContentViewParent.removeView(contentContentView);
+ mTabParent = mTab.getView();
+ mTabParentParent = (ViewGroup) mTabParent.getParent();
+ mOriginalTabParentIndex = mTabParentParent.indexOfChild(mTabParent);
+ mOriginalLayoutParams = mTabParent.getLayoutParams();
+ mTabParentParent.removeView(mTabParent);
- mContentViewCoreContainer.addView(contentContentView, new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.MATCH_PARENT,
- FrameLayout.LayoutParams.MATCH_PARENT));
+ mContentViewCoreContainer.addView(mTabParent, new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
}
private void restoreContentWindow() {
- ViewGroup contentContentView = mContentCVC.getContainerView();
mTab.updateWindowAndroid(mOriginalWindowAndroid);
- mContentViewCoreContainer.removeView(contentContentView);
- mOriginalContentViewParent.addView(contentContentView, mOriginalContentViewIndex,
- mOriginalLayoutParams);
+
+ // If the tab's view has changed, the necessary view reparenting has already been done.
+ if (mTab.getView() == mTabParent) {
+ mContentViewCoreContainer.removeView(mTabParent);
+ mTabParentParent.addView(mTabParent, mOriginalTabParentIndex, mOriginalLayoutParams);
+ mTabParent.requestFocus();
+ }
+ mTabParent = null;
}
private static class FrameListener implements OnFrameAvailableListener {

Powered by Google App Engine
This is Rietveld 408576698