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

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 2034213002: Reland: Fix touchpad gesture routing to renderers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed review comments Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/site_per_process_browsertest.h" 5 #include "content/browser/site_per_process_browsertest.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 4963 matching lines...) Expand 10 before | Expand all | Expand 10 after
4974 EXPECT_EQ(expected_target, router_touch_target); 4974 EXPECT_EQ(expected_target, router_touch_target);
4975 ui::TouchEvent touch_event_released(ui::ET_TOUCH_RELEASED, touch_point, 4975 ui::TouchEvent touch_event_released(ui::ET_TOUCH_RELEASED, touch_point,
4976 0, 0, ui::EventTimeForNow(), 30.f, 30.f, 4976 0, 0, ui::EventTimeForNow(), 30.f, 30.f,
4977 0.f, 0.f); 4977 0.f, 0.f);
4978 root_view_aura->OnTouchEvent(&touch_event_released); 4978 root_view_aura->OnTouchEvent(&touch_event_released);
4979 EXPECT_EQ(nullptr, router_touch_target); 4979 EXPECT_EQ(nullptr, router_touch_target);
4980 } 4980 }
4981 4981
4982 void SendGestureTapSequenceWithExpectedTarget( 4982 void SendGestureTapSequenceWithExpectedTarget(
4983 RenderWidgetHostViewBase* root_view, 4983 RenderWidgetHostViewBase* root_view,
4984 gfx::Point gesture_point, 4984 const gfx::Point& gesture_point,
4985 RenderWidgetHostViewBase*& router_gesture_target, 4985 RenderWidgetHostViewBase*& router_gesture_target,
4986 const RenderWidgetHostViewBase* old_expected_target, 4986 const RenderWidgetHostViewBase* old_expected_target,
4987 const RenderWidgetHostViewBase* expected_target) { 4987 const RenderWidgetHostViewBase* expected_target) {
4988 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view); 4988 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view);
4989 4989
4990 ui::GestureEventDetails gesture_begin_details(ui::ET_GESTURE_BEGIN); 4990 ui::GestureEventDetails gesture_begin_details(ui::ET_GESTURE_BEGIN);
4991 gesture_begin_details.set_device_type( 4991 gesture_begin_details.set_device_type(
4992 ui::GestureDeviceType::DEVICE_TOUCHSCREEN); 4992 ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
4993 ui::GestureEvent gesture_begin_event(gesture_point.x(), gesture_point.y(), 0, 4993 ui::GestureEvent gesture_begin_event(gesture_point.x(), gesture_point.y(), 0,
4994 ui::EventTimeForNow(), 4994 ui::EventTimeForNow(),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
5032 ui::GestureEventDetails gesture_end_details(ui::ET_GESTURE_END); 5032 ui::GestureEventDetails gesture_end_details(ui::ET_GESTURE_END);
5033 gesture_end_details.set_device_type( 5033 gesture_end_details.set_device_type(
5034 ui::GestureDeviceType::DEVICE_TOUCHSCREEN); 5034 ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
5035 ui::GestureEvent gesture_end_event(gesture_point.x(), gesture_point.y(), 0, 5035 ui::GestureEvent gesture_end_event(gesture_point.x(), gesture_point.y(), 0,
5036 ui::EventTimeForNow(), 5036 ui::EventTimeForNow(),
5037 gesture_end_details); 5037 gesture_end_details);
5038 root_view_aura->OnGestureEvent(&gesture_end_event); 5038 root_view_aura->OnGestureEvent(&gesture_end_event);
5039 EXPECT_EQ(expected_target, router_gesture_target); 5039 EXPECT_EQ(expected_target, router_gesture_target);
5040 } 5040 }
5041 5041
5042 void SendTouchpadPinchSequenceWithExpectedTarget(
5043 RenderWidgetHostViewBase* root_view,
5044 const gfx::Point& gesture_point,
5045 RenderWidgetHostViewBase*& router_touchpad_gesture_target,
5046 gfx::Vector2d& router_touchpad_gesture_delta,
5047 RenderWidgetHostViewBase* expected_target,
5048 const gfx::Vector2d& expected_delta) {
5049 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view);
5050
5051 ui::GestureEventDetails pinch_begin_details(ui::ET_GESTURE_PINCH_BEGIN);
5052 pinch_begin_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5053 ui::GestureEvent pinch_begin(gesture_point.x(), gesture_point.y(), 0,
5054 ui::EventTimeForNow(), pinch_begin_details);
5055 root_view_aura->OnGestureEvent(&pinch_begin);
5056 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5057 EXPECT_EQ(expected_delta, router_touchpad_gesture_delta);
5058
5059 ui::GestureEventDetails pinch_update_details(ui::ET_GESTURE_PINCH_UPDATE);
5060 pinch_update_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5061 ui::GestureEvent pinch_update(gesture_point.x(), gesture_point.y(), 0,
5062 ui::EventTimeForNow(), pinch_update_details);
5063 root_view_aura->OnGestureEvent(&pinch_update);
5064 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5065 EXPECT_EQ(expected_delta, router_touchpad_gesture_delta);
5066
5067 ui::GestureEventDetails pinch_end_details(ui::ET_GESTURE_PINCH_END);
5068 pinch_end_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5069 ui::GestureEvent pinch_end(gesture_point.x(), gesture_point.y(), 0,
5070 ui::EventTimeForNow(), pinch_end_details);
5071 root_view_aura->OnGestureEvent(&pinch_end);
5072 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5073 EXPECT_EQ(expected_delta, router_touchpad_gesture_delta);
5074 }
5075
5042 } // namespace anonymous 5076 } // namespace anonymous
5043 5077
5044 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5078 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5045 InputEventRouterGestureTargetQueueTest) { 5079 InputEventRouterGestureTargetQueueTest) {
5046 GURL main_url(embedded_test_server()->GetURL( 5080 GURL main_url(embedded_test_server()->GetURL(
5047 "/frame_tree/page_with_positioned_nested_frames.html")); 5081 "/frame_tree/page_with_positioned_nested_frames.html"));
5048 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 5082 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5049 5083
5050 WebContentsImpl* contents = web_contents(); 5084 WebContentsImpl* contents = web_contents();
5051 FrameTreeNode* root = contents->GetFrameTree()->root(); 5085 FrameTreeNode* root = contents->GetFrameTree()->root();
(...skipping 11 matching lines...) Expand all
5063 SurfaceHitTestReadyNotifier notifier( 5097 SurfaceHitTestReadyNotifier notifier(
5064 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); 5098 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
5065 notifier.WaitForSurfaceReady(); 5099 notifier.WaitForSurfaceReady();
5066 5100
5067 // All touches & gestures are sent to the main frame's view, and should be 5101 // All touches & gestures are sent to the main frame's view, and should be
5068 // routed appropriately from there. 5102 // routed appropriately from there.
5069 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( 5103 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>(
5070 contents->GetRenderWidgetHostView()); 5104 contents->GetRenderWidgetHostView());
5071 5105
5072 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); 5106 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter();
5073 EXPECT_TRUE(router->gesture_target_queue_.empty()); 5107 EXPECT_TRUE(router->touchscreen_gesture_target_queue_.empty());
5074 EXPECT_EQ(nullptr, router->gesture_target_); 5108 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5075 5109
5076 // Send touch sequence to main-frame. 5110 // Send touch sequence to main-frame.
5077 gfx::Point main_frame_point(25, 25); 5111 gfx::Point main_frame_point(25, 25);
5078 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, 5112 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point,
5079 router->touch_target_, rwhv_parent); 5113 router->touch_target_.target, rwhv_parent);
5080 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); 5114 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size());
5081 EXPECT_EQ(nullptr, router->gesture_target_); 5115 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5082
5083 5116
5084 // Send touch sequence to child. 5117 // Send touch sequence to child.
5085 gfx::Point child_center(150, 150); 5118 gfx::Point child_center(150, 150);
5086 SendTouchTapWithExpectedTarget(rwhv_parent, child_center, 5119 SendTouchTapWithExpectedTarget(rwhv_parent, child_center,
5087 router->touch_target_, rwhv_child); 5120 router->touch_target_.target, rwhv_child);
5088 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); 5121 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size());
5089 EXPECT_EQ(nullptr, router->gesture_target_); 5122 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5090 5123
5091 // Send another touch sequence to main frame. 5124 // Send another touch sequence to main frame.
5092 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, 5125 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point,
5093 router->touch_target_, rwhv_parent); 5126 router->touch_target_.target, rwhv_parent);
5094 EXPECT_EQ(3LU, router->gesture_target_queue_.size()); 5127 EXPECT_EQ(3LU, router->touchscreen_gesture_target_queue_.size());
5095 EXPECT_EQ(nullptr, router->gesture_target_); 5128 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5096 5129
5097 // Send Gestures to clear GestureTargetQueue. 5130 // Send Gestures to clear GestureTargetQueue.
5098 5131
5099 // The first touch sequence should generate a GestureTapDown, sent to the 5132 // The first touch sequence should generate a GestureTapDown, sent to the
5100 // main frame. 5133 // main frame.
5101 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, 5134 SendGestureTapSequenceWithExpectedTarget(
5102 router->gesture_target_, nullptr, 5135 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target,
5103 rwhv_parent); 5136 nullptr, rwhv_parent);
5104 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); 5137 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size());
5105 // Note: rwhv_parent is the target used for GestureFlingCancel sent by 5138 // Note: rwhv_parent is the target used for GestureFlingCancel sent by
5106 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture 5139 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture
5107 // sequence; the sequence itself goes to rwhv_child. 5140 // sequence; the sequence itself goes to rwhv_child.
5108 EXPECT_EQ(rwhv_parent, router->gesture_target_); 5141 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target);
5109 5142
5110 // The second touch sequence should generate a GestureTapDown, sent to the 5143 // The second touch sequence should generate a GestureTapDown, sent to the
5111 // child frame. 5144 // child frame.
5112 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, child_center, 5145 SendGestureTapSequenceWithExpectedTarget(
5113 router->gesture_target_, rwhv_parent, 5146 rwhv_parent, child_center, router->touchscreen_gesture_target_.target,
5114 rwhv_child); 5147 rwhv_parent, rwhv_child);
5115 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); 5148 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size());
5116 EXPECT_EQ(rwhv_child, router->gesture_target_); 5149 EXPECT_EQ(rwhv_child, router->touchscreen_gesture_target_.target);
5117 5150
5118 // The third touch sequence should generate a GestureTapDown, sent to the 5151 // The third touch sequence should generate a GestureTapDown, sent to the
5119 // main frame. 5152 // main frame.
5120 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, 5153 SendGestureTapSequenceWithExpectedTarget(
5121 router->gesture_target_, rwhv_child, 5154 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target,
5122 rwhv_parent); 5155 rwhv_child, rwhv_parent);
5123 EXPECT_EQ(0LU, router->gesture_target_queue_.size()); 5156 EXPECT_EQ(0LU, router->touchscreen_gesture_target_queue_.size());
5124 EXPECT_EQ(rwhv_parent, router->gesture_target_); 5157 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target);
5158 }
5159
5160 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5161 InputEventRouterTouchpadGestureTargetTest) {
5162 GURL main_url(embedded_test_server()->GetURL(
5163 "/frame_tree/page_with_positioned_nested_frames.html"));
5164 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5165
5166 WebContentsImpl* contents = web_contents();
5167 FrameTreeNode* root = contents->GetFrameTree()->root();
5168 ASSERT_EQ(1U, root->child_count());
5169
5170 GURL frame_url(
5171 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html"));
5172 NavigateFrameToURL(root->child_at(0), frame_url);
5173 auto child_frame_host = root->child_at(0)->current_frame_host();
5174
5175 // Synchronize with the child and parent renderers to guarantee that the
5176 // surface information required for event hit testing is ready.
5177 auto rwhv_child =
5178 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView());
5179 SurfaceHitTestReadyNotifier notifier(
5180 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
5181 notifier.WaitForSurfaceReady();
5182
5183 gfx::Vector2d child_delta =
5184 contents->GetViewBounds().origin() -
5185 child_frame_host->GetView()->GetViewBounds().origin();
5186
5187 // All touches & gestures are sent to the main frame's view, and should be
5188 // routed appropriately from there.
5189 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>(
5190 contents->GetRenderWidgetHostView());
5191
5192 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter();
5193 EXPECT_EQ(nullptr, router->touchpad_gesture_target_.target);
5194
5195 // Send touchpad pinch sequence to main-frame.
5196 gfx::Point main_frame_point(25, 25);
5197 SendTouchpadPinchSequenceWithExpectedTarget(
5198 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5199 router->touchpad_gesture_target_.delta, rwhv_parent, gfx::Vector2d());
5200
5201 // Send touchpad pinch sequence to child.
5202 gfx::Point child_center(150, 150);
5203 SendTouchpadPinchSequenceWithExpectedTarget(
5204 rwhv_parent, child_center, router->touchpad_gesture_target_.target,
5205 router->touchpad_gesture_target_.delta, rwhv_child, child_delta);
5206
5207 // Send another touchpad pinch sequence to main frame.
5208 SendTouchpadPinchSequenceWithExpectedTarget(
5209 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5210 router->touchpad_gesture_target_.delta, rwhv_parent, gfx::Vector2d());
5125 } 5211 }
5126 #endif // defined(USE_AURA) 5212 #endif // defined(USE_AURA)
5127 5213
5128 // A WebContentsDelegate to capture ContextMenu creation events. 5214 // A WebContentsDelegate to capture ContextMenu creation events.
5129 class ContextMenuObserverDelegate : public WebContentsDelegate { 5215 class ContextMenuObserverDelegate : public WebContentsDelegate {
5130 public: 5216 public:
5131 ContextMenuObserverDelegate() 5217 ContextMenuObserverDelegate()
5132 : context_menu_created_(false), 5218 : context_menu_created_(false),
5133 message_loop_runner_(new MessageLoopRunner) {} 5219 message_loop_runner_(new MessageLoopRunner) {}
5134 5220
(...skipping 2088 matching lines...) Expand 10 before | Expand all | Expand 10 after
7223 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0))); 7309 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)));
7224 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); 7310 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0)));
7225 7311
7226 // Cross-site navigation should preserve the fullscreen flags. 7312 // Cross-site navigation should preserve the fullscreen flags.
7227 NavigateFrameToURL(root->child_at(0)->child_at(0), 7313 NavigateFrameToURL(root->child_at(0)->child_at(0),
7228 embedded_test_server()->GetURL("d.com", "/title1.html")); 7314 embedded_test_server()->GetURL("d.com", "/title1.html"));
7229 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); 7315 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0)));
7230 } 7316 }
7231 7317
7232 } // namespace content 7318 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698