1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/browser/renderer_host/gamepad_browser_message_filter.h" 6 7#include "content/browser/gamepad/gamepad_service.h" 8#include "content/common/gamepad_messages.h" 9 10namespace content { 11 12GamepadBrowserMessageFilter::GamepadBrowserMessageFilter() 13 : BrowserMessageFilter(GamepadMsgStart), 14 is_started_(false) { 15} 16 17GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() { 18 DCHECK_CURRENTLY_ON(BrowserThread::IO); 19 if (is_started_) 20 GamepadService::GetInstance()->RemoveConsumer(this); 21} 22 23bool GamepadBrowserMessageFilter::OnMessageReceived( 24 const IPC::Message& message) { 25 bool handled = true; 26 IPC_BEGIN_MESSAGE_MAP(GamepadBrowserMessageFilter, message) 27 IPC_MESSAGE_HANDLER(GamepadHostMsg_StartPolling, OnGamepadStartPolling) 28 IPC_MESSAGE_HANDLER(GamepadHostMsg_StopPolling, OnGamepadStopPolling) 29 IPC_MESSAGE_UNHANDLED(handled = false) 30 IPC_END_MESSAGE_MAP() 31 return handled; 32} 33 34void GamepadBrowserMessageFilter::OnGamepadConnected( 35 unsigned index, 36 const blink::WebGamepad& gamepad) { 37 Send(new GamepadMsg_GamepadConnected(index, gamepad)); 38} 39 40void GamepadBrowserMessageFilter::OnGamepadDisconnected( 41 unsigned index, 42 const blink::WebGamepad& gamepad) { 43 Send(new GamepadMsg_GamepadDisconnected(index, gamepad)); 44} 45 46void GamepadBrowserMessageFilter::OnGamepadStartPolling( 47 base::SharedMemoryHandle* renderer_handle) { 48 GamepadService* service = GamepadService::GetInstance(); 49 CHECK(!is_started_); 50 is_started_ = true; 51 service->ConsumerBecameActive(this); 52 *renderer_handle = service->GetSharedMemoryHandleForProcess(PeerHandle()); 53} 54 55void GamepadBrowserMessageFilter::OnGamepadStopPolling() { 56 CHECK(is_started_); 57 is_started_ = false; 58 GamepadService::GetInstance()->ConsumerBecameInactive(this); 59} 60 61} // namespace content 62