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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 1412923009: Route touch-events for WebViewGuest directly to guest renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 1 month 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/browser/renderer_host/render_widget_host_view_aura.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index bbb79c967405304c7bb46b1823dfea04d09bf7f0..4a41489f6f4ec6bf6d24c7c5051065d6dc82485a 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -44,6 +44,7 @@
#include "content/browser/renderer_host/web_input_event_aura.h"
#include "content/common/gpu/client/gl_helper.h"
#include "content/common/gpu/gpu_messages.h"
+#include "content/common/site_isolation_policy.h"
#include "content/common/view_messages.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/overscroll_configuration.h"
@@ -450,6 +451,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host,
: host_(RenderWidgetHostImpl::From(host)),
window_(new aura::Window(this)),
delegated_frame_host_(new DelegatedFrameHost(this)),
+ has_started_rendering_(false),
in_shutdown_(false),
in_bounds_changed_(false),
is_fullscreen_(false),
@@ -487,14 +489,6 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host,
window_->set_layer_owner_delegate(delegated_frame_host_.get());
gfx::Screen::GetScreenFor(window_)->AddObserver(this);
- // Let the page-level input event router know about our surface ID
- // namespace for surface-based hit testing.
- if (UseSurfacesEnabled() && host_->delegate() &&
- host_->delegate()->GetInputEventRouter()) {
- host_->delegate()->GetInputEventRouter()->AddSurfaceIdNamespaceOwner(
- GetSurfaceIdNamespace(), this);
- }
-
bool overscroll_enabled = base::CommandLine::ForCurrentProcess()->
GetSwitchValueASCII(switches::kOverscrollHistoryNavigation) != "0";
SetOverscrollControllerEnabled(overscroll_enabled);
@@ -843,6 +837,13 @@ bool RenderWidgetHostViewAura::CanRendererHandleEvent(
return true;
}
+bool RenderWidgetHostViewAura::ShouldRouteEvent(const ui::Event* event) const {
+ bool result = host_->delegate() && host_->delegate()->GetInputEventRouter();
+ if (event->IsMouseEvent())
+ result = result && SiteIsolationPolicy::AreCrossProcessFramesPossible();
+ return result;
+}
+
void RenderWidgetHostViewAura::HandleParentBoundsChanged() {
SnapToPhysicalPixelBoundary();
#if defined(OS_WIN)
@@ -1176,6 +1177,18 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame(
last_scroll_offset_ = frame->metadata.root_scroll_offset;
if (!frame->delegated_frame_data)
return;
+
+ if (!has_started_rendering_) {
+ // Let the page-level input event router know about our surface ID
+ // namespace for surface-based hit testing.
+ if (UseSurfacesEnabled() && host_->delegate() &&
+ host_->delegate()->GetInputEventRouter()) {
+ host_->delegate()->GetInputEventRouter()->AddSurfaceIdNamespaceOwner(
+ GetSurfaceIdNamespace(), this);
+ }
+ has_started_rendering_ = true;
+ }
+
delegated_frame_host_->SwapDelegatedFrame(
output_surface_id, frame->delegated_frame_data.Pass(),
frame->metadata.device_scale_factor, frame->metadata.latency_info,
@@ -2110,7 +2123,7 @@ void RenderWidgetHostViewAura::OnMouseEvent(ui::MouseEvent* event) {
blink::WebMouseWheelEvent mouse_wheel_event =
MakeWebMouseWheelEvent(static_cast<ui::MouseWheelEvent&>(*event));
if (mouse_wheel_event.deltaX != 0 || mouse_wheel_event.deltaY != 0) {
- if (host_->delegate() && host_->delegate()->GetInputEventRouter()) {
+ if (ShouldRouteEvent(event)) {
host_->delegate()->GetInputEventRouter()->RouteMouseWheelEvent(
this, &mouse_wheel_event);
} else {
@@ -2129,7 +2142,7 @@ void RenderWidgetHostViewAura::OnMouseEvent(ui::MouseEvent* event) {
blink::WebMouseEvent mouse_event = MakeWebMouseEvent(*event);
ModifyEventMovementAndCoords(&mouse_event);
- if (host_->delegate() && host_->delegate()->GetInputEventRouter()) {
+ if (ShouldRouteEvent(event)) {
host_->delegate()->GetInputEventRouter()->RouteMouseEvent(this,
&mouse_event);
} else {
@@ -2193,6 +2206,12 @@ void RenderWidgetHostViewAura::ProcessMouseWheelEvent(
host_->ForwardWheelEvent(event);
}
+void RenderWidgetHostViewAura::ProcessTouchEvent(
+ const blink::WebTouchEvent& event,
+ const ui::LatencyInfo& latency) {
+ host_->ForwardTouchEventWithLatencyInfo(event, latency);
+}
+
void RenderWidgetHostViewAura::OnScrollEvent(ui::ScrollEvent* event) {
TRACE_EVENT0("input", "RenderWidgetHostViewAura::OnScrollEvent");
@@ -2259,7 +2278,12 @@ void RenderWidgetHostViewAura::OnTouchEvent(ui::TouchEvent* event) {
// Set unchanged touch point to StateStationary for touchmove and
// touchcancel to make sure only send one ack per WebTouchEvent.
MarkUnchangedTouchPointsAsStationary(&touch_event, event->touch_id());
- host_->ForwardTouchEventWithLatencyInfo(touch_event, *event->latency());
+ if (ShouldRouteEvent(event)) {
+ host_->delegate()->GetInputEventRouter()->RouteTouchEvent(
+ this, &touch_event, *event->latency());
+ } else {
+ ProcessTouchEvent(touch_event, *event->latency());
+ }
}
void RenderWidgetHostViewAura::OnGestureEvent(ui::GestureEvent* event) {

Powered by Google App Engine
This is Rietveld 408576698