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

Unified Diff: third_party/WebKit/Source/modules/sensor/SensorProxy.h

Issue 2121313002: [sensors] Generic Sensors Framework blink side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sensors_mojo_interfaces
Patch Set: build fix for win Created 4 years, 3 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/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

Powered by Google App Engine
This is Rietveld 408576698