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
10 namespace content {
11
GamepadBrowserMessageFilter()12 GamepadBrowserMessageFilter::GamepadBrowserMessageFilter()
13 : BrowserMessageFilter(GamepadMsgStart),
14 is_started_(false) {
15 }
16
~GamepadBrowserMessageFilter()17 GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() {
18 DCHECK_CURRENTLY_ON(BrowserThread::IO);
19 if (is_started_)
20 GamepadService::GetInstance()->RemoveConsumer(this);
21 }
22
OnMessageReceived(const IPC::Message & message)23 bool 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
OnGamepadConnected(unsigned index,const blink::WebGamepad & gamepad)34 void GamepadBrowserMessageFilter::OnGamepadConnected(
35 unsigned index,
36 const blink::WebGamepad& gamepad) {
37 Send(new GamepadMsg_GamepadConnected(index, gamepad));
38 }
39
OnGamepadDisconnected(unsigned index,const blink::WebGamepad & gamepad)40 void GamepadBrowserMessageFilter::OnGamepadDisconnected(
41 unsigned index,
42 const blink::WebGamepad& gamepad) {
43 Send(new GamepadMsg_GamepadDisconnected(index, gamepad));
44 }
45
OnGamepadStartPolling(base::SharedMemoryHandle * renderer_handle)46 void 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
OnGamepadStopPolling()55 void GamepadBrowserMessageFilter::OnGamepadStopPolling() {
56 CHECK(is_started_);
57 is_started_ = false;
58 GamepadService::GetInstance()->ConsumerBecameInactive(this);
59 }
60
61 } // namespace content
62