Consider delaying getVRDisplays() promise resolution until install/update prompt is acted upon |
|||
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.
,
Jun 9 2017
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.
,
Jun 9 2017
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.
,
Aug 29 2017
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.
,
Jul 4
|
|||
►
Sign in to add a comment |
|||
Comment 1 by mscales@chromium.org
, Jun 9 2017