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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/sensor/SensorController.h
diff --git a/third_party/WebKit/Source/modules/sensor/SensorController.h b/third_party/WebKit/Source/modules/sensor/SensorController.h
new file mode 100644
index 0000000000000000000000000000000000000000..ab1bcac2e2d191dd85d4fe0c182432a58a2c5735
--- /dev/null
+++ b/third_party/WebKit/Source/modules/sensor/SensorController.h
@@ -0,0 +1,125 @@
+// Copyright 2016 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 SensorController_h
+#define SensorController_h
+
+#include "core/frame/LocalFrameLifecycleObserver.h"
+#include "device/sensors/sensor.mojom-blink.h"
+#include "device/sensors/sensor_factory.mojom-blink.h"
+#include "modules/ModulesExport.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/system/core.h"
+#include "platform/Supplementable.h"
+#include "platform/heap/Handle.h"
+
+namespace blink {
+
+class LocalFrame;
+class SensorProvider;
+
+class MODULES_EXPORT SensorController final
+ : public GarbageCollectedFinalized<SensorController>
+ , public device::sensors::blink::SensorClient {
+ USING_PRE_FINALIZER(SensorController, dispose);
+ WTF_MAKE_NONCOPYABLE(SensorController);
+public:
+ class Observer : public GarbageCollectedMixin {
+ public:
+ virtual void onSensorInitialized() {}
+ virtual void onSensorReadingChanged() {}
+ virtual void onSensorError() {}
+ };
+
+ ~SensorController();
+
+ void dispose();
+
+ void addObserver(Observer* observer);
+ void removeObserver(Observer* observer);
+
+ void initialize();
+
+ bool isInitializing() const { return m_state == Initializing; }
+ bool isInitialized() const { return m_state == Initialized; }
+
+ void startConfiguration(device::sensors::blink::SensorConfigurationPtr, std::unique_ptr<Function<void(bool)>>);
+ void stopConfiguration(device::sensors::blink::SensorConfigurationPtr, std::unique_ptr<Function<void(bool)>>);
+
+ device::sensors::blink::SensorType type() const { return m_type; }
+ device::sensors::blink::ReportingMode reportingMode() const { return m_mode; }
+
+ template <typename Reading>
+ const Reading* reading() const
+ {
+ ASSERT(m_sharedBuffer);
+ static_assert(sizeof(Reading) == sBufferSize, "Check reading size");
+ return static_cast<Reading*>(m_sharedBuffer);
+ }
+
+ DECLARE_VIRTUAL_TRACE();
+
+private:
+ SensorController(device::sensors::blink::SensorType, SensorProvider*);
+ // device::sensors::blink::SensorClient overrides.
+ void OnSensorError() override;
+ void OnSensorReadingChanged() override;
+ void handleSensorError();
+
+ void onSensorCreated(device::sensors::blink::Result result, mojo::ScopedSharedBufferHandle handle, uint64_t offset, uint64_t size, device::sensors::blink::ReportingMode mode);
+
+ device::sensors::blink::SensorType m_type;
+ device::sensors::blink::ReportingMode m_mode;
+ Member<SensorProvider> m_provider;
+ HeapHashSet<WeakMember<Observer>> m_observers;
+
+ device::sensors::blink::SensorPtr m_sensor;
+ mojo::Binding<device::sensors::blink::SensorClient> m_clientBinding;
+ enum State {
+ Uninitialized,
+ Initializing,
+ Initialized
+ };
+ State m_state;
+ mojo::ScopedSharedBufferHandle m_sharedBufferHandle;
+ void* m_sharedBuffer;
+ friend class SensorProvider;
+
+ static const size_t sBufferSize = device::sensors::blink::kSensorReadingFieldSize * device::sensors::blink::kSensorReadingFieldsCount;
+};
+
+class MODULES_EXPORT SensorProvider final
+ : public GarbageCollectedFinalized<SensorProvider>
+ , public Supplement<LocalFrame>
+ , public LocalFrameLifecycleObserver {
+ USING_GARBAGE_COLLECTED_MIXIN(SensorProvider);
+ WTF_MAKE_NONCOPYABLE(SensorProvider);
+public:
+ static SensorProvider* getOrCreateForFrame(LocalFrame&);
+
+ ~SensorProvider();
+
+ SensorController* getOrCreateSensor(device::sensors::blink::SensorType type);
+
+ DECLARE_VIRTUAL_TRACE();
+
+private:
+ SensorProvider(LocalFrame&);
+
+ // To be called by SensorController.
+ void removeSensor(SensorController*);
+ device::sensors::blink::SensorFactory* sensorFactory() const { return m_sensorFactory.get(); }
+ friend class SensorController;
+
+ void handleSensorError();
+
+ HeapVector<Member<SensorController>> m_sensors;
+ static constexpr const char* s_supplementKey = "SensorProvider";
+
+ device::sensors::blink::SensorFactoryPtr m_sensorFactory;
+};
+
+} // namespace blink
+
+#endif // SensorController_h
« 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