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..e43af42b7385237cc6f8150af40187bb55412843 100644 |
--- a/content/renderer/gpu/input_handler_manager.cc |
+++ b/content/renderer/gpu/input_handler_manager.cc |
@@ -8,46 +8,53 @@ |
#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))); |
} |
InputHandlerManager::~InputHandlerManager() { |
joth
2013/05/31 18:05:08
should this unbind Handler() instance from the cli
jdduke (slow)
2013/05/31 20:48:24
You're absolutely right, I had that in and must ha
|
} |
-IPC::ChannelProxy::MessageFilter* |
-InputHandlerManager::GetMessageFilter() const { |
- return filter_; |
+void InputHandlerManager::BindToClient(InputHandlerManagerClient* client) { |
+ DCHECK(!client_ || !client); |
+ if (client_) |
+ client->DidBind(InputHandlerManagerClient::Handler()); |
+ |
+ client_ = client; |
+ |
+ if (client_) { |
+ client->DidBind(base::Bind(&InputHandlerManager::HandleInputEvent, |
+ base::Unretained(this))); |
joth
2013/05/31 18:05:08
nit: intent to next open-paren
jdduke (slow)
2013/05/31 20:48:24
Done.
|
+ } |
} |
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), |
joth
2013/05/31 18:05:08
Any idea why the Unretained() is safe here? (I see
jdduke (slow)
2013/05/31 20:48:24
Right.
|
+ routing_id, |
+ base::MessageLoopProxy::current(), |
+ input_handler, |
+ render_view_impl)); |
+ } |
} |
void InputHandlerManager::AddInputHandlerOnCompositorThread( |
@@ -55,6 +62,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 +74,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 +101,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; |
} |