| 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 0d84c3cc45e9bdfd331b24f4ec30974b15a7e840..f48a0fb2ff7925477d44e7848b397bc25eb44c01 100644
|
| --- a/content/renderer/gamepad_shared_memory_reader.cc
|
| +++ b/content/renderer/gamepad_shared_memory_reader.cc
|
| @@ -10,6 +10,7 @@
|
| #include "content/public/renderer/render_thread.h"
|
| #include "content/renderer/renderer_blink_platform_impl.h"
|
| #include "ipc/ipc_sync_message_filter.h"
|
| +#include "services/service_manager/public/cpp/interface_provider.h"
|
| #include "third_party/WebKit/public/platform/WebGamepadListener.h"
|
| #include "third_party/WebKit/public/platform/WebPlatformEventListener.h"
|
|
|
| @@ -18,16 +19,32 @@ namespace content {
|
| GamepadSharedMemoryReader::GamepadSharedMemoryReader(RenderThread* thread)
|
| : RendererGamepadProvider(thread),
|
| gamepad_hardware_buffer_(NULL),
|
| - ever_interacted_with_(false) {
|
| + ever_interacted_with_(false),
|
| + binding_(this) {
|
| + if (thread) {
|
| + thread->GetRemoteInterfaces()->GetInterface(
|
| + mojo::GetProxy(&gamepad_monitor_));
|
| + gamepad_monitor_->SetObserver(binding_.CreateInterfacePtrAndBind());
|
| + }
|
| }
|
|
|
| void GamepadSharedMemoryReader::SendStartMessage() {
|
| - CHECK(RenderThread::Get()->Send(new GamepadHostMsg_StartPolling(
|
| - &renderer_shared_memory_handle_)));
|
| + if (gamepad_monitor_) {
|
| + mojo::ScopedSharedBufferHandle buffer_handle;
|
| + gamepad_monitor_->GamepadStartPolling(&buffer_handle);
|
| + // TODO(heke): Use mojo::SharedBuffer rather than base::SharedMemory. See
|
| + // crbug.com/670655.
|
| + MojoResult result = mojo::UnwrapSharedMemoryHandle(
|
| + std::move(buffer_handle), &renderer_shared_memory_handle_, nullptr,
|
| + nullptr);
|
| + CHECK_EQ(MOJO_RESULT_OK, result);
|
| + }
|
| }
|
|
|
| void GamepadSharedMemoryReader::SendStopMessage() {
|
| - RenderThread::Get()->Send(new GamepadHostMsg_StopPolling());
|
| + if (gamepad_monitor_) {
|
| + gamepad_monitor_->GamepadStopPolling();
|
| + }
|
| }
|
|
|
| void GamepadSharedMemoryReader::Start(
|
| @@ -107,18 +124,7 @@ GamepadSharedMemoryReader::~GamepadSharedMemoryReader() {
|
| StopIfObserving();
|
| }
|
|
|
| -bool GamepadSharedMemoryReader::OnControlMessageReceived(
|
| - const IPC::Message& message) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(GamepadSharedMemoryReader, message)
|
| - IPC_MESSAGE_HANDLER(GamepadMsg_GamepadConnected, OnGamepadConnected)
|
| - IPC_MESSAGE_HANDLER(GamepadMsg_GamepadDisconnected, OnGamepadDisconnected)
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - return handled;
|
| -}
|
| -
|
| -void GamepadSharedMemoryReader::OnGamepadConnected(
|
| +void GamepadSharedMemoryReader::GamepadConnected(
|
| int index,
|
| const blink::WebGamepad& gamepad) {
|
| // The browser already checks if the user actually interacted with a device.
|
| @@ -128,7 +134,7 @@ void GamepadSharedMemoryReader::OnGamepadConnected(
|
| listener()->didConnectGamepad(index, gamepad);
|
| }
|
|
|
| -void GamepadSharedMemoryReader::OnGamepadDisconnected(
|
| +void GamepadSharedMemoryReader::GamepadDisconnected(
|
| int index,
|
| const blink::WebGamepad& gamepad) {
|
| if (listener())
|
|
|