| Index: content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| diff --git a/content/browser/renderer_host/gamepad_browser_message_filter.cc b/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| index 3701c7ff758b113c29c630f748a1adadd82fb44b..c06eec28dce8bb5e585f5da13ae4fa6844e6b15a 100644
|
| --- a/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| +++ b/content/browser/renderer_host/gamepad_browser_message_filter.cc
|
| @@ -11,12 +11,14 @@ using content::BrowserMessageFilter;
|
|
|
| namespace content {
|
|
|
| -GamepadBrowserMessageFilter::GamepadBrowserMessageFilter(
|
| - content::RenderProcessHost* render_process_host)
|
| - : render_process_host_(render_process_host) {
|
| +GamepadBrowserMessageFilter::GamepadBrowserMessageFilter()
|
| + : is_started_(false) {
|
| }
|
|
|
| GamepadBrowserMessageFilter::~GamepadBrowserMessageFilter() {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| + if (is_started_)
|
| + GamepadService::GetInstance()->RemoveConsumer();
|
| }
|
|
|
| bool GamepadBrowserMessageFilter::OnMessageReceived(
|
| @@ -36,13 +38,25 @@ bool GamepadBrowserMessageFilter::OnMessageReceived(
|
| void GamepadBrowserMessageFilter::OnGamepadStartPolling(
|
| base::SharedMemoryHandle* renderer_handle) {
|
| GamepadService* service = GamepadService::GetInstance();
|
| - service->Start(NULL, render_process_host_);
|
| - *renderer_handle = service->GetSharedMemoryHandle(peer_handle());
|
| + if (!is_started_) {
|
| + is_started_ = true;
|
| + service->AddConsumer();
|
| + *renderer_handle = service->GetSharedMemoryHandleForProcess(peer_handle());
|
| + } else {
|
| + // Currently we only expect the renderer to tell us once to start.
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| void GamepadBrowserMessageFilter::OnGamepadStopPolling() {
|
| // TODO(scottmg): Probably get rid of this message. We can't trust it will
|
| // arrive anyway if the renderer crashes, etc.
|
| + if (is_started_) {
|
| + is_started_ = false;
|
| + GamepadService::GetInstance()->RemoveConsumer();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| }
|
|
|
| -} // namespace content
|
| +} // namespace content
|
|
|