OLD | NEW |
(Empty) | |
| 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 SensorController_h |
| 6 #define SensorController_h |
| 7 |
| 8 #include "core/frame/LocalFrameLifecycleObserver.h" |
| 9 #include "device/sensors/sensor.mojom-blink.h" |
| 10 #include "device/sensors/sensor_factory.mojom-blink.h" |
| 11 #include "modules/ModulesExport.h" |
| 12 #include "mojo/public/cpp/bindings/binding.h" |
| 13 #include "mojo/public/cpp/system/core.h" |
| 14 #include "platform/Supplementable.h" |
| 15 #include "platform/heap/Handle.h" |
| 16 |
| 17 namespace blink { |
| 18 |
| 19 class LocalFrame; |
| 20 class SensorProvider; |
| 21 |
| 22 class MODULES_EXPORT SensorController final |
| 23 : public GarbageCollectedFinalized<SensorController> |
| 24 , public device::sensors::blink::SensorClient { |
| 25 USING_PRE_FINALIZER(SensorController, dispose); |
| 26 WTF_MAKE_NONCOPYABLE(SensorController); |
| 27 public: |
| 28 class Observer : public GarbageCollectedMixin { |
| 29 public: |
| 30 virtual void onSensorInitialized() {} |
| 31 virtual void onSensorReadingChanged() {} |
| 32 virtual void onSensorError() {} |
| 33 }; |
| 34 |
| 35 ~SensorController(); |
| 36 |
| 37 void dispose(); |
| 38 |
| 39 void addObserver(Observer* observer); |
| 40 void removeObserver(Observer* observer); |
| 41 |
| 42 void initialize(); |
| 43 |
| 44 bool isInitializing() const { return m_state == Initializing; } |
| 45 bool isInitialized() const { return m_state == Initialized; } |
| 46 |
| 47 void startConfiguration(device::sensors::blink::SensorConfigurationPtr, std:
:unique_ptr<Function<void(bool)>>); |
| 48 void stopConfiguration(device::sensors::blink::SensorConfigurationPtr, std::
unique_ptr<Function<void(bool)>>); |
| 49 |
| 50 device::sensors::blink::SensorType type() const { return m_type; } |
| 51 device::sensors::blink::ReportingMode reportingMode() const { return m_mode;
} |
| 52 |
| 53 template <typename Reading> |
| 54 const Reading* reading() const |
| 55 { |
| 56 ASSERT(m_sharedBuffer); |
| 57 static_assert(sizeof(Reading) == sBufferSize, "Check reading size"); |
| 58 return static_cast<Reading*>(m_sharedBuffer); |
| 59 } |
| 60 |
| 61 DECLARE_VIRTUAL_TRACE(); |
| 62 |
| 63 private: |
| 64 SensorController(device::sensors::blink::SensorType, SensorProvider*); |
| 65 // device::sensors::blink::SensorClient overrides. |
| 66 void OnSensorError() override; |
| 67 void OnSensorReadingChanged() override; |
| 68 void handleSensorError(); |
| 69 |
| 70 void onSensorCreated(device::sensors::blink::Result result, mojo::ScopedShar
edBufferHandle handle, uint64_t offset, uint64_t size, device::sensors::blink::R
eportingMode mode); |
| 71 |
| 72 device::sensors::blink::SensorType m_type; |
| 73 device::sensors::blink::ReportingMode m_mode; |
| 74 Member<SensorProvider> m_provider; |
| 75 HeapHashSet<WeakMember<Observer>> m_observers; |
| 76 |
| 77 device::sensors::blink::SensorPtr m_sensor; |
| 78 mojo::Binding<device::sensors::blink::SensorClient> m_clientBinding; |
| 79 enum State { |
| 80 Uninitialized, |
| 81 Initializing, |
| 82 Initialized |
| 83 }; |
| 84 State m_state; |
| 85 mojo::ScopedSharedBufferHandle m_sharedBufferHandle; |
| 86 void* m_sharedBuffer; |
| 87 friend class SensorProvider; |
| 88 |
| 89 static const size_t sBufferSize = device::sensors::blink::kSensorReadingFiel
dSize * device::sensors::blink::kSensorReadingFieldsCount; |
| 90 }; |
| 91 |
| 92 class MODULES_EXPORT SensorProvider final |
| 93 : public GarbageCollectedFinalized<SensorProvider> |
| 94 , public Supplement<LocalFrame> |
| 95 , public LocalFrameLifecycleObserver { |
| 96 USING_GARBAGE_COLLECTED_MIXIN(SensorProvider); |
| 97 WTF_MAKE_NONCOPYABLE(SensorProvider); |
| 98 public: |
| 99 static SensorProvider* getOrCreateForFrame(LocalFrame&); |
| 100 |
| 101 ~SensorProvider(); |
| 102 |
| 103 SensorController* getOrCreateSensor(device::sensors::blink::SensorType type)
; |
| 104 |
| 105 DECLARE_VIRTUAL_TRACE(); |
| 106 |
| 107 private: |
| 108 SensorProvider(LocalFrame&); |
| 109 |
| 110 // To be called by SensorController. |
| 111 void removeSensor(SensorController*); |
| 112 device::sensors::blink::SensorFactory* sensorFactory() const { return m_sens
orFactory.get(); } |
| 113 friend class SensorController; |
| 114 |
| 115 void handleSensorError(); |
| 116 |
| 117 HeapVector<Member<SensorController>> m_sensors; |
| 118 static constexpr const char* s_supplementKey = "SensorProvider"; |
| 119 |
| 120 device::sensors::blink::SensorFactoryPtr m_sensorFactory; |
| 121 }; |
| 122 |
| 123 } // namespace blink |
| 124 |
| 125 #endif // SensorController_h |
OLD | NEW |