Index: content/renderer/gpu/input_handler_manager.cc |
diff --git a/content/renderer/gpu/input_handler_manager.cc b/content/renderer/gpu/input_handler_manager.cc |
index aeff90e16fd70af99c798ae3cda591122ce5c59a..4b5812fe3198fd4cfc05863eee37b04140df3c32 100644 |
--- a/content/renderer/gpu/input_handler_manager.cc |
+++ b/content/renderer/gpu/input_handler_manager.cc |
@@ -8,46 +8,55 @@ |
#include "base/debug/trace_event.h" |
#include "cc/input/input_handler.h" |
#include "content/renderer/gpu/input_event_filter.h" |
+#include "content/renderer/gpu/input_handler_manager_client.h" |
#include "content/renderer/gpu/input_handler_wrapper.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebActiveWheelFlingParameters.h" |
using WebKit::WebInputEvent; |
namespace content { |
InputHandlerManager::InputHandlerManager( |
- IPC::Listener* main_listener, |
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy) |
- : message_loop_proxy_(message_loop_proxy) { |
- filter_ = |
- new InputEventFilter(main_listener, |
- message_loop_proxy, |
- base::Bind(&InputHandlerManager::HandleInputEvent, |
- base::Unretained(this))); |
+ : message_loop_proxy_(message_loop_proxy), |
+ client_(NULL) { |
} |
InputHandlerManager::~InputHandlerManager() { |
+ BindToClient(NULL); |
} |
-IPC::ChannelProxy::MessageFilter* |
-InputHandlerManager::GetMessageFilter() const { |
- return filter_; |
+void InputHandlerManager::BindToClient(InputHandlerManagerClient* client) { |
+ DCHECK(!client_ || !client); |
+ if (client_) |
+ client->SetHandler(InputHandlerManagerClient::Handler()); |
+ |
+ client_ = client; |
+ |
+ if (client_) { |
+ client->SetHandler(base::Bind(&InputHandlerManager::HandleInputEvent, |
+ base::Unretained(this))); |
+ } |
} |
void InputHandlerManager::AddInputHandler( |
int routing_id, |
const base::WeakPtr<cc::InputHandler>& input_handler, |
const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
- DCHECK(!message_loop_proxy_->BelongsToCurrentThread()); |
- |
- message_loop_proxy_->PostTask( |
- FROM_HERE, |
- base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread, |
- base::Unretained(this), |
- routing_id, |
- base::MessageLoopProxy::current(), |
- input_handler, |
- render_view_impl)); |
+ if (message_loop_proxy_->BelongsToCurrentThread()) { |
+ AddInputHandlerOnCompositorThread(routing_id, |
+ base::MessageLoopProxy::current(), |
+ input_handler, |
+ render_view_impl); |
+ } else { |
+ message_loop_proxy_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&InputHandlerManager::AddInputHandlerOnCompositorThread, |
+ base::Unretained(this), |
+ routing_id, |
+ base::MessageLoopProxy::current(), |
+ input_handler, |
+ render_view_impl)); |
+ } |
} |
void InputHandlerManager::AddInputHandlerOnCompositorThread( |
@@ -55,6 +64,7 @@ void InputHandlerManager::AddInputHandlerOnCompositorThread( |
const scoped_refptr<base::MessageLoopProxy>& main_loop, |
const base::WeakPtr<cc::InputHandler>& input_handler, |
const base::WeakPtr<RenderViewImpl>& render_view_impl) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
// The handler could be gone by this point if the compositor has shut down. |
@@ -66,24 +76,26 @@ void InputHandlerManager::AddInputHandlerOnCompositorThread( |
return; |
TRACE_EVENT0("InputHandlerManager::AddInputHandler", "AddingRoute"); |
- filter_->AddRoute(routing_id); |
+ client_->DidAddInputHandler(routing_id); |
input_handlers_[routing_id] = |
make_scoped_refptr(new InputHandlerWrapper(this, |
routing_id, main_loop, input_handler, render_view_impl)); |
} |
void InputHandlerManager::RemoveInputHandler(int routing_id) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
TRACE_EVENT0("InputHandlerManager::RemoveInputHandler", "RemovingRoute"); |
- filter_->RemoveRoute(routing_id); |
+ client_->DidRemoveInputHandler(routing_id); |
input_handlers_.erase(routing_id); |
} |
void InputHandlerManager::HandleInputEvent( |
int routing_id, |
const WebInputEvent* input_event) { |
+ DCHECK(client_); |
DCHECK(message_loop_proxy_->BelongsToCurrentThread()); |
InputHandlerMap::iterator it = input_handlers_.find(routing_id); |
@@ -91,7 +103,7 @@ void InputHandlerManager::HandleInputEvent( |
TRACE_EVENT0("InputHandlerManager::HandleInputEvent", |
"NoInputHandlerFound"); |
// Oops, we no longer have an interested input handler.. |
- filter_->DidNotHandleInputEvent(true); |
+ client_->DidNotHandleInputEvent(true); |
return; |
} |