| Index: device/device_sensors/device_sensors_light_impl.cc
|
| diff --git a/device/device_sensors/device_sensors_light_impl.cc b/device/device_sensors/device_sensors_light_impl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d362ed7e3efd0e85d8e0d248d61ade562d8c70e2
|
| --- /dev/null
|
| +++ b/device/device_sensors/device_sensors_light_impl.cc
|
| @@ -0,0 +1,66 @@
|
| +// Copyright 2015 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.
|
| +
|
| +#include "device/device_sensors/device_sensors_light_impl.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/location.h"
|
| +#include "base/logging.h"
|
| +#include "base/process/process.h"
|
| +#include "base/thread_task_runner_handle.h"
|
| +#include "device/device_sensors/device_inertial_sensor_service.h"
|
| +#include "device/device_sensors/type_converters.h"
|
| +
|
| +namespace device {
|
| +
|
| +// static
|
| +void DeviceSensorsLightImpl::Create(
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
| + mojo::InterfaceRequest<DeviceSensorsLight> request) {
|
| + if (base::ThreadTaskRunnerHandle::Get() == task_runner) {
|
| + DeviceSensorsLightImpl::CreateOnTaskRunnerThread(request.Pass());
|
| + } else {
|
| + task_runner->PostTask(
|
| + FROM_HERE, base::Bind(&DeviceSensorsLightImpl::CreateOnTaskRunnerThread,
|
| + base::Passed(&request)));
|
| + }
|
| +}
|
| +
|
| +// static
|
| +void DeviceSensorsLightImpl::CreateOnTaskRunnerThread(
|
| + mojo::InterfaceRequest<DeviceSensorsLight> request) {
|
| + new DeviceSensorsLightImpl(request.Pass());
|
| +}
|
| +
|
| +DeviceSensorsLightImpl::DeviceSensorsLightImpl(
|
| + mojo::InterfaceRequest<DeviceSensorsLight> request)
|
| + : binding_(this, request.Pass()), is_started_(false) {
|
| +}
|
| +
|
| +DeviceSensorsLightImpl::~DeviceSensorsLightImpl() {
|
| + if (!is_started_)
|
| + return;
|
| + DeviceInertialSensorService::GetInstance()->RemoveConsumer(
|
| + CONSUMER_TYPE_LIGHT);
|
| +}
|
| +
|
| +void DeviceSensorsLightImpl::StartPolling(
|
| + int32 peer_process_id,
|
| + const StartPollingCallback& callback) {
|
| + if (is_started_)
|
| + return;
|
| + is_started_ = true;
|
| + DeviceInertialSensorService::GetInstance()->AddConsumer(CONSUMER_TYPE_LIGHT);
|
| +
|
| + base::Process peer_process =
|
| + base::Process::OpenWithExtraPrivileges(peer_process_id);
|
| + base::SharedMemoryHandle handle =
|
| + DeviceInertialSensorService::GetInstance()
|
| + ->GetSharedMemoryHandleForProcess(CONSUMER_TYPE_LIGHT,
|
| + peer_process.Handle());
|
| + device::SharedMemoryPtr result = device::SharedMemory::From(handle);
|
| + callback.Run(result.Pass());
|
| +}
|
| +
|
| +} // namespace device
|
|
|