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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.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
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java » ('j') | 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/VrShellDelegate.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
index a17cfad7b8fc38a40271a79dad826f65a660574c..4445984699a748246b497b5c874a9e697d0ddaf6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellDelegate.java
@@ -22,7 +22,9 @@ import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeTabbedActivity;
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.content_public.common.BrowserControlsState;
import java.lang.reflect.Constructor;
@@ -35,7 +37,8 @@ import java.lang.reflect.InvocationTargetException;
public class VrShellDelegate {
private static final String TAG = "VrShellDelegate";
- private ChromeTabbedActivity mActivity;
+ private final ChromeTabbedActivity mActivity;
+ private final TabObserver mTabObserver;
private boolean mVrAvailable;
private Boolean mVrShellEnabled;
@@ -51,6 +54,7 @@ public class VrShellDelegate {
private int mRestoreOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
private String mVrExtra;
private long mNativeVrShellDelegate;
+ private Tab mTab;
private static final String DAYDREAM_DON_AUTO_TRANSITION =
"org.chromium.chrome.browser.vr_shell.DAYDREAM_DON_AUTO_TRANSITION";
@@ -68,6 +72,23 @@ public class VrShellDelegate {
}
createVrDaydreamApi();
}
+
+ mTabObserver = new EmptyTabObserver() {
+ @Override
+ public void onContentChanged(Tab tab) {
+ if (tab.getNativePage() != null || tab.isShowingSadTab()) {
+ // For now we don't handle native pages. crbug.com/661609
+ exitVRIfNecessary();
+ }
+ }
+
+ @Override
+ public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) {
+ // TODO(mthiesse): Update the native WebContents pointer and compositor. This
+ // doesn't seem to get triggered in VR Shell currently, but that's likely to change
+ // when we have omnibar navigation.
+ }
+ };
}
/**
@@ -120,7 +141,17 @@ public class VrShellDelegate {
if (tab == null || tab.getContentViewCore() == null) {
return false;
}
+
+ // For now we don't handle native pages. crbug.com/661609
+ if (tab.getNativePage() != null || tab.isShowingSadTab()) {
+ return false;
+ }
+
if (mInVr) return true;
+
+ mTab = tab;
+ mTab.addObserver(mTabObserver);
+
mRestoreOrientation = mActivity.getRequestedOrientation();
// VrShell must be initialized in Landscape mode due to a bug in the GVR library.
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
@@ -130,11 +161,11 @@ public class VrShellDelegate {
}
addVrViews();
setupVrModeWindowFlags();
- mVrShell.initializeNative(tab, this);
+ mVrShell.initializeNative(mTab, this);
if (inWebVR) mVrShell.setWebVrModeEnabled(true);
mVrShell.setVrModeEnabled(true);
mInVr = true;
- tab.updateFullscreenEnabledState();
+ mTab.updateFullscreenEnabledState();
return true;
}
@@ -284,11 +315,9 @@ public class VrShellDelegate {
clearVrModeWindowFlags();
destroyVrShell();
mInVr = false;
- Tab tab = mActivity.getActivityTab();
- if (tab != null) {
- tab.updateFullscreenEnabledState();
- tab.updateBrowserControlsState(BrowserControlsState.SHOWN, true);
- }
+ mTab.removeObserver(mTabObserver);
+ mTab.updateFullscreenEnabledState();
+ mTab.updateBrowserControlsState(BrowserControlsState.SHOWN, true);
}
private boolean createVrDaydreamApi() {
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/vr_shell/VrShellImpl.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698