Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1344)

Unified Diff: android_webview/browser/in_process_renderer/in_process_view_renderer.cc

Issue 15920002: Fix WebView compositor input handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make InputEventAckState public Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698