#ifndef DEVICE_VR_VR_DEVICE_BASE_H_
#define DEVICE_VR_VR_DEVICE_BASE_H_
#include "base/component_export.h"
#include "build/build_config.h"
#include "device/vr/public/mojom/isolated_xr_service.mojom.h"
#include "device/vr/public/mojom/vr_service.mojom.h"
#include "device/vr/public/mojom/xr_device.mojom.h"
#include "device/vr/public/mojom/xr_session.mojom.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_remote.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
struct CHROME_LUID;
namespace device {
class COMPONENT_EXPORT(DEVICE_VR_BASE) VRDeviceBase : public mojom::XRRuntime {
public:
explicit VRDeviceBase(mojom::XRDeviceId id);
VRDeviceBase(const VRDeviceBase&) = delete;
VRDeviceBase& operator=(const VRDeviceBase&) = delete;
~VRDeviceBase() override;
void ListenToDeviceChanges(
mojo::PendingAssociatedRemote<mojom::XRRuntimeEventListener> listener)
final;
device::mojom::XRDeviceId GetId() const;
device::mojom::XRDeviceDataPtr GetDeviceData() const;
bool HasExclusiveSession();
virtual void PauseTracking();
virtual void ResumeTracking();
mojo::PendingRemote<mojom::XRRuntime> BindXRRuntime();
virtual void OnExitPresent();
protected:
void OnStartPresenting();
bool IsPresenting() { return presenting_; }
void OnVisibilityStateChanged(mojom::XRVisibilityState visibility_state);
void SetArBlendModeSupported(bool is_ar_blend_mode_supported);
void SetSupportedFeatures(
const std::vector<mojom::XRSessionFeature>& features);
void SetDeviceData(device::mojom::XRDeviceData&& device_data);
#if BUILDFLAG(IS_WIN)
void SetLuid(const CHROME_LUID& luid);
#endif
private:
mojo::AssociatedRemote<mojom::XRRuntimeEventListener> listener_;
bool presenting_ = false;
device::mojom::XRDeviceId id_;
device::mojom::XRDeviceData device_data_;
mojo::Receiver<mojom::XRRuntime> runtime_receiver_{this};
};
}
#endif