New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 729857 link

Starred by 2 users

Issue metadata

Status: WontFix
Owner: ----
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Feature
Proj-XR

Blocked on:
issue 695937



Sign in to add a comment

Consider delaying getVRDisplays() promise resolution until install/update prompt is acted upon

Project Member Reported by ddorwin@chromium.org, Jun 6 2017

Issue description

[Adapted from  https://crbug.com/727969#c7 ]

If the Google VR Services are missing or too old, Chrome will prompt the user to install or update them, respectively (implemented in  issue 670166 ). Currently, when this happens, Chrome immediately resolves the promise returned by getVRDisplays() with 0 devices. However, the user experience may be better - especially in the happy path - if Chrome waited for the user to take action on the prompt before resolving the promise. This bug tracks making a decision and potentially implementing this.


There are three cases:

1. The user clicks the action button in the prompt and is taken to the Play store and away from Chrome. In the happy case, the user installs/updates GVR and returns to Chrome.
* Proposed: If Chrome polled GVR and resolve the promise once it's installed/updated, the VR experience could proceed as expected when the user returns to Chrome.
* Current: Because Chrome returns 0 devices immediately, the user needs to reload the page upon returning.

2. The user dismisses the dialog ('x').
* Proposed: Return 0 devices when dismissed. The app will work as expected.
* Current: The behavior is the same except there is currently no delay until the user dismisses the dialog.

3. The user ignores or does not see the dialog.
(This is also the case for #1 where the user does not successfully install/update GVR, even if it is an installation failure.)
* Proposed: Chrome is still waiting for the user to take action. The promise remains unresolved. (This leads to issues, such as those described in  issue 727969  for the polyfill.)
* Current: Chrome immediately returns 0 devices, allowing the polyfill (or other app code) to proceed.

Considerations:
* Polling in #1 provides the most seamless experience for the happy path.
  - If we don't poll, we should tell the user to refresh the page after installing/updating.
* For users that ignore/don't see the prompt, immediately returning 0 devices will allow the user to have _an_ experience with the polyfill.
  - However, doing so prevents the seamless experience and users may not know they are getting a degraded polyfill experience. For the latter, it may be best to break the experience, though it's unfortunate that the application doesn't have insight into what's happening. 
* We currently prompt all users to install GVR even if they do not have a VR device. Thus, we may be more likely to encounter #2 and #3. ( Issue 695937  could help address this.)


Note: Apps should correctly handle noticeable delays in resolving the promise (or a promise that is never resolved) as there are a variety of reasons that a user agent may need to delay a response until it knows what value to return. Possible reasons include prompting the user for permission or downloading a VR component.

In the case of the polyfill, it could time out or tell the user to accept/dismiss any prompts.
 
The proposed behaviour in all three cases mostly makes sense to me.

For case 3 I'd like to confirm that there is no way for the dialog to be not visible that doesn't also settle the promise.

Just playing devil's advocate: Would it not also be possible that we resolve with 0 devices in this situation, but then poll anyway and fire the vrdisplayconnected event if/when GVR is ready? Developers are already going to want to handle the case on desktop where the HMD is not turned on when the user lands on the page.
Yes, resolving with 0 devices and expecting devs listen to vrdisplayconnected is also very possible, and probably what we should have done from the beginning to ensure folks handle this correctly.

We would be breaking a lot of experiences if we did this. However, we are in origin trial so it's probably worth considering.
That makes sense, though I wonder how many apps would actually handle that correctly, especially if they have mobile-specific logic.

Also, what is the correct UX for an app using the polyfill? They may have already started using the polyfill, so they aren't going to restart to get the native implementation.
Status: WontFix (was: Available)
So I think this is probably a non-issue (or non-starter, depending on how you look at it) on Android, because VrCore updates require restarting the browser, which will reload the webpage.

So I think we should just keep the current behavior of resolving with 0 devices, it's not really possible to do any better.
Components: Blink>WebXR

Sign in to add a comment