Chromium Code Reviews| 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..5b9cd295afda0b4640d472f69f8b76d67c0d5e7f 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(); |
| + } else { |
| + // Currently we only expect the renderer to tell us once to start. |
| + NOTREACHED(); |
| + } |
| + *renderer_handle = service->GetSharedMemoryHandleForProcess(peer_handle()); |
|
raymes
2012/09/05 21:05:57
Nit: Move this into the if statement for clarity?
|
| } |
| 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 |