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 12248dc0ac68a32084809b85d256dcccf3f32637..24c4098ae32dacee2afaa8e7e1b02ada3f8e4523 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 |
@@ -434,11 +434,15 @@ public class VrShellDelegate implements ApplicationStatus.ActivityStateListener, |
nativeDisplayActivate(mNativeVrShellDelegate); |
} |
- enterVr(); |
+ // If the page is listening for vrdisplayactivate we assume it wants to request |
+ // presentation. Go into WebVR mode tentatively. If the page doesn't request presentation |
+ // in the vrdisplayactivate handler we will exit presentation later. |
+ enterVr(mListeningForWebVrActivateBeforePause && !mRequestedWebVr); |
+ |
return true; |
} |
- private void enterVr() { |
+ private void enterVr(final boolean tentativeWebVrMode) { |
// We can't enter VR before the application resumes, or we encounter bizarre crashes |
// related to gpu surfaces. |
assert !mPaused; |
@@ -449,7 +453,7 @@ public class VrShellDelegate implements ApplicationStatus.ActivityStateListener, |
new Handler().post(new Runnable() { |
@Override |
public void run() { |
- enterVr(); |
+ enterVr(tentativeWebVrMode); |
} |
}); |
return; |
@@ -465,8 +469,9 @@ public class VrShellDelegate implements ApplicationStatus.ActivityStateListener, |
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
addVrViews(); |
- mVrShell.initializeNative(mActivity.getActivityTab(), mRequestedWebVr); |
- mVrShell.setWebVrModeEnabled(mRequestedWebVr); |
+ mVrShell.initializeNative( |
+ mActivity.getActivityTab(), mRequestedWebVr || tentativeWebVrMode); |
+ mVrShell.setWebVrModeEnabled(mRequestedWebVr || tentativeWebVrMode); |
// onResume needs to be called on GvrLayout after initialization to make sure DON flow work |
// properly. |
@@ -560,7 +565,7 @@ public class VrShellDelegate implements ApplicationStatus.ActivityStateListener, |
if (mVrSupportLevel == VR_CARDBOARD || !mVrDaydreamApi.isDaydreamCurrentViewer()) { |
// Avoid using launchInVr which would trigger DON flow regardless current viewer type |
// due to the lack of support for unexported activities. |
- enterVr(); |
+ enterVr(false); |
} else { |
// LANDSCAPE orientation is needed before we can safely enter VR. DON can make sure that |
// the device is at LANDSCAPE orientation once it is finished. So here we use SENSOR to |