| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |