blob: 65d551df55cea2b45a5e729025886bb7cb0df434 [file] [log] [blame]
// 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_