Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / gamepad_browser_message_filter.cc
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
12 GamepadBrowserMessageFilter::GamepadBrowserMessageFilter()
13     : BrowserMessageFilter(GamepadMsgStart),
14       is_started_(false) {
15 }
16
17 GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() {
18   DCHECK_CURRENTLY_ON(BrowserThread::IO);
19   if (is_started_)
20     GamepadService::GetInstance()->RemoveConsumer(this);
21 }
22
23 bool GamepadBrowserMessageFilter::OnMessageReceived(
24     const IPC::Message& message,
25     bool* message_was_ok) {
26   bool handled = true;
27   IPC_BEGIN_MESSAGE_MAP_EX(GamepadBrowserMessageFilter,
28                            message,
29                            *message_was_ok)
30     IPC_MESSAGE_HANDLER(GamepadHostMsg_StartPolling, OnGamepadStartPolling)
31     IPC_MESSAGE_HANDLER(GamepadHostMsg_StopPolling, OnGamepadStopPolling)
32     IPC_MESSAGE_UNHANDLED(handled = false)
33   IPC_END_MESSAGE_MAP_EX()
34   return handled;
35 }
36
37 void GamepadBrowserMessageFilter::OnGamepadConnected(
38     unsigned index,
39     const blink::WebGamepad& gamepad) {
40   Send(new GamepadMsg_GamepadConnected(index, gamepad));
41 }
42
43 void GamepadBrowserMessageFilter::OnGamepadDisconnected(
44     unsigned index,
45     const blink::WebGamepad& gamepad) {
46   Send(new GamepadMsg_GamepadDisconnected(index, gamepad));
47 }
48
49 void GamepadBrowserMessageFilter::OnGamepadStartPolling(
50     base::SharedMemoryHandle* renderer_handle) {
51   GamepadService* service = GamepadService::GetInstance();
52   CHECK(!is_started_);
53   is_started_ = true;
54   service->ConsumerBecameActive(this);
55   *renderer_handle = service->GetSharedMemoryHandleForProcess(PeerHandle());
56 }
57
58 void GamepadBrowserMessageFilter::OnGamepadStopPolling() {
59   CHECK(is_started_);
60   is_started_ = false;
61   GamepadService::GetInstance()->ConsumerBecameInactive(this);
62 }
63
64 }  // namespace content