| 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 4963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 const gfx::Point& gesture_point, | 4984 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 Loading... |
| 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 RenderWidgetHostViewBase* expected_target) { | |
| 5047 auto root_view_aura = static_cast<RenderWidgetHostViewAura*>(root_view); | |
| 5048 | |
| 5049 ui::GestureEventDetails pinch_begin_details(ui::ET_GESTURE_PINCH_BEGIN); | |
| 5050 pinch_begin_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD); | |
| 5051 ui::GestureEvent pinch_begin(gesture_point.x(), gesture_point.y(), 0, | |
| 5052 ui::EventTimeForNow(), pinch_begin_details); | |
| 5053 root_view_aura->OnGestureEvent(&pinch_begin); | |
| 5054 EXPECT_EQ(expected_target, router_touchpad_gesture_target); | |
| 5055 | |
| 5056 ui::GestureEventDetails pinch_update_details(ui::ET_GESTURE_PINCH_UPDATE); | |
| 5057 pinch_update_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD); | |
| 5058 ui::GestureEvent pinch_update(gesture_point.x(), gesture_point.y(), 0, | |
| 5059 ui::EventTimeForNow(), pinch_update_details); | |
| 5060 root_view_aura->OnGestureEvent(&pinch_update); | |
| 5061 EXPECT_EQ(expected_target, router_touchpad_gesture_target); | |
| 5062 | |
| 5063 ui::GestureEventDetails pinch_end_details(ui::ET_GESTURE_PINCH_END); | |
| 5064 pinch_end_details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHPAD); | |
| 5065 ui::GestureEvent pinch_end(gesture_point.x(), gesture_point.y(), 0, | |
| 5066 ui::EventTimeForNow(), pinch_end_details); | |
| 5067 root_view_aura->OnGestureEvent(&pinch_end); | |
| 5068 EXPECT_EQ(expected_target, router_touchpad_gesture_target); | |
| 5069 } | |
| 5070 | |
| 5071 } // namespace anonymous | 5042 } // namespace anonymous |
| 5072 | 5043 |
| 5073 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5044 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5074 InputEventRouterGestureTargetQueueTest) { | 5045 InputEventRouterGestureTargetQueueTest) { |
| 5075 GURL main_url(embedded_test_server()->GetURL( | 5046 GURL main_url(embedded_test_server()->GetURL( |
| 5076 "/frame_tree/page_with_positioned_nested_frames.html")); | 5047 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 5077 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 5048 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 5078 | 5049 |
| 5079 WebContentsImpl* contents = web_contents(); | 5050 WebContentsImpl* contents = web_contents(); |
| 5080 FrameTreeNode* root = contents->GetFrameTree()->root(); | 5051 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 5092 SurfaceHitTestReadyNotifier notifier( | 5063 SurfaceHitTestReadyNotifier notifier( |
| 5093 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | 5064 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 5094 notifier.WaitForSurfaceReady(); | 5065 notifier.WaitForSurfaceReady(); |
| 5095 | 5066 |
| 5096 // All touches & gestures are sent to the main frame's view, and should be | 5067 // All touches & gestures are sent to the main frame's view, and should be |
| 5097 // routed appropriately from there. | 5068 // routed appropriately from there. |
| 5098 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( | 5069 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( |
| 5099 contents->GetRenderWidgetHostView()); | 5070 contents->GetRenderWidgetHostView()); |
| 5100 | 5071 |
| 5101 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); | 5072 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); |
| 5102 EXPECT_TRUE(router->touchscreen_gesture_target_queue_.empty()); | 5073 EXPECT_TRUE(router->gesture_target_queue_.empty()); |
| 5103 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target); | 5074 EXPECT_EQ(nullptr, router->gesture_target_); |
| 5104 | 5075 |
| 5105 // Send touch sequence to main-frame. | 5076 // Send touch sequence to main-frame. |
| 5106 gfx::Point main_frame_point(25, 25); | 5077 gfx::Point main_frame_point(25, 25); |
| 5107 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, | 5078 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, |
| 5108 router->touch_target_.target, rwhv_parent); | 5079 router->touch_target_, rwhv_parent); |
| 5109 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size()); | 5080 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); |
| 5110 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target); | 5081 EXPECT_EQ(nullptr, router->gesture_target_); |
| 5082 |
| 5111 | 5083 |
| 5112 // Send touch sequence to child. | 5084 // Send touch sequence to child. |
| 5113 gfx::Point child_center(150, 150); | 5085 gfx::Point child_center(150, 150); |
| 5114 SendTouchTapWithExpectedTarget(rwhv_parent, child_center, | 5086 SendTouchTapWithExpectedTarget(rwhv_parent, child_center, |
| 5115 router->touch_target_.target, rwhv_child); | 5087 router->touch_target_, rwhv_child); |
| 5116 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size()); | 5088 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); |
| 5117 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target); | 5089 EXPECT_EQ(nullptr, router->gesture_target_); |
| 5118 | 5090 |
| 5119 // Send another touch sequence to main frame. | 5091 // Send another touch sequence to main frame. |
| 5120 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, | 5092 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, |
| 5121 router->touch_target_.target, rwhv_parent); | 5093 router->touch_target_, rwhv_parent); |
| 5122 EXPECT_EQ(3LU, router->touchscreen_gesture_target_queue_.size()); | 5094 EXPECT_EQ(3LU, router->gesture_target_queue_.size()); |
| 5123 EXPECT_EQ(nullptr, router->touchscreen_gesture_target_.target); | 5095 EXPECT_EQ(nullptr, router->gesture_target_); |
| 5124 | 5096 |
| 5125 // Send Gestures to clear GestureTargetQueue. | 5097 // Send Gestures to clear GestureTargetQueue. |
| 5126 | 5098 |
| 5127 // The first touch sequence should generate a GestureTapDown, sent to the | 5099 // The first touch sequence should generate a GestureTapDown, sent to the |
| 5128 // main frame. | 5100 // main frame. |
| 5129 SendGestureTapSequenceWithExpectedTarget( | 5101 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, |
| 5130 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target, | 5102 router->gesture_target_, nullptr, |
| 5131 nullptr, rwhv_parent); | 5103 rwhv_parent); |
| 5132 EXPECT_EQ(2LU, router->touchscreen_gesture_target_queue_.size()); | 5104 EXPECT_EQ(2LU, router->gesture_target_queue_.size()); |
| 5133 // Note: rwhv_parent is the target used for GestureFlingCancel sent by | 5105 // Note: rwhv_parent is the target used for GestureFlingCancel sent by |
| 5134 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture | 5106 // RenderWidgetHostViewAura::OnGestureEvent() at the start of the next gesture |
| 5135 // sequence; the sequence itself goes to rwhv_child. | 5107 // sequence; the sequence itself goes to rwhv_child. |
| 5136 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target); | 5108 EXPECT_EQ(rwhv_parent, router->gesture_target_); |
| 5137 | 5109 |
| 5138 // The second touch sequence should generate a GestureTapDown, sent to the | 5110 // The second touch sequence should generate a GestureTapDown, sent to the |
| 5139 // child frame. | 5111 // child frame. |
| 5140 SendGestureTapSequenceWithExpectedTarget( | 5112 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, child_center, |
| 5141 rwhv_parent, child_center, router->touchscreen_gesture_target_.target, | 5113 router->gesture_target_, rwhv_parent, |
| 5142 rwhv_parent, rwhv_child); | 5114 rwhv_child); |
| 5143 EXPECT_EQ(1LU, router->touchscreen_gesture_target_queue_.size()); | 5115 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); |
| 5144 EXPECT_EQ(rwhv_child, router->touchscreen_gesture_target_.target); | 5116 EXPECT_EQ(rwhv_child, router->gesture_target_); |
| 5145 | 5117 |
| 5146 // The third touch sequence should generate a GestureTapDown, sent to the | 5118 // The third touch sequence should generate a GestureTapDown, sent to the |
| 5147 // main frame. | 5119 // main frame. |
| 5148 SendGestureTapSequenceWithExpectedTarget( | 5120 SendGestureTapSequenceWithExpectedTarget(rwhv_parent, main_frame_point, |
| 5149 rwhv_parent, main_frame_point, router->touchscreen_gesture_target_.target, | 5121 router->gesture_target_, rwhv_child, |
| 5150 rwhv_child, rwhv_parent); | 5122 rwhv_parent); |
| 5151 EXPECT_EQ(0LU, router->touchscreen_gesture_target_queue_.size()); | 5123 EXPECT_EQ(0LU, router->gesture_target_queue_.size()); |
| 5152 EXPECT_EQ(rwhv_parent, router->touchscreen_gesture_target_.target); | 5124 EXPECT_EQ(rwhv_parent, router->gesture_target_); |
| 5153 } | |
| 5154 | |
| 5155 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 5156 InputEventRouterTouchpadGestureTargetTest) { | |
| 5157 GURL main_url(embedded_test_server()->GetURL( | |
| 5158 "/frame_tree/page_with_positioned_nested_frames.html")); | |
| 5159 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | |
| 5160 | |
| 5161 WebContentsImpl* contents = web_contents(); | |
| 5162 FrameTreeNode* root = contents->GetFrameTree()->root(); | |
| 5163 ASSERT_EQ(1U, root->child_count()); | |
| 5164 | |
| 5165 GURL frame_url( | |
| 5166 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); | |
| 5167 NavigateFrameToURL(root->child_at(0), frame_url); | |
| 5168 auto child_frame_host = root->child_at(0)->current_frame_host(); | |
| 5169 | |
| 5170 // Synchronize with the child and parent renderers to guarantee that the | |
| 5171 // surface information required for event hit testing is ready. | |
| 5172 auto rwhv_child = | |
| 5173 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView()); | |
| 5174 SurfaceHitTestReadyNotifier notifier( | |
| 5175 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | |
| 5176 notifier.WaitForSurfaceReady(); | |
| 5177 | |
| 5178 // All touches & gestures are sent to the main frame's view, and should be | |
| 5179 // routed appropriately from there. | |
| 5180 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( | |
| 5181 contents->GetRenderWidgetHostView()); | |
| 5182 | |
| 5183 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); | |
| 5184 EXPECT_EQ(nullptr, router->touchpad_gesture_target_.target); | |
| 5185 | |
| 5186 // Send touchpad pinch sequence to main-frame. | |
| 5187 gfx::Point main_frame_point(25, 25); | |
| 5188 SendTouchpadPinchSequenceWithExpectedTarget( | |
| 5189 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target, | |
| 5190 rwhv_parent); | |
| 5191 | |
| 5192 // Send touchpad pinch sequence to child. | |
| 5193 gfx::Point child_center(150, 150); | |
| 5194 SendTouchpadPinchSequenceWithExpectedTarget( | |
| 5195 rwhv_parent, child_center, router->touchpad_gesture_target_.target, | |
| 5196 rwhv_child); | |
| 5197 | |
| 5198 // Send another touchpad pinch sequence to main frame. | |
| 5199 SendTouchpadPinchSequenceWithExpectedTarget( | |
| 5200 rwhv_parent, main_frame_point, router->touchpad_gesture_target_.target, | |
| 5201 rwhv_parent); | |
| 5202 } | 5125 } |
| 5203 #endif // defined(USE_AURA) | 5126 #endif // defined(USE_AURA) |
| 5204 | 5127 |
| 5205 // A WebContentsDelegate to capture ContextMenu creation events. | 5128 // A WebContentsDelegate to capture ContextMenu creation events. |
| 5206 class ContextMenuObserverDelegate : public WebContentsDelegate { | 5129 class ContextMenuObserverDelegate : public WebContentsDelegate { |
| 5207 public: | 5130 public: |
| 5208 ContextMenuObserverDelegate() | 5131 ContextMenuObserverDelegate() |
| 5209 : context_menu_created_(false), | 5132 : context_menu_created_(false), |
| 5210 message_loop_runner_(new MessageLoopRunner) {} | 5133 message_loop_runner_(new MessageLoopRunner) {} |
| 5211 | 5134 |
| (...skipping 2088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7300 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0))); | 7223 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0))); |
| 7301 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); | 7224 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); |
| 7302 | 7225 |
| 7303 // Cross-site navigation should preserve the fullscreen flags. | 7226 // Cross-site navigation should preserve the fullscreen flags. |
| 7304 NavigateFrameToURL(root->child_at(0)->child_at(0), | 7227 NavigateFrameToURL(root->child_at(0)->child_at(0), |
| 7305 embedded_test_server()->GetURL("d.com", "/title1.html")); | 7228 embedded_test_server()->GetURL("d.com", "/title1.html")); |
| 7306 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); | 7229 EXPECT_TRUE(is_fullscreen_allowed(root->child_at(0)->child_at(0))); |
| 7307 } | 7230 } |
| 7308 | 7231 |
| 7309 } // namespace content | 7232 } // namespace content |
| OLD | NEW |