Commit 7398fb38 authored by Navid Zolghadr's avatar Navid Zolghadr Committed by Commit Bot

Set focus on gesture tap

Normally we set focus on mousedown and touchstart.
But if the page doesn't have any touch handlers we
filter out all the touch events and so the view
will not get the focus. So when a gesture tap comes
to generate mouse events and etc page doesn't have
focus. This CL also adds the foucs on gesture tap
to make sure the appropriate view is focused. If
the view is already focus due to previous touch start
or mouse down this does nothing.

Bug: 861998
Change-Id: Icf10910533d694111fe6c106fbb41b48f57165d5
Reviewed-on: https://chromium-review.googlesource.com/1158714
Commit-Queue: Navid Zolghadr <nzolghadr@chromium.org>
Reviewed-by: default avatarLucas Gadani <lfg@chromium.org>
Reviewed-by: default avatarKen Buchanan <kenrb@chromium.org>
Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Cr-Commit-Position: refs/heads/master@{#580248}
parent d6b70790
...@@ -2465,7 +2465,8 @@ InputEventAckState RenderWidgetHostImpl::FilterInputEvent( ...@@ -2465,7 +2465,8 @@ InputEventAckState RenderWidgetHostImpl::FilterInputEvent(
if (delegate_) { if (delegate_) {
if (event.GetType() == WebInputEvent::kMouseDown || if (event.GetType() == WebInputEvent::kMouseDown ||
event.GetType() == WebInputEvent::kTouchStart) { event.GetType() == WebInputEvent::kTouchStart ||
event.GetType() == WebInputEvent::kGestureTap) {
delegate_->FocusOwningWebContents(this); delegate_->FocusOwningWebContents(this);
} }
delegate_->DidReceiveInputEvent(this, event.GetType()); delegate_->DidReceiveInputEvent(this, event.GetType());
......
...@@ -569,6 +569,15 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { ...@@ -569,6 +569,15 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
double GetPendingPageZoomLevel() const override { return zoom_level_; } double GetPendingPageZoomLevel() const override { return zoom_level_; }
void FocusOwningWebContents(
RenderWidgetHostImpl* render_widget_host) override {
focus_owning_web_contents_call_count++;
}
int GetFocusOwningWebContentsCallCount() const {
return focus_owning_web_contents_call_count;
}
RenderViewHostDelegateView* GetDelegateView() override { RenderViewHostDelegateView* GetDelegateView() override {
return mock_delegate_view(); return mock_delegate_view();
} }
...@@ -628,6 +637,8 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { ...@@ -628,6 +637,8 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
render_view_host_delegate_view_; render_view_host_delegate_view_;
double zoom_level_ = 0; double zoom_level_ = 0;
int focus_owning_web_contents_call_count = 0;
}; };
// RenderWidgetHostTest -------------------------------------------------------- // RenderWidgetHostTest --------------------------------------------------------
...@@ -1403,6 +1414,27 @@ TEST_F(RenderWidgetHostTest, HandleWheelEvent) { ...@@ -1403,6 +1414,27 @@ TEST_F(RenderWidgetHostTest, HandleWheelEvent) {
EXPECT_EQ(0, view_->unhandled_wheel_event_count()); EXPECT_EQ(0, view_->unhandled_wheel_event_count());
} }
TEST_F(RenderWidgetHostTest, EventsCausingFocus) {
SimulateMouseEvent(WebInputEvent::kMouseDown);
EXPECT_EQ(1, delegate_->GetFocusOwningWebContentsCallCount());
PressTouchPoint(0, 1);
SendTouchEvent();
EXPECT_EQ(2, delegate_->GetFocusOwningWebContentsCallCount());
ReleaseTouchPoint(0);
SendTouchEvent();
EXPECT_EQ(2, delegate_->GetFocusOwningWebContentsCallCount());
SimulateGestureEvent(WebInputEvent::kGestureTapDown,
blink::kWebGestureDeviceTouchscreen);
EXPECT_EQ(2, delegate_->GetFocusOwningWebContentsCallCount());
SimulateGestureEvent(WebInputEvent::kGestureTap,
blink::kWebGestureDeviceTouchscreen);
EXPECT_EQ(3, delegate_->GetFocusOwningWebContentsCallCount());
}
TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) { TEST_F(RenderWidgetHostTest, UnhandledGestureEvent) {
SimulateGestureEvent(WebInputEvent::kGestureTwoFingerTap, SimulateGestureEvent(WebInputEvent::kGestureTwoFingerTap,
blink::kWebGestureDeviceTouchscreen); blink::kWebGestureDeviceTouchscreen);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment