Commit 3e43c0bd authored by scottmg@chromium.org's avatar scottmg@chromium.org

Message receiver on browser side that holds/starts the gamepad data provider

Messages are already committed, and the patch that sends the messages from the
renderer side is here: http://codereview.chromium.org/8689011/ (at the top of
content/renderer/gamepad_util.cc)

re: AllowScopedIO in Stop(), I copied startup/shutdown from somewhere that I
didn't realize had that problem. Will follow up to figure out how to shut down
cleanly.

BUG=79050


Review URL: http://codereview.chromium.org/8689012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111624 0039d316-1c4b-4281-b951-d872f2087c98
parent 5cf906f8
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/renderer_host/gamepad_browser_message_filter.h"
#include "content/common/gamepad_messages.h"
GamepadBrowserMessageFilter::GamepadBrowserMessageFilter() {
}
GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() {
}
bool GamepadBrowserMessageFilter::OnMessageReceived(
const IPC::Message& message,
bool* message_was_ok) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_EX(GamepadBrowserMessageFilter,
message,
*message_was_ok)
IPC_MESSAGE_HANDLER(GamepadHostMsg_StartPolling, OnGamepadStartPolling)
IPC_MESSAGE_HANDLER(GamepadHostMsg_StopPolling, OnGamepadStopPolling)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
}
void GamepadBrowserMessageFilter::OnGamepadStartPolling(
base::SharedMemoryHandle* renderer_handle) {
if (!provider_) {
provider_ = new gamepad::Provider(NULL);
provider_->Start();
}
*renderer_handle = provider_->GetRendererSharedMemoryHandle(peer_handle());
}
void GamepadBrowserMessageFilter::OnGamepadStopPolling() {
// TODO(scottmg) Remove this message entirely?
// Stop is currently handled by the refcount on provider_.
}
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_RENDERER_HOST_GAMEPAD_BROWSER_MESSAGE_FILTER_H_
#define CONTENT_BROWSER_RENDERER_HOST_GAMEPAD_BROWSER_MESSAGE_FILTER_H_
#pragma once
#include "content/browser/browser_message_filter.h"
#include "content/browser/gamepad/gamepad_provider.h"
class GamepadBrowserMessageFilter : public BrowserMessageFilter {
public:
// BrowserMessageFilter implementation.
virtual bool OnMessageReceived(const IPC::Message& message,
bool* message_was_ok);
GamepadBrowserMessageFilter();
private:
virtual ~GamepadBrowserMessageFilter();
void OnGamepadStartPolling(base::SharedMemoryHandle* renderer_handle);
void OnGamepadStopPolling();
scoped_refptr<gamepad::Provider> provider_;
DISALLOW_COPY_AND_ASSIGN(GamepadBrowserMessageFilter);
};
#endif // CONTENT_BROWSER_RENDERER_HOST_GAMEPAD_BROWSER_MESSAGE_FILTER_H_
......@@ -52,6 +52,7 @@
#include "content/browser/renderer_host/clipboard_message_filter.h"
#include "content/browser/renderer_host/database_message_filter.h"
#include "content/browser/renderer_host/file_utilities_message_filter.h"
#include "content/browser/renderer_host/gamepad_browser_message_filter.h"
#include "content/browser/renderer_host/gpu_message_filter.h"
#include "content/browser/renderer_host/media/audio_input_renderer_host.h"
#include "content/browser/renderer_host/media/audio_renderer_host.h"
......@@ -532,6 +533,7 @@ void RenderProcessHostImpl::CreateMessageFilters() {
channel_->AddFilter(new QuotaDispatcherHost(
GetID(), GetBrowserContext()->GetQuotaManager(),
content::GetContentClient()->browser()->CreateQuotaPermissionContext()));
channel_->AddFilter(new GamepadBrowserMessageFilter);
}
int RenderProcessHostImpl::GetNextRoutingID() {
......
......@@ -369,6 +369,8 @@
'browser/renderer_host/database_message_filter.h',
'browser/renderer_host/file_utilities_message_filter.cc',
'browser/renderer_host/file_utilities_message_filter.h',
'browser/renderer_host/gamepad_browser_message_filter.cc',
'browser/renderer_host/gamepad_browser_message_filter.h',
'browser/renderer_host/global_request_id.h',
'browser/renderer_host/gpu_message_filter.cc',
'browser/renderer_host/gpu_message_filter.h',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment