Revert "VR: Ensure we remove black overlay if VR is exited while entering."
This reverts commit 9f8158c12189567f8b9f4bcb44dd3cfc68ecd470.
Reason for revert: Culprit of failed VR tests https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Nougat%20Phone%20Tester/6884
Original change's description:
> VR: Ensure we remove black overlay if VR is exited while entering.
>
> This fixes a failure mode where we shutdownVR after handling the VR NFC
> broadcast, and fail to properly cancel VR entry.
>
> Also does some other random cleanup of comments/visibility.
>
> Bug: 862829
> Change-Id: Ic382692d7255aa5893391a602a6c949b4b4d498b
> Reviewed-on: https://chromium-review.googlesource.com/1138726
> Reviewed-by: Tibor Goldschwendt <tiborg@chromium.org>
> Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#575388}
TBR=mthiesse@chromium.org,tiborg@chromium.org
Change-Id: Ibe67ee8c09dc44ac34d40c3eaf890884b400fc24
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 862829
Reviewed-on: https://chromium-review.googlesource.com/1140813
Reviewed-by: Brian Sheedy <bsheedy@chromium.org>
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575725}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java
index 41f83c3..0d1b7ab 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java
@@ -16,15 +16,19 @@
* This class implements a VrAlertDialog which is similar to Android AlertDialog in VR.
*/
public class VrAlertDialog extends AlertDialog {
+ private VrDialogManager mVrDialogManager;
private ModalDialogManager mModalDialogManager;
private ModalDialogView mModalDialogView;
+ private boolean mIsShowing;
private CharSequence mMessage;
private DialogButton mButtonPositive;
private DialogButton mButtonNegative;
protected View mView;
- public VrAlertDialog(Context context, ModalDialogManager modalDialogManager) {
+ public VrAlertDialog(Context context, VrDialogManager vrDialogManager,
+ ModalDialogManager modalDialogManager) {
super(context);
+ mVrDialogManager = vrDialogManager;
mModalDialogManager = modalDialogManager;
}
@@ -56,6 +60,7 @@
public void show() {
mModalDialogView = createView();
mModalDialogManager.showDialog(mModalDialogView, ModalDialogManager.APP_MODAL);
+ mIsShowing = true;
}
/**
@@ -98,6 +103,7 @@
*/
@Override
public void dismiss() {
+ mIsShowing = false;
mModalDialogManager.cancelDialog(mModalDialogView);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java
index 40fd1b2b..b98b591 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java
@@ -24,6 +24,8 @@
private static final BooleanHistogramSample sFreNotCompleteBrowserHistogram =
new BooleanHistogramSample("VRFreNotComplete.Browser");
+ private static final BooleanHistogramSample sFreNotCompleteAutopresentHistogram =
+ new BooleanHistogramSample("VRFreNotComplete.WebVRAutopresent");
@Override
protected void onCreate(Bundle savedInstanceState) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java
index 2beeed4..b20389a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java
@@ -42,7 +42,6 @@
import org.chromium.base.Log;
import org.chromium.base.PackageUtils;
import org.chromium.base.ThreadUtils;
-import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.library_loader.LibraryLoader;
@@ -207,7 +206,6 @@
private static final List<VrModeObserver> sVrModeObservers = new ArrayList<>();
- @VisibleForTesting
protected boolean mTestWorkaroundDontCancelVrEntryOnResume;
private long mNativeVrShellDelegate;
@@ -908,7 +906,7 @@
}
/**
- * @return Whether or not VR is enabled in this build.
+ * @return Whether or not VR is supported on this platform.
*/
/* package */ static boolean isVrEnabled() {
return getVrClassesWrapper() != null;
@@ -1044,8 +1042,8 @@
// If an activity isn't resumed at the point, it must have been paused.
mPaused = ApplicationStatus.getStateForActivity(activity) != ActivityState.RESUMED;
mVisible = activity.hasWindowFocus();
- mNativeVrShellDelegate = nativeInit();
updateVrSupportLevel(null);
+ mNativeVrShellDelegate = nativeInit();
mFeedbackFrequency = VrFeedbackStatus.getFeedbackFrequency();
ensureLifecycleObserverInitialized();
if (!mPaused) onResume();
@@ -1161,7 +1159,6 @@
buttonText, null, true);
}
- @VisibleForTesting
protected boolean isVrBrowsingEnabled() {
return isVrBrowsingEnabled(mActivity, getVrSupportLevel());
}
@@ -1218,11 +1215,16 @@
}
private void enterVr(final boolean tentativeWebVrMode) {
- // We should only enter VR when we're the resumed Activity or our changes to things like
- // system UI flags might get lost.
+ // We can't enter VR before the application resumes, or we encounter bizarre crashes
+ // related to gpu surfaces.
+ // TODO(mthiesse): Is the above comment still accurate? It may have been tied to our HTML
+ // UI which is gone.
assert !mPaused;
- assert mNativeVrShellDelegate != 0;
if (mInVr) return;
+ if (mNativeVrShellDelegate == 0) {
+ cancelPendingVrEntry();
+ return;
+ }
mInVr = true;
setVrModeEnabled(mActivity, true);
@@ -1242,11 +1244,11 @@
mExitedDueToUnsupportedMode = false;
addVrViews();
+ boolean webVrMode = mRequestedWebVr || tentativeWebVrMode;
// Make sure that assets component is registered when creating native VR shell.
if (!sRegisteredVrAssetsComponent) {
registerVrAssetsComponentIfDaydreamUser(isDaydreamCurrentViewer());
}
- boolean webVrMode = mRequestedWebVr || tentativeWebVrMode;
mVrShell.initializeNative(webVrMode, getVrClassesWrapper().bootsToVr());
mVrShell.setWebVrModeEnabled(webVrMode);
@@ -1288,9 +1290,6 @@
// Nothing to do if we were launched by an internal intent.
if (mInternalIntentUsedToStartVr) {
mInternalIntentUsedToStartVr = false;
- // This is extremely unlikely in practice. Some code must have called shutdownVR() while
- // we were entering VR through NFC insertion.
- if (!mDonSucceeded) cancelPendingVrEntry();
return;
}
@@ -1545,7 +1544,6 @@
return true;
}
- @VisibleForTesting
protected void onResume() {
if (DEBUG_LOGS) Log.i(TAG, "onResume");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return;
@@ -1666,7 +1664,7 @@
if (mInVr) mVrShell.pause();
}
- private void onPause() {
+ protected void onPause() {
if (DEBUG_LOGS) Log.i(TAG, "onPause");
mPaused = true;
if (mCancellingEntryAnimation) return;
@@ -1757,9 +1755,13 @@
mShowingDaydreamDoff = false;
- if (mShowingDoffForGvrUpdate) mShowVrServicesUpdatePrompt = success;
+ if (mShowingDoffForGvrUpdate) {
+ mShowVrServicesUpdatePrompt = success;
+ }
- if (success) shutdownVr(true /* disableVrMode */, true /* stayingInChrome */);
+ if (success) {
+ shutdownVr(true /* disableVrMode */, true /* stayingInChrome */);
+ }
callOnExitVrRequestListener(success);
mShowingDoffForGvrUpdate = false;
@@ -1776,7 +1778,8 @@
@CalledByNative
private void setListeningForWebVrActivate(boolean listening) {
if (DEBUG_LOGS) Log.i(TAG, "WebVR page listening for vrdisplayactivate: " + listening);
- // Non-Daydream devices do not have the concept of activation.
+ // Non-Daydream devices may not have the concept of display activate. So disable
+ // mListeningForWebVrActivate for them.
if (getVrSupportLevel() != VrSupportLevel.VR_DAYDREAM) return;
if (mListeningForWebVrActivate == listening) return;
mListeningForWebVrActivate = listening;
@@ -1821,7 +1824,7 @@
/**
* Exits VR Shell, performing all necessary cleanup.
*/
- private void shutdownVr(boolean disableVrMode, boolean stayingInChrome) {
+ protected void shutdownVr(boolean disableVrMode, boolean stayingInChrome) {
if (DEBUG_LOGS) Log.i(TAG, "shuttdown VR");
cancelPendingVrEntry();
@@ -1938,13 +1941,11 @@
GVR_KEYBOARD_UPDATE_RESULT);
}
- @VisibleForTesting
protected boolean canLaunch2DIntentsInternal() {
return getVrClassesWrapper().supports2dInVr()
&& !sVrModeEnabledActivitys.contains(sInstance.mActivity);
}
- @VisibleForTesting
protected boolean createVrShell() {
assert mVrShell == null;
if (getVrClassesWrapper() == null) return false;
@@ -1971,7 +1972,6 @@
mActivity.onEnterVr();
}
- @VisibleForTesting
protected boolean isBlackOverlayVisible() {
View overlay = mActivity.getWindow().findViewById(R.id.vr_overlay_view);
return overlay != null;
@@ -1997,7 +1997,6 @@
/**
* @param api The VrDaydreamApi object this delegate will use instead of the default one
*/
- @VisibleForTesting
protected void overrideDaydreamApi(VrDaydreamApi api) {
sVrDaydreamApi = api;
}
@@ -2005,7 +2004,6 @@
/**
* @return The VrShell for the VrShellDelegate instance
*/
- @VisibleForTesting
protected VrShell getVrShell() {
return mVrShell;
}
@@ -2013,7 +2011,6 @@
/**
* @param versionChecker The VrCoreVersionChecker object this delegate will use
*/
- @VisibleForTesting
protected void overrideVrCoreVersionChecker(VrCoreVersionChecker versionChecker) {
sVrCoreVersionChecker = versionChecker;
updateVrSupportLevel(null);
@@ -2022,30 +2019,24 @@
/**
* @param frequency Sets how often to show the feedback prompt.
*/
- @VisibleForTesting
protected void setFeedbackFrequency(int frequency) {
mFeedbackFrequency = frequency;
}
- @VisibleForTesting
protected boolean isListeningForWebVrActivate() {
return mListeningForWebVrActivate;
}
- @VisibleForTesting
protected boolean isVrEntryComplete() {
return mInVr && !mProbablyInDon;
}
- @VisibleForTesting
protected boolean isShowingDoff() {
return mShowingDaydreamDoff;
}
- @VisibleForTesting
protected void onBroadcastReceived() {}
- @VisibleForTesting
protected void setExpectingIntent(boolean expectingIntent) {}
/**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java
index 4ec17fa93..ec9edf9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java
@@ -12,6 +12,7 @@
/**
* This class implements a Toast which is similar to Android Toast in VR.
*/
+
public class VrToast extends android.widget.Toast {
private VrToastManager mVrToastManager;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java
index 5b56053..8e66e5e9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java
@@ -36,7 +36,7 @@
@Override
public AlertDialog createAlertDialog(Context context) {
- return new VrAlertDialog(context, mModalDialogManager);
+ return new VrAlertDialog(context, mVrShell, mModalDialogManager);
}
@Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java
index a79186f..a196f91 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java
@@ -48,6 +48,11 @@
return TestVrShellDelegate.getInstance().getVrShell();
}
+ @Override
+ public void shutdownVr(boolean disableVrMode, boolean stayingInChrome) {
+ super.shutdownVr(disableVrMode, stayingInChrome);
+ }
+
public void overrideDaydreamApiForTesting(VrDaydreamApi api) {
super.overrideDaydreamApi(api);
}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/TransitionUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/TransitionUtils.java
index 2e1323a..1b7f6cec 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/TransitionUtils.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/TransitionUtils.java
@@ -69,7 +69,8 @@
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- VrShellDelegate.forceExitVrImmediately();
+ VrShellDelegateUtils.getDelegateInstance().shutdownVr(
+ true /* disableVrMode */, true /* stayingInChrome */);
}
});
}