Chromium Code Reviews| Index: android_webview/browser/in_process_renderer/in_process_view_renderer.cc |
| diff --git a/android_webview/browser/in_process_renderer/in_process_view_renderer.cc b/android_webview/browser/in_process_renderer/in_process_view_renderer.cc |
| index 74acde0eed8615d77dbf2b3a978f7ca82afa824d..f268771fe928246fd27bb97af768d1bdd9b076b0 100644 |
| --- a/android_webview/browser/in_process_renderer/in_process_view_renderer.cc |
| +++ b/android_webview/browser/in_process_renderer/in_process_view_renderer.cc |
| @@ -14,6 +14,7 @@ |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/renderer/android/synchronous_compositor.h" |
| +#include "content/public/renderer/android/synchronous_input_event_handler.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| #include "third_party/skia/include/core/SkCanvas.h" |
| #include "third_party/skia/include/core/SkDevice.h" |
| @@ -110,8 +111,10 @@ InProcessViewRenderer::InProcessViewRenderer( |
| JavaHelper* java_helper) |
| : client_(client), |
| java_helper_(java_helper), |
| + content_view_core_(NULL), |
| web_contents_(NULL), |
| compositor_(NULL), |
| + input_event_handler_(NULL), |
| view_visible_(false), |
| continuous_invalidate_(false), |
| continuous_invalidate_task_pending_(false), |
| @@ -160,17 +163,32 @@ void InProcessViewRenderer::BindSynchronousCompositor( |
| client_->RequestProcessMode(); |
| } |
| +void InProcessViewRenderer::BindSynchronousInputEventHandler( |
| + content::SynchronousInputEventHandler* input_event_handler) { |
| + input_event_handler_ = input_event_handler; |
| +} |
| + |
| void InProcessViewRenderer::SetContents( |
| content::ContentViewCore* content_view_core) { |
| // First remove association from the prior ContentViewCore / WebContents. |
| + if (content_view_core_) { |
| + content_view_core_->SetInputEventFilterCallback( |
| + ContentViewCore::InputEventFilterCallback()); |
| + } |
| + |
| if (web_contents_) { |
| web_contents_->SetUserData(kUserDataKey, NULL); |
| DCHECK(!web_contents_); // WebContentsGone should have been called. |
| } |
| - if (!content_view_core) |
| + content_view_core_ = content_view_core; |
| + if (!content_view_core_) |
| return; |
| + content_view_core_->SetInputEventFilterCallback( |
| + base::Bind(&InProcessViewRenderer::HandleInputEvent, |
| + base::Unretained(this))); |
|
jamesr
2013/05/24 23:46:16
what prevents this callback from being invoked aft
jdduke (slow)
2013/05/25 01:22:11
The assumption (which I should probably specify in
|
| + |
| web_contents_ = content_view_core->GetWebContents(); |
| web_contents_->SetUserData(kUserDataKey, new UserData(this)); |
| } |
| @@ -429,4 +447,14 @@ bool InProcessViewRenderer::CompositeSW(SkCanvas* canvas) { |
| return compositor_ && compositor_->DemandDrawSw(canvas); |
| } |
| +content::InputEventAckState InProcessViewRenderer::HandleInputEvent( |
| + int routing_id, |
| + const WebKit::WebInputEvent& input_event) { |
| + if (!input_event_handler_) |
| + return content::INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| + |
| + return input_event_handler_->HandleInputEvent(routing_id, &input_event); |
| +} |
| + |
| + |
| } // namespace android_webview |