| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_VR_MODEL_WEB_VR_MODEL_H_ |
| #define CHROME_BROWSER_VR_MODEL_WEB_VR_MODEL_H_ |
| |
| #include "chrome/browser/vr/vr_base_export.h" |
| |
| namespace vr { |
| |
| // As we wait for WebVR frames, we may pass through the following states. |
| enum WebVrState { |
| // We are not awaiting a WebVR frame. |
| kWebVrNoTimeoutPending = 0, |
| kWebVrAwaitingFirstFrame, |
| // We are awaiting a WebVR frame, and we will soon exceed the amount of time |
| // that we're willing to wait. In this state, it could be appropriate to show |
| // an affordance to the user to let them know that WebVR is delayed (eg, this |
| // would be when we might show a spinner or progress bar). |
| kWebVrTimeoutImminent, |
| // In this case the time allotted for waiting for the first WebVR frame has |
| // been entirely exceeded. This would, for example, be an appropriate time to |
| // show "sad tab" UI to allow the user to bail on the WebVR content. |
| kWebVrTimedOut, |
| // We've received our first WebVR frame and are in WebVR presentation mode. |
| kWebVrPresenting, |
| }; |
| |
| // Type of permission prompt visible out-of-headset on a desktop display that |
| // the user may want to respond to. Currently this can't differentiate between |
| // specific permission requests, in the future we may add kPromptBluetooth etc. |
| enum class ExternalPromptNotificationType { |
| kPromptNone = 0, |
| kPromptGenericPermission, |
| }; |
| |
| struct VR_BASE_EXPORT WebVrModel { |
| WebVrState state = kWebVrNoTimeoutPending; |
| bool has_received_permissions = false; |
| bool showing_hosted_ui = false; |
| bool IsImmersiveWebXrVisible() const { |
| return state == kWebVrPresenting && !showing_hosted_ui && |
| external_prompt_notification == |
| ExternalPromptNotificationType::kPromptNone; |
| } |
| |
| // Desktop permission requests. |
| ExternalPromptNotificationType external_prompt_notification = |
| ExternalPromptNotificationType::kPromptNone; |
| }; |
| |
| } // namespace vr |
| |
| #endif // CHROME_BROWSER_VR_MODEL_WEB_VR_MODEL_H_ |