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

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: Fixed Windows failure Created 4 years, 5 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 5007 matching lines...) Expand 10 before | Expand all | Expand 10 after
5018 EXPECT_EQ(expected_target, router_touch_target); 5018 EXPECT_EQ(expected_target, router_touch_target);
5019 ui::TouchEvent touch_event_released(ui::ET_TOUCH_RELEASED, touch_point, 5019 ui::TouchEvent touch_event_released(ui::ET_TOUCH_RELEASED, touch_point,
5020 0, 0, ui::EventTimeForNow(), 30.f, 30.f, 5020 0, 0, ui::EventTimeForNow(), 30.f, 30.f,
5021 0.f, 0.f); 5021 0.f, 0.f);
5022 root_view_aura->OnTouchEvent(&touch_event_released); 5022 root_view_aura->OnTouchEvent(&touch_event_released);
5023 EXPECT_EQ(nullptr, router_touch_target); 5023 EXPECT_EQ(nullptr, router_touch_target);
5024 } 5024 }
5025 5025
5026 void SendGestureTapSequenceWithExpectedTarget( 5026 void SendGestureTapSequenceWithExpectedTarget(
5027 RenderWidgetHostViewBase* root_view, 5027 RenderWidgetHostViewBase* root_view,
5028 gfx::Point gesture_point, 5028 const gfx::Point& gesture_point,
5029 RenderWidgetHostViewBase*& router_gesture_target, 5029 RenderWidgetHostViewBase*& router_gesture_target,
5030 const RenderWidgetHostViewBase* old_expected_target, 5030 const RenderWidgetHostViewBase* old_expected_target,
5031 const RenderWidgetHostViewBase* expected_target) { 5031 const RenderWidgetHostViewBase* expected_target) {
5032 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view); 5032 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view);
5033 5033
5034 ui::GestureEventDetails gesture_begin_details(ui::ET_GESTURE_BEGIN); 5034 ui::GestureEventDetails gesture_begin_details(ui::ET_GESTURE_BEGIN);
5035 gesture_begin_details.set_device_type( 5035 gesture_begin_details.set_device_type(
5036 ui::GestureDeviceType::DEVICE_TOUCHSCREEN); 5036 ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
5037 ui::GestureEvent gesture_begin_event(gesture_point.x(), gesture_point.y(), 0, 5037 ui::GestureEvent gesture_begin_event(gesture_point.x(), gesture_point.y(), 0,
5038 ui::EventTimeForNow(), 5038 ui::EventTimeForNow(),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
5076 ui::GestureEventDetails gesture_end_details(ui::ET_GESTURE_END); 5076 ui::GestureEventDetails gesture_end_details(ui::ET_GESTURE_END);
5077 gesture_end_details.set_device_type( 5077 gesture_end_details.set_device_type(
5078 ui::GestureDeviceType::DEVICE_TOUCHSCREEN); 5078 ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
5079 ui::GestureEvent gesture_end_event(gesture_point.x(), gesture_point.y(), 0, 5079 ui::GestureEvent gesture_end_event(gesture_point.x(), gesture_point.y(), 0,
5080 ui::EventTimeForNow(), 5080 ui::EventTimeForNow(),
5081 gesture_end_details); 5081 gesture_end_details);
5082 root_view_aura->OnGestureEvent(&gesture_end_event); 5082 root_view_aura->OnGestureEvent(&gesture_end_event);
5083 EXPECT_EQ(expected_target, router_gesture_target); 5083 EXPECT_EQ(expected_target, router_gesture_target);
5084 } 5084 }
5085 5085
5086 void SendTouchpadPinchSequenceWithExpectedTarget(
5087 RenderWidgetHostViewBase* root_view,
5088 const gfx::Point& gesture_point,
5089 RenderWidgetHostViewBase*& router_touchpad_gesture_target,
5090 RenderWidgetHostViewBase* expected_target) {
5091 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view);
5092
5093 ui::GestureEventDetails pinch_begin_details(ui::ET_GESTURE_PINCH_BEGIN);
5094 pinch_begin_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5095 ui::GestureEvent pinch_begin(gesture_point.x(), gesture_point.y(), 0,
5096 ui::EventTimeForNow(), pinch_begin_details);
5097 root_view_aura->OnGestureEvent(&pinch_begin);
5098 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5099
5100 ui::GestureEventDetails pinch_update_details(ui::ET_GESTURE_PINCH_UPDATE);
5101 pinch_update_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5102 ui::GestureEvent pinch_update(gesture_point.x(), gesture_point.y(), 0,
5103 ui::EventTimeForNow(), pinch_update_details);
5104 root_view_aura->OnGestureEvent(&pinch_update);
5105 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5106
5107 ui::GestureEventDetails pinch_end_details(ui::ET_GESTURE_PINCH_END);
5108 pinch_end_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD);
5109 ui::GestureEvent pinch_end(gesture_point.x(), gesture_point.y(), 0,
5110 ui::EventTimeForNow(), pinch_end_details);
5111 root_view_aura->OnGestureEvent(&pinch_end);
5112 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5113 }
5114
5115 #if !defined(OS_WIN)
5116 // Sending touchpad fling events is not supported on Windows.
5117 void SendTouchpadFlingSequenceWithExpectedTarget(
5118 RenderWidgetHostViewBase* root_view,
5119 const gfx::Point& gesture_point,
5120 RenderWidgetHostViewBase*& router_touchpad_gesture_target,
5121 RenderWidgetHostViewBase* expected_target) {
5122 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view);
5123
5124 ui::ScrollEvent fling_start(ui::ET_SCROLL_FLING_START, gesture_point,
5125 ui::EventTimeForNow(), 0, 1, 0, 1, 0, 1);
5126 root_view_aura->OnScrollEvent(&fling_start);
5127 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5128
5129 ui::ScrollEvent fling_cancel(ui::ET_SCROLL_FLING_CANCEL, gesture_point,
5130 ui::EventTimeForNow(), 0, 1, 0, 1, 0, 1);
5131 root_view_aura->OnScrollEvent(&fling_cancel);
5132 EXPECT_EQ(expected_target, router_touchpad_gesture_target);
5133 }
5134 #endif
5135
5086 } // namespace anonymous 5136 } // namespace anonymous
5087 5137
5088 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5138 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5089 InputEventRouterGestureTargetQueueTest) { 5139 InputEventRouterGestureTargetQueueTest) {
5090 GURL main_url(embedded_test_server()->GetURL( 5140 GURL main_url(embedded_test_server()->GetURL(
5091 "/frame_tree/page_with_positioned_nested_frames.html")); 5141 "/frame_tree/page_with_positioned_nested_frames.html"));
5092 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 5142 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5093 5143
5094 WebContentsImpl* contents = web_contents(); 5144 WebContentsImpl* contents = web_contents();
5095 FrameTreeNode* root = contents->GetFrameTree()->root(); 5145 FrameTreeNode* root = contents->GetFrameTree()->root();
(...skipping 11 matching lines...) Expand all
5107 SurfaceHitTestReadyNotifier notifier( 5157 SurfaceHitTestReadyNotifier notifier(
5108 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); 5158 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
5109 notifier.WaitForSurfaceReady(); 5159 notifier.WaitForSurfaceReady();
5110 5160
5111 // All touches & gestures are sent to the main frame's view, and should be 5161 // All touches & gestures are sent to the main frame's view, and should be
5112 // routed appropriately from there. 5162 // routed appropriately from there.
5113 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( 5163 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>(
5114 contents->GetRenderWidgetHostView()); 5164 contents->GetRenderWidgetHostView());
5115 5165
5116 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); 5166 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter();
5117 EXPECT_TRUE(router->gesture_target_queue_.empty()); 5167 EXPECT_TRUE(router->touchscreen_gesture_target_queue_.empty());
5118 EXPECT_EQ(nullptr, router->gesture_target_); 5168 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5119 5169
5120 // Send touch sequence to main-frame. 5170 // Send touch sequence to main-frame.
5121 gfx::Point main_frame_point(25, 25); 5171 gfx::Point main_frame_point(25, 25);
5122 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, 5172 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point,
5123 router->touch_target_, rwhv_parent); 5173 router->touch_target_.target, rwhv_parent);
5124 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); 5174 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size());
5125 EXPECT_EQ(nullptr, router->gesture_target_); 5175 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5126
5127 5176
5128 // Send touch sequence to child. 5177 // Send touch sequence to child.
5129 gfx::Point child_center(150, 150); 5178 gfx::Point child_center(150, 150);
5130 SendTouchTapWithExpectedTarget(rwhv_parent, child_center, 5179 SendTouchTapWithExpectedTarget(rwhv_parent, child_center,
5131 router->touch_target_, rwhv_child); 5180 router->touch_target_.target, rwhv_child);
5132 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); 5181 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size());
5133 EXPECT_EQ(nullptr, router->gesture_target_); 5182 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5134 5183
5135 // Send another touch sequence to main frame. 5184 // Send another touch sequence to main frame.
5136 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, 5185 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point,
5137 router->touch_target_, rwhv_parent); 5186 router->touch_target_.target, rwhv_parent);
5138 EXPECT_EQ(3LU, router->gesture_target_queue_.size()); 5187 EXPECT_EQ(3LU, router->touchscreen_gesture_target_queue_.size());
5139 EXPECT_EQ(nullptr, router->gesture_target_); 5188 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target);
5140 5189
5141 // Send Gestures to clear GestureTargetQueue. 5190 // Send Gestures to clear GestureTargetQueue.
5142 5191
5143 // The first touch sequence should generate a GestureTapDown, sent to the 5192 // The first touch sequence should generate a GestureTapDown, sent to the
5144 // main frame. 5193 // main frame.
5145 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, 5194 SendGestureTapSequenceWithExpectedTarget(
5146 router->gesture_target_, nullptr, 5195 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target,
5147 rwhv_parent); 5196 nullptr, rwhv_parent);
5148 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); 5197 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size());
5149 // Note: rwhv_parent is the target used for GestureFlingCancel sent by 5198 // Note: rwhv_parent is the target used for GestureFlingCancel sent by
5150 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture 5199 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture
5151 // sequence; the sequence itself goes to rwhv_child. 5200 // sequence; the sequence itself goes to rwhv_child.
5152 EXPECT_EQ(rwhv_parent, router->gesture_target_); 5201 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target);
5153 5202
5154 // The second touch sequence should generate a GestureTapDown, sent to the 5203 // The second touch sequence should generate a GestureTapDown, sent to the
5155 // child frame. 5204 // child frame.
5156 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, child_center, 5205 SendGestureTapSequenceWithExpectedTarget(
5157 router->gesture_target_, rwhv_parent, 5206 rwhv_parent, child_center, router->touchscreen_gesture_target_.target,
5158 rwhv_child); 5207 rwhv_parent, rwhv_child);
5159 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); 5208 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size());
5160 EXPECT_EQ(rwhv_child, router->gesture_target_); 5209 EXPECT_EQ(rwhv_child, router->touchscreen_gesture_target_.target);
5161 5210
5162 // The third touch sequence should generate a GestureTapDown, sent to the 5211 // The third touch sequence should generate a GestureTapDown, sent to the
5163 // main frame. 5212 // main frame.
5164 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, 5213 SendGestureTapSequenceWithExpectedTarget(
5165 router->gesture_target_, rwhv_child, 5214 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target,
5166 rwhv_parent); 5215 rwhv_child, rwhv_parent);
5167 EXPECT_EQ(0LU, router->gesture_target_queue_.size()); 5216 EXPECT_EQ(0LU, router->touchscreen_gesture_target_queue_.size());
5168 EXPECT_EQ(rwhv_parent, router->gesture_target_); 5217 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target);
5218 }
5219
5220 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5221 InputEventRouterTouchpadGestureTargetTest) {
5222 GURL main_url(embedded_test_server()->GetURL(
5223 "/frame_tree/page_with_positioned_nested_frames.html"));
5224 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5225
5226 WebContentsImpl* contents = web_contents();
5227 FrameTreeNode* root = contents->GetFrameTree()->root();
5228 ASSERT_EQ(1U, root->child_count());
5229
5230 GURL frame_url(
5231 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html"));
5232 NavigateFrameToURL(root->child_at(0), frame_url);
5233 auto child_frame_host = root->child_at(0)->current_frame_host();
5234
5235 // Synchronize with the child and parent renderers to guarantee that the
5236 // surface information required for event hit testing is ready.
5237 auto rwhv_child =
5238 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView());
5239 SurfaceHitTestReadyNotifier notifier(
5240 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
5241 notifier.WaitForSurfaceReady();
5242
5243 // All touches & gestures are sent to the main frame's view, and should be
5244 // routed appropriately from there.
5245 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>(
5246 contents->GetRenderWidgetHostView());
5247
5248 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter();
5249 EXPECT_EQ(nullptr, router->touchpad_gesture_target_.target);
5250
5251 gfx::Point main_frame_point(25, 25);
5252 gfx::Point child_center(150, 150);
5253
5254 // Send touchpad pinch sequence to main-frame.
5255 SendTouchpadPinchSequenceWithExpectedTarget(
5256 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5257 rwhv_parent);
5258
5259 // Send touchpad pinch sequence to child.
5260 SendTouchpadPinchSequenceWithExpectedTarget(
5261 rwhv_parent, child_center, router->touchpad_gesture_target_.target,
5262 rwhv_child);
5263
5264 // Send another touchpad pinch sequence to main frame.
5265 SendTouchpadPinchSequenceWithExpectedTarget(
5266 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5267 rwhv_parent);
5268
5269 #if !defined(OS_WIN)
5270 // Sending touchpad fling events is not supported on Windows.
5271
5272 // Send touchpad fling sequence to main-frame.
5273 SendTouchpadFlingSequenceWithExpectedTarget(
5274 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5275 rwhv_parent);
5276
5277 // Send touchpad fling sequence to child.
5278 SendTouchpadFlingSequenceWithExpectedTarget(
5279 rwhv_parent, child_center, router->touchpad_gesture_target_.target,
5280 rwhv_child);
5281
5282 // Send another touchpad fling sequence to main frame.
5283 SendTouchpadFlingSequenceWithExpectedTarget(
5284 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target,
5285 rwhv_parent);
5286 #endif
5169 } 5287 }
5170 #endif // defined(USE_AURA) 5288 #endif // defined(USE_AURA)
5171 5289
5172 // A WebContentsDelegate to capture ContextMenu creation events. 5290 // A WebContentsDelegate to capture ContextMenu creation events.
5173 class ContextMenuObserverDelegate : public WebContentsDelegate { 5291 class ContextMenuObserverDelegate : public WebContentsDelegate {
5174 public: 5292 public:
5175 ContextMenuObserverDelegate() 5293 ContextMenuObserverDelegate()
5176 : context_menu_created_(false), 5294 : context_menu_created_(false),
5177 message_loop_runner_(new MessageLoopRunner) {} 5295 message_loop_runner_(new MessageLoopRunner) {}
5178 5296
(...skipping 2114 matching lines...) Expand 10 before | Expand all | Expand 10 after
7293 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0))); 7411 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)));
7294 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); 7412 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0)));
7295 7413
7296 // Cross-site navigation should preserve the fullscreen flags. 7414 // Cross-site navigation should preserve the fullscreen flags.
7297 NavigateFrameToURL(root->child_at(0)->child_at(0), 7415 NavigateFrameToURL(root->child_at(0)->child_at(0),
7298 embedded_test_server()->GetURL("d.com", "/title1.html")); 7416 embedded_test_server()->GetURL("d.com", "/title1.html"));
7299 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); 7417 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0)));
7300 } 7418 }
7301 7419
7302 } // namespace content 7420 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698