11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/device_sensors/device_light_message_filter.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/device_sensors/device_inertial_sensor_service.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/common/device_sensors/device_light_messages.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content {
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDeviceLightMessageFilter::DeviceLightMessageFilter()
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : BrowserMessageFilter(DeviceLightMsgStart), is_started_(false) {
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDeviceLightMessageFilter::~DeviceLightMessageFilter() {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (is_started_) {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DeviceInertialSensorService::GetInstance()->RemoveConsumer(
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        CONSUMER_TYPE_LIGHT);
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool DeviceLightMessageFilter::OnMessageReceived(const IPC::Message& message) {
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool handled = true;
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IPC_BEGIN_MESSAGE_MAP(DeviceLightMessageFilter, message)
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IPC_MESSAGE_HANDLER(DeviceLightHostMsg_StartPolling,
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      OnDeviceLightStartPolling)
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IPC_MESSAGE_HANDLER(DeviceLightHostMsg_StopPolling, OnDeviceLightStopPolling)
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IPC_MESSAGE_UNHANDLED(handled = false)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IPC_END_MESSAGE_MAP()
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return handled;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DeviceLightMessageFilter::OnDeviceLightStartPolling() {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(!is_started_);
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (is_started_)
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  is_started_ = true;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DeviceInertialSensorService::GetInstance()->AddConsumer(CONSUMER_TYPE_LIGHT);
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DidStartDeviceLightPolling();
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DeviceLightMessageFilter::OnDeviceLightStopPolling() {
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(is_started_);
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!is_started_)
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  is_started_ = false;
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DeviceInertialSensorService::GetInstance()->RemoveConsumer(
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      CONSUMER_TYPE_LIGHT);
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DeviceLightMessageFilter::DidStartDeviceLightPolling() {
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Send(new DeviceLightMsg_DidStartPolling(
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      DeviceInertialSensorService::GetInstance()
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          ->GetSharedMemoryHandleForProcess(CONSUMER_TYPE_LIGHT,
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                            PeerHandle())));
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace content
61