Index: third_party/WebKit/Source/modules/sensor/SensorProxy.h |
diff --git a/third_party/WebKit/Source/modules/sensor/SensorProxy.h b/third_party/WebKit/Source/modules/sensor/SensorProxy.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..401ae29b3f59ff6137304899ebbfe06c1d6a02d8 |
--- /dev/null |
+++ b/third_party/WebKit/Source/modules/sensor/SensorProxy.h |
@@ -0,0 +1,102 @@ |
+// 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 SensorProxy_h |
+#define SensorProxy_h |
+ |
+#include "device/generic_sensor/public/interfaces/sensor.mojom-blink.h" |
+#include "device/generic_sensor/public/interfaces/sensor_provider.mojom-blink.h" |
+#include "mojo/public/cpp/bindings/binding.h" |
+#include "platform/Supplementable.h" |
+#include "platform/heap/Handle.h" |
+ |
+namespace blink { |
+ |
+class SensorProviderProxy; |
+ |
+// This class wraps 'Sensor' mojo interface and used by multiple |
+// JS sensor instances of the same type (within a single frame). |
+class SensorProxy final |
+ : public GarbageCollectedFinalized<SensorProxy> |
+ , public device::mojom::blink::SensorClient { |
+ USING_PRE_FINALIZER(SensorProxy, dispose); |
+ WTF_MAKE_NONCOPYABLE(SensorProxy); |
+public: |
+ class Observer : public GarbageCollectedMixin { |
+ public: |
+ // Has valid 'Sensor' binding, {add, remove}Configuration() |
+ // methods can be called. |
+ virtual void onSensorInitialized() {} |
+ // Platfrom sensort reading has changed (for 'ONCHANGE' reporting mode). |
+ virtual void onSensorReadingChanged() {} |
+ // An error has occurred. |
+ virtual void onSensorError() {} |
+ }; |
+ |
+ ~SensorProxy(); |
+ |
+ void dispose(); |
+ |
+ void addObserver(Observer*); |
+ void removeObserver(Observer*); |
+ |
+ void initialize(); |
+ |
+ bool isInitializing() const { return m_state == Initializing; } |
+ bool isInitialized() const { return m_state == Initialized; } |
+ |
+ void addConfiguration(device::mojom::blink::SensorConfigurationPtr, std::unique_ptr<Function<void(bool)>>); |
+ void removeConfiguration(device::mojom::blink::SensorConfigurationPtr, std::unique_ptr<Function<void(bool)>>); |
+ |
+ device::mojom::blink::SensorType type() const { return m_type; } |
+ device::mojom::blink::ReportingMode reportingMode() const { return m_mode; } |
+ |
+ struct Reading { |
+ double timestamp; |
+ double reading[3]; |
+ }; |
+ static_assert(sizeof(Reading) == device::mojom::blink::SensorReadBuffer::kReadBufferSize, "Check reading size"); |
+ |
+ const Reading& reading() const { return m_reading; } |
+ |
+ // Updates internal reading from shared buffer. |
+ void updateInternalReading(); |
+ |
+ DECLARE_VIRTUAL_TRACE(); |
+ |
+private: |
+ friend class SensorProviderProxy; |
+ SensorProxy(device::mojom::blink::SensorType, SensorProviderProxy*); |
+ |
+ // device::mojom::blink::SensorClient overrides. |
+ void RaiseError() override; |
+ void SensorReadingChanged() override; |
+ |
+ // Generic handler for a fatal error. |
+ void handleSensorError(); |
+ |
+ void onSensorCreated(device::mojom::blink::SensorReadBufferPtr, device::mojom::blink::SensorClientRequest); |
+ |
+ device::mojom::blink::SensorType m_type; |
+ device::mojom::blink::ReportingMode m_mode; |
+ Member<SensorProviderProxy> m_provider; |
+ using ObserversSet = HeapHashSet<WeakMember<Observer>>; |
+ ObserversSet m_observers; |
+ |
+ device::mojom::blink::SensorPtr m_sensor; |
+ mojo::Binding<device::mojom::blink::SensorClient> m_clientBinding; |
+ enum State { |
+ Uninitialized, |
+ Initializing, |
+ Initialized |
+ }; |
+ State m_state; |
+ mojo::ScopedSharedBufferHandle m_sharedBufferHandle; |
+ mojo::ScopedSharedBufferMapping m_sharedBuffer; |
+ Reading m_reading; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // SensorProxy_h |