| Index: content/renderer/gamepad_shared_memory_reader.cc
|
| diff --git a/content/renderer/gamepad_shared_memory_reader.cc b/content/renderer/gamepad_shared_memory_reader.cc
|
| index e74f02581864cff2d5c4dc4b4f44081826a3ccdb..5f8d31aa5705d988c76c1535da6acfaf26bad1d3 100644
|
| --- a/content/renderer/gamepad_shared_memory_reader.cc
|
| +++ b/content/renderer/gamepad_shared_memory_reader.cc
|
| @@ -12,24 +12,28 @@
|
| #include "content/renderer/renderer_webkitplatformsupport_impl.h"
|
| #include "ipc/ipc_sync_message_filter.h"
|
| #include "third_party/WebKit/public/platform/WebGamepadListener.h"
|
| +#include "third_party/WebKit/public/platform/WebPlatformEventListener.h"
|
|
|
| namespace content {
|
|
|
| -GamepadSharedMemoryReader::GamepadSharedMemoryReader(
|
| - RendererWebKitPlatformSupportImpl* webkit_platform_support)
|
| - : gamepad_hardware_buffer_(NULL),
|
| - gamepad_listener_(NULL),
|
| - is_polling_(false),
|
| +GamepadSharedMemoryReader::GamepadSharedMemoryReader(RenderThread* thread)
|
| + : RendererGamepadProvider(thread),
|
| + gamepad_hardware_buffer_(NULL),
|
| ever_interacted_with_(false) {
|
| - webkit_platform_support->set_gamepad_provider(this);
|
| }
|
|
|
| -void GamepadSharedMemoryReader::StartPollingIfNecessary() {
|
| - if (is_polling_)
|
| - return;
|
| -
|
| +void GamepadSharedMemoryReader::SendStartMessage() {
|
| CHECK(RenderThread::Get()->Send(new GamepadHostMsg_StartPolling(
|
| &renderer_shared_memory_handle_)));
|
| +}
|
| +
|
| +void GamepadSharedMemoryReader::SendStopMessage() {
|
| + RenderThread::Get()->Send(new GamepadHostMsg_StopPolling());
|
| +}
|
| +
|
| +void GamepadSharedMemoryReader::Start(
|
| + blink::WebPlatformEventListener* listener) {
|
| + PlatformEventObserver::Start(listener);
|
|
|
| // If we don't get a valid handle from the browser, don't try to Map (we're
|
| // probably out of memory or file handles).
|
| @@ -46,24 +50,11 @@ void GamepadSharedMemoryReader::StartPollingIfNecessary() {
|
| CHECK(memory);
|
| gamepad_hardware_buffer_ =
|
| static_cast<GamepadHardwareBuffer*>(memory);
|
| -
|
| - is_polling_ = true;
|
| -}
|
| -
|
| -void GamepadSharedMemoryReader::StopPollingIfNecessary() {
|
| - if (is_polling_) {
|
| - RenderThread::Get()->Send(new GamepadHostMsg_StopPolling());
|
| - is_polling_ = false;
|
| - }
|
| }
|
|
|
| void GamepadSharedMemoryReader::SampleGamepads(blink::WebGamepads& gamepads) {
|
| - // Blink should set the listener before start sampling.
|
| - CHECK(gamepad_listener_);
|
| -
|
| - StartPollingIfNecessary();
|
| - if (!is_polling_)
|
| - return;
|
| + // Blink should have started observing at that point.
|
| + CHECK(is_observing());
|
|
|
| // ==========
|
| // DANGER
|
| @@ -113,20 +104,7 @@ void GamepadSharedMemoryReader::SampleGamepads(blink::WebGamepads& gamepads) {
|
| }
|
| }
|
|
|
| -void GamepadSharedMemoryReader::SetGamepadListener(
|
| - blink::WebGamepadListener* listener) {
|
| - gamepad_listener_ = listener;
|
| - if (gamepad_listener_) {
|
| - // Polling has to be started rigth now and not just on the first sampling
|
| - // because want to get connection events from now.
|
| - StartPollingIfNecessary();
|
| - } else {
|
| - StopPollingIfNecessary();
|
| - }
|
| -}
|
| -
|
| GamepadSharedMemoryReader::~GamepadSharedMemoryReader() {
|
| - StopPollingIfNecessary();
|
| }
|
|
|
| bool GamepadSharedMemoryReader::OnControlMessageReceived(
|
| @@ -146,15 +124,15 @@ void GamepadSharedMemoryReader::OnGamepadConnected(
|
| // The browser already checks if the user actually interacted with a device.
|
| ever_interacted_with_ = true;
|
|
|
| - if (gamepad_listener_)
|
| - gamepad_listener_->didConnectGamepad(index, gamepad);
|
| + if (listener())
|
| + listener()->didConnectGamepad(index, gamepad);
|
| }
|
|
|
| void GamepadSharedMemoryReader::OnGamepadDisconnected(
|
| int index,
|
| const blink::WebGamepad& gamepad) {
|
| - if (gamepad_listener_)
|
| - gamepad_listener_->didDisconnectGamepad(index, gamepad);
|
| + if (listener())
|
| + listener()->didDisconnectGamepad(index, gamepad);
|
| }
|
|
|
| } // namespace content
|
|
|