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 |