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

Unified Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 1254883006: Bubble scroll events from WebView guest to embedder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Complete test. Created 5 years, 4 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: content/renderer/browser_plugin/browser_plugin.cc
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index c2b73247e2508f3ab7f0e7cec619614902447b1e..6a1df4b150ed131f3691d91d03c3f6a2c2050996 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -495,6 +495,17 @@ bool BrowserPlugin::acceptsInputEvents() {
return true;
}
+namespace {
+
+bool IsScrollEvent(blink::WebInputEvent::Type event_type) {
+ return event_type == blink::WebInputEvent::GestureScrollBegin ||
+ event_type == blink::WebInputEvent::GestureScrollUpdate ||
+ event_type == blink::WebInputEvent::GestureScrollEnd ||
+ event_type == blink::WebInputEvent::MouseWheel;
+}
+
+} // namespace
+
bool BrowserPlugin::handleInputEvent(const blink::WebInputEvent& event,
blink::WebCursorInfo& cursor_info) {
if (guest_crashed_ || !attached())
@@ -517,7 +528,15 @@ bool BrowserPlugin::handleInputEvent(const blink::WebInputEvent& event,
view_rect_,
&event));
GetWebKitCursorInfo(cursor_, &cursor_info);
- return true;
+
+ // For scroll events we must block and wait for the response from the guest,
+ // otherwise we do not know if the guest was able to handle the scroll event.
+ // We need to give other elements in the embedder renderer a chance to handle
+ // the scroll if the guest did not.
+ if (IsScrollEvent(event.type))
+ return BrowserPluginManager::Get()->GetScrollHandledStatus();
+ else
+ return true;
}
bool BrowserPlugin::handleDragStatusUpdate(blink::WebDragStatus drag_status,
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin.h ('k') | content/renderer/browser_plugin/browser_plugin_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698