blob: 0f24fc587052c56385df6f96b89b2a05873db828 [file] [log] [blame]
// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_MODULES_DEVICE_ORIENTATION_DEVICE_SENSOR_ENTRY_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_DEVICE_ORIENTATION_DEVICE_SENSOR_ENTRY_H_
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/sensor.mojom-blink-forward.h"
#include "services/device/public/mojom/sensor_provider.mojom-blink.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
namespace device {
union SensorReading;
class SensorReadingSharedBufferReader;
} // namespace device
namespace blink {
class DeviceSensorEventPump;
class DeviceSensorEntry : public GarbageCollected<DeviceSensorEntry>,
public device::mojom::blink::SensorClient {
USING_PRE_FINALIZER(DeviceSensorEntry, Dispose);
public:
// The sensor state is an automaton with allowed transitions as follows:
// NOT_INITIALIZED -> INITIALIZING
// INITIALIZING -> ACTIVE
// INITIALIZING -> SHOULD_SUSPEND
// ACTIVE -> SUSPENDED
// SHOULD_SUSPEND -> INITIALIZING
// SHOULD_SUSPEND -> SUSPENDED
// SUSPENDED -> ACTIVE
// { INITIALIZING, ACTIVE, SHOULD_SUSPEND, SUSPENDED } -> NOT_INITIALIZED
enum class State {
NOT_INITIALIZED,
INITIALIZING,
ACTIVE,
SHOULD_SUSPEND,
SUSPENDED
};
DeviceSensorEntry(DeviceSensorEventPump* pump,
device::mojom::blink::SensorType sensor_type);
void Dispose();
~DeviceSensorEntry() override;
void Start(device::mojom::blink::SensorProvider* sensor_provider);
void Stop();
bool IsConnected() const;
bool ReadyOrErrored() const;
bool GetReading(device::SensorReading* reading);
State state() const { return state_; }
void Trace(Visitor* visitor);
private:
// device::mojom::SensorClient:
void RaiseError() override;
void SensorReadingChanged() override;
// Mojo callback for SensorProvider::GetSensor().
void OnSensorCreated(device::mojom::blink::SensorCreationResult result,
device::mojom::blink::SensorInitParamsPtr params);
// Mojo callback for Sensor::AddConfiguration().
void OnSensorAddConfiguration(bool success);
void HandleSensorError();
Member<DeviceSensorEventPump> event_pump_;
State state_ = State::NOT_INITIALIZED;
mojo::Remote<device::mojom::blink::Sensor> sensor_remote_;
mojo::Receiver<device::mojom::blink::SensorClient> client_receiver_{this};
device::mojom::blink::SensorType type_;
std::unique_ptr<device::SensorReadingSharedBufferReader>
shared_buffer_reader_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_DEVICE_ORIENTATION_DEVICE_SENSOR_ENTRY_H_