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