• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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