1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
6 #define DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
7 
8 #include <memory>
9 
10 #include "base/macros.h"
11 #include "base/memory/weak_ptr.h"
12 #include "device/vr/public/mojom/isolated_xr_service.mojom.h"
13 #include "device/vr/public/mojom/vr_service.mojom.h"
14 #include "device/vr/vr_device.h"
15 #include "device/vr/vr_export.h"
16 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
17 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
18 #include "mojo/public/cpp/bindings/pending_receiver.h"
19 #include "mojo/public/cpp/bindings/receiver.h"
20 #include "ui/display/display.h"
21 
22 namespace device {
23 
24 class VROrientationDevice;
25 
26 // VR device process implementation of a XRFrameDataProvider within a session
27 // that exposes device orientation sensors.
28 // VROrientationSession objects are owned by their respective
29 // VROrientationDevice instances.
30 class DEVICE_VR_EXPORT VROrientationSession
31     : public mojom::XRFrameDataProvider,
32       public mojom::XRSessionController {
33  public:
34   VROrientationSession(VROrientationDevice* device,
35                        mojo::PendingReceiver<mojom::XRFrameDataProvider>,
36                        mojo::PendingReceiver<mojom::XRSessionController>);
37   ~VROrientationSession() override;
38 
39   void GetEnvironmentIntegrationProvider(
40       mojo::PendingAssociatedReceiver<mojom::XREnvironmentIntegrationProvider>
41           environment_provider) override;
42   void SetInputSourceButtonListener(
43       mojo::PendingAssociatedRemote<device::mojom::XRInputSourceButtonListener>)
44       override;
45 
46   // Accessible to tests.
47  protected:
48   // mojom::XRFrameDataProvider
49   void GetFrameData(mojom::XRFrameDataRequestOptionsPtr options,
50                     GetFrameDataCallback callback) override;
51 
52   // mojom::XRSessionController
53   void SetFrameDataRestricted(bool frame_data_restricted) override;
54 
55   void OnMojoConnectionError();
56 
57   mojo::Receiver<mojom::XRFrameDataProvider> magic_window_receiver_;
58   mojo::Receiver<mojom::XRSessionController> session_controller_receiver_;
59   device::VROrientationDevice* device_;
60   bool restrict_frame_data_ = true;
61 
62   // This must be the last member
63   base::WeakPtrFactory<VROrientationSession> weak_ptr_factory_{this};
64 };
65 
66 }  // namespace device
67 
68 #endif  //  DEVICE_VR_ORIENTATION_ORIENTATION_SESSION_H_
69