// Copyright 2015 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 DEVICE_VR_VR_DEVICE_H #define DEVICE_VR_VR_DEVICE_H #include "base/callback.h" #include "base/macros.h" #include "device/vr/vr_export.h" #include "device/vr/vr_service.mojom.h" namespace device { class VRDisplayImpl; const unsigned int VR_DEVICE_LAST_ID = 0xFFFFFFFF; class DEVICE_VR_EXPORT VRDevice { public: VRDevice(); virtual ~VRDevice(); unsigned int id() const { return id_; } virtual void GetVRDevice( const base::Callback& callback) = 0; virtual void ResetPose() = 0; virtual void RequestPresent(const base::Callback& callback) = 0; virtual void SetSecureOrigin(bool secure_origin) = 0; virtual void ExitPresent() = 0; virtual void SubmitFrame(mojom::VRPosePtr pose) = 0; virtual void UpdateLayerBounds(int16_t frame_index, mojom::VRLayerBoundsPtr left_bounds, mojom::VRLayerBoundsPtr right_bounds) = 0; virtual void GetVRVSyncProvider(mojom::VRVSyncProviderRequest request) = 0; virtual void AddDisplay(VRDisplayImpl* display); virtual void RemoveDisplay(VRDisplayImpl* display); virtual bool IsAccessAllowed(VRDisplayImpl* display); virtual bool CheckPresentingDisplay(VRDisplayImpl* display); virtual void OnChanged(); virtual void OnExitPresent(); virtual void OnBlur(); virtual void OnFocus(); virtual void OnActivate(mojom::VRDisplayEventReason reason); virtual void OnDeactivate(mojom::VRDisplayEventReason reason); protected: friend class VRDisplayImpl; friend class VRDisplayImplTest; void SetPresentingDisplay(VRDisplayImpl* display); private: void OnVRDisplayInfoCreated(mojom::VRDisplayInfoPtr vr_device_info); std::set displays_; VRDisplayImpl* presenting_display_; unsigned int id_; static unsigned int next_id_; base::WeakPtrFactory weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(VRDevice); }; } // namespace device #endif // DEVICE_VR_VR_DEVICE_H