Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Side by Side Diff: third_party/WebKit/Source/modules/sensor/SensorController.h

Issue 2051083002: WIP : Generic Sensor API implementation Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/sensor/Sensor.cpp ('k') | third_party/WebKit/Source/modules/sensor/SensorController.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698