| 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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 events_received_.push_back(event.type()); | 228 events_received_.push_back(event.type()); |
| 229 }; | 229 }; |
| 230 | 230 |
| 231 private: | 231 private: |
| 232 RenderWidgetHost* host_; | 232 RenderWidgetHost* host_; |
| 233 std::vector<blink::WebInputEvent::Type> events_received_; | 233 std::vector<blink::WebInputEvent::Type> events_received_; |
| 234 | 234 |
| 235 DISALLOW_COPY_AND_ASSIGN(TestInputEventObserver); | 235 DISALLOW_COPY_AND_ASSIGN(TestInputEventObserver); |
| 236 }; | 236 }; |
| 237 | 237 |
| 238 double GetFrameDeviceScaleFactor(const ToRenderFrameHost& adapter) { |
| 239 double device_scale_factor; |
| 240 const char kGetFrameDeviceScaleFactor[] = |
| 241 "window.domAutomationController.send(window.devicePixelRatio);"; |
| 242 EXPECT_TRUE(ExecuteScriptAndExtractDouble(adapter, kGetFrameDeviceScaleFactor, |
| 243 &device_scale_factor)); |
| 244 return device_scale_factor; |
| 245 } |
| 246 |
| 247 // This method returns the scale factor on Android and 1.0 on other |
| 248 // platforms in order to adjust coordinates appropriately. |
| 249 double GetAdjustmentScaleFactorForAndroid(Shell* shell) { |
| 250 #if defined(OS_ANDROID) |
| 251 return GetFrameDeviceScaleFactor(shell->web_contents()); |
| 252 #else |
| 253 return 1.0; |
| 254 #endif |
| 255 } |
| 256 |
| 238 // Helper function that performs a surface hittest. | 257 // Helper function that performs a surface hittest. |
| 239 void SurfaceHitTestTestHelper( | 258 void SurfaceHitTestTestHelper( |
| 240 Shell* shell, | 259 Shell* shell, |
| 241 net::test_server::EmbeddedTestServer* embedded_test_server) { | 260 net::test_server::EmbeddedTestServer* embedded_test_server) { |
| 242 GURL main_url(embedded_test_server->GetURL( | 261 GURL main_url(embedded_test_server->GetURL( |
| 243 "/frame_tree/page_with_positioned_frame.html")); | 262 "/frame_tree/page_with_positioned_frame.html")); |
| 244 EXPECT_TRUE(NavigateToURL(shell, main_url)); | 263 EXPECT_TRUE(NavigateToURL(shell, main_url)); |
| 245 | 264 |
| 246 // It is safe to obtain the root frame tree node here, as it doesn't change. | 265 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 247 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell->web_contents()) | 266 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell->web_contents()) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 267 | 286 |
| 268 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 287 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 269 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 288 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 270 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( | 289 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( |
| 271 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 290 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 272 | 291 |
| 273 SurfaceHitTestReadyNotifier notifier( | 292 SurfaceHitTestReadyNotifier notifier( |
| 274 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | 293 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 275 notifier.WaitForSurfaceReady(); | 294 notifier.WaitForSurfaceReady(); |
| 276 | 295 |
| 296 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell); |
| 297 |
| 298 // Get the view bounds of the child iframe, which should account for the |
| 299 // relative offset of its direct parent within the root frame, for use in |
| 300 // targeting the input event. |
| 301 gfx::Rect bounds = rwhv_child->GetViewBounds(); |
| 302 |
| 277 // Target input event to child frame. | 303 // Target input event to child frame. |
| 278 blink::WebMouseEvent child_event(blink::WebInputEvent::MouseDown, | 304 blink::WebMouseEvent child_event(blink::WebInputEvent::MouseDown, |
| 279 blink::WebInputEvent::NoModifiers, | 305 blink::WebInputEvent::NoModifiers, |
| 280 blink::WebInputEvent::TimeStampForTesting); | 306 blink::WebInputEvent::TimeStampForTesting); |
| 281 child_event.button = blink::WebPointerProperties::Button::Left; | 307 child_event.button = blink::WebPointerProperties::Button::Left; |
| 282 child_event.x = 75; | 308 child_event.x = |
| 283 child_event.y = 75; | 309 gfx::ToCeiledInt((bounds.x() - root_view->GetViewBounds().x()) / |
| 310 scale_factor) + |
| 311 3; |
| 312 child_event.y = |
| 313 gfx::ToCeiledInt((bounds.y() - root_view->GetViewBounds().y()) / |
| 314 scale_factor) + |
| 315 3; |
| 284 child_event.clickCount = 1; | 316 child_event.clickCount = 1; |
| 285 main_frame_monitor.ResetEventReceived(); | 317 main_frame_monitor.ResetEventReceived(); |
| 286 child_frame_monitor.ResetEventReceived(); | 318 child_frame_monitor.ResetEventReceived(); |
| 287 router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); | 319 router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); |
| 288 | 320 |
| 289 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); | 321 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); |
| 290 EXPECT_EQ(23, child_frame_monitor.event().x); | 322 // The expected result coordinates are (3, 3), but can get slightly |
| 291 EXPECT_EQ(23, child_frame_monitor.event().y); | 323 // different results due to rounding error with some device scale factors. |
| 324 EXPECT_TRUE(child_frame_monitor.event().x <= 5 && |
| 325 child_frame_monitor.event().x >= 1) |
| 326 << " actual event.x: " << child_frame_monitor.event().x; |
| 327 EXPECT_TRUE(child_frame_monitor.event().y <= 5 && |
| 328 child_frame_monitor.event().y >= 1) |
| 329 << " actual event.y: " << child_frame_monitor.event().y; |
| 292 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); | 330 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); |
| 293 | 331 |
| 294 child_frame_monitor.ResetEventReceived(); | 332 child_frame_monitor.ResetEventReceived(); |
| 295 main_frame_monitor.ResetEventReceived(); | 333 main_frame_monitor.ResetEventReceived(); |
| 296 | 334 |
| 297 // Target input event to main frame. | 335 // Target input event to main frame. |
| 298 blink::WebMouseEvent main_event(blink::WebInputEvent::MouseDown, | 336 blink::WebMouseEvent main_event(blink::WebInputEvent::MouseDown, |
| 299 blink::WebInputEvent::NoModifiers, | 337 blink::WebInputEvent::NoModifiers, |
| 300 blink::WebInputEvent::TimeStampForTesting); | 338 blink::WebInputEvent::TimeStampForTesting); |
| 301 main_event.button = blink::WebPointerProperties::Button::Left; | 339 main_event.button = blink::WebPointerProperties::Button::Left; |
| (...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 }; | 737 }; |
| 700 | 738 |
| 701 bool operator==(const ParsedFeaturePolicyDeclaration& first, | 739 bool operator==(const ParsedFeaturePolicyDeclaration& first, |
| 702 const ParsedFeaturePolicyDeclaration& second) { | 740 const ParsedFeaturePolicyDeclaration& second) { |
| 703 return std::tie(first.feature_name, first.matches_all_origins, | 741 return std::tie(first.feature_name, first.matches_all_origins, |
| 704 first.origins) == std::tie(second.feature_name, | 742 first.origins) == std::tie(second.feature_name, |
| 705 second.matches_all_origins, | 743 second.matches_all_origins, |
| 706 second.origins); | 744 second.origins); |
| 707 } | 745 } |
| 708 | 746 |
| 709 double GetFrameDeviceScaleFactor(const ToRenderFrameHost& adapter) { | |
| 710 double device_scale_factor; | |
| 711 const char kGetFrameDeviceScaleFactor[] = | |
| 712 "window.domAutomationController.send(window.devicePixelRatio);"; | |
| 713 EXPECT_TRUE(ExecuteScriptAndExtractDouble(adapter, kGetFrameDeviceScaleFactor, | |
| 714 &device_scale_factor)); | |
| 715 return device_scale_factor; | |
| 716 } | |
| 717 | |
| 718 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, | 747 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, |
| 719 SubframeLoadsWithCorrectDeviceScaleFactor) { | 748 SubframeLoadsWithCorrectDeviceScaleFactor) { |
| 720 GURL main_url(embedded_test_server()->GetURL( | 749 GURL main_url(embedded_test_server()->GetURL( |
| 721 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 750 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 722 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 751 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 723 | 752 |
| 724 // On Android forcing device scale factor does not work for tests, therefore | 753 // On Android forcing device scale factor does not work for tests, therefore |
| 725 // we ensure that make frame and iframe have the same DIP scale there, but | 754 // we ensure that make frame and iframe have the same DIP scale there, but |
| 726 // not necessarily kDeviceScaleFactor. | 755 // not necessarily kDeviceScaleFactor. |
| 727 const double expected_dip_scale = | 756 const double expected_dip_scale = |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | 987 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
| 959 bool frame_rect_received_; | 988 bool frame_rect_received_; |
| 960 gfx::Rect last_rect_; | 989 gfx::Rect last_rect_; |
| 961 | 990 |
| 962 DISALLOW_COPY_AND_ASSIGN(FrameRectChangedMessageFilter); | 991 DISALLOW_COPY_AND_ASSIGN(FrameRectChangedMessageFilter); |
| 963 }; | 992 }; |
| 964 | 993 |
| 965 // Test that the view bounds for an out-of-process iframe are set and updated | 994 // Test that the view bounds for an out-of-process iframe are set and updated |
| 966 // correctly, including accounting for local frame offsets in the parent and | 995 // correctly, including accounting for local frame offsets in the parent and |
| 967 // scroll positions. | 996 // scroll positions. |
| 968 #if defined(OS_ANDROID) | 997 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ViewBoundsInNestedFrameTest) { |
| 969 // Browser process hit testing is not implemented on Android. | |
| 970 // https://crbug.com/491334 | |
| 971 #define MAYBE_ViewBoundsInNestedFrameTest DISABLED_ViewBoundsInNestedFrameTest | |
| 972 #else | |
| 973 #define MAYBE_ViewBoundsInNestedFrameTest ViewBoundsInNestedFrameTest | |
| 974 #endif | |
| 975 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 976 MAYBE_ViewBoundsInNestedFrameTest) { | |
| 977 GURL main_url(embedded_test_server()->GetURL( | 998 GURL main_url(embedded_test_server()->GetURL( |
| 978 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 999 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 979 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1000 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 980 | 1001 |
| 981 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1002 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 982 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1003 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) |
| 983 ->GetFrameTree() | 1004 ->GetFrameTree() |
| 984 ->root(); | 1005 ->root(); |
| 985 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( | 1006 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( |
| 986 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 1007 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1003 RenderWidgetHostViewBase* rwhv_nested = | 1024 RenderWidgetHostViewBase* rwhv_nested = |
| 1004 static_cast<RenderWidgetHostViewBase*>( | 1025 static_cast<RenderWidgetHostViewBase*>( |
| 1005 nested_iframe_node->current_frame_host() | 1026 nested_iframe_node->current_frame_host() |
| 1006 ->GetRenderWidgetHost() | 1027 ->GetRenderWidgetHost() |
| 1007 ->GetView()); | 1028 ->GetView()); |
| 1008 | 1029 |
| 1009 SurfaceHitTestReadyNotifier notifier( | 1030 SurfaceHitTestReadyNotifier notifier( |
| 1010 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_nested)); | 1031 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_nested)); |
| 1011 notifier.WaitForSurfaceReady(); | 1032 notifier.WaitForSurfaceReady(); |
| 1012 | 1033 |
| 1034 #if defined(OS_ANDROID) |
| 1035 // Android browser tests have some differences that affect the results. One |
| 1036 // is viewport dimensions, the other is that it handles scale factor |
| 1037 // differently. |
| 1038 int expected_x = 487; |
| 1039 #else |
| 1040 int expected_x = 397; |
| 1041 #endif |
| 1042 int expected_y = 112; |
| 1043 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell()); |
| 1044 |
| 1013 // Verify the view bounds of the nested iframe, which should account for the | 1045 // Verify the view bounds of the nested iframe, which should account for the |
| 1014 // relative offset of its direct parent within the root frame. | 1046 // relative offset of its direct parent within the root frame. |
| 1015 gfx::Rect bounds = rwhv_nested->GetViewBounds(); | 1047 gfx::Rect bounds = rwhv_nested->GetViewBounds(); |
| 1016 EXPECT_EQ(bounds.x() - rwhv_root->GetViewBounds().x(), 397); | 1048 int diff_x = bounds.x() - rwhv_root->GetViewBounds().x() - expected_x; |
| 1017 EXPECT_EQ(bounds.y() - rwhv_root->GetViewBounds().y(), 112); | 1049 int diff_y = bounds.y() - rwhv_root->GetViewBounds().y() - expected_y; |
| 1050 // diff_x and diff_y should usually be zero, but can get slightly different |
| 1051 // results due to rounding error with some device scale factors. |
| 1052 EXPECT_TRUE(diff_x <= 2 && diff_x >= -2) << " actual diff_x: " << diff_x; |
| 1053 EXPECT_TRUE(diff_y <= 2 && diff_y >= -2) << " actual diff_y: " << diff_y; |
| 1018 | 1054 |
| 1019 scoped_refptr<FrameRectChangedMessageFilter> filter = | 1055 scoped_refptr<FrameRectChangedMessageFilter> filter = |
| 1020 new FrameRectChangedMessageFilter(); | 1056 new FrameRectChangedMessageFilter(); |
| 1021 root->current_frame_host()->GetProcess()->AddFilter(filter.get()); | 1057 root->current_frame_host()->GetProcess()->AddFilter(filter.get()); |
| 1022 | 1058 |
| 1023 // Scroll the parent frame downward to verify that the child rect gets updated | 1059 // Scroll the parent frame downward to verify that the child rect gets updated |
| 1024 // correctly. | 1060 // correctly. |
| 1025 blink::WebMouseWheelEvent scroll_event( | 1061 blink::WebMouseWheelEvent scroll_event( |
| 1026 blink::WebInputEvent::MouseWheel, blink::WebInputEvent::NoModifiers, | 1062 blink::WebInputEvent::MouseWheel, blink::WebInputEvent::NoModifiers, |
| 1027 blink::WebInputEvent::TimeStampForTesting); | 1063 blink::WebInputEvent::TimeStampForTesting); |
| 1028 scroll_event.x = 387; | 1064 |
| 1029 scroll_event.y = 110; | 1065 scroll_event.x = gfx::ToFlooredInt( |
| 1066 (bounds.x() - rwhv_root->GetViewBounds().x() - 5) / scale_factor); |
| 1067 scroll_event.y = gfx::ToFlooredInt( |
| 1068 (bounds.y() - rwhv_root->GetViewBounds().y() - 5) / scale_factor); |
| 1030 scroll_event.deltaX = 0.0f; | 1069 scroll_event.deltaX = 0.0f; |
| 1031 scroll_event.deltaY = -30.0f; | 1070 scroll_event.deltaY = -30.0f; |
| 1032 rwhv_root->ProcessMouseWheelEvent(scroll_event, ui::LatencyInfo()); | 1071 rwhv_root->ProcessMouseWheelEvent(scroll_event, ui::LatencyInfo()); |
| 1033 | 1072 |
| 1034 filter->Wait(); | 1073 filter->Wait(); |
| 1035 | 1074 |
| 1036 // The precise amount of scroll for the first view position update is not | 1075 // The precise amount of scroll for the first view position update is not |
| 1037 // deterministic, so this simply verifies that the OOPIF moved from its | 1076 // deterministic, so this simply verifies that the OOPIF moved from its |
| 1038 // earlier position. | 1077 // earlier position. |
| 1039 gfx::Rect update_rect = filter->last_rect(); | 1078 gfx::Rect update_rect = filter->last_rect(); |
| 1040 EXPECT_LT(update_rect.y(), bounds.y() - rwhv_root->GetViewBounds().y()); | 1079 EXPECT_LT(update_rect.y(), bounds.y() - rwhv_root->GetViewBounds().y()); |
| 1041 } | 1080 } |
| 1042 | 1081 |
| 1043 // Test that scrolling a nested out-of-process iframe bubbles unused scroll | 1082 // Test that scrolling a nested out-of-process iframe bubbles unused scroll |
| 1044 // delta to a parent frame. | 1083 // delta to a parent frame. |
| 1045 // Browser process hit testing is not implemented on Android. | |
| 1046 // https://crbug.com/491334 | |
| 1047 // Flaky: https://crbug.com/627238 | 1084 // Flaky: https://crbug.com/627238 |
| 1048 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1085 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1049 DISABLED_ScrollBubblingFromOOPIFTest) { | 1086 DISABLED_ScrollBubblingFromOOPIFTest) { |
| 1050 GURL main_url(embedded_test_server()->GetURL( | 1087 GURL main_url(embedded_test_server()->GetURL( |
| 1051 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 1088 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 1052 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1089 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1053 | 1090 |
| 1054 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1091 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1055 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1092 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) |
| 1056 ->GetFrameTree() | 1093 ->GetFrameTree() |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1258 2); | 1295 2); |
| 1259 rwhv_parent->OnScrollEvent(&scroll_event); | 1296 rwhv_parent->OnScrollEvent(&scroll_event); |
| 1260 | 1297 |
| 1261 // Verify that this a mouse wheel event was sent to the child frame renderer. | 1298 // Verify that this a mouse wheel event was sent to the child frame renderer. |
| 1262 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); | 1299 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); |
| 1263 EXPECT_EQ(child_frame_monitor.EventType(), blink::WebInputEvent::MouseWheel); | 1300 EXPECT_EQ(child_frame_monitor.EventType(), blink::WebInputEvent::MouseWheel); |
| 1264 } | 1301 } |
| 1265 | 1302 |
| 1266 // Test that mouse events are being routed to the correct RenderWidgetHostView | 1303 // Test that mouse events are being routed to the correct RenderWidgetHostView |
| 1267 // based on coordinates. | 1304 // based on coordinates. |
| 1268 #if defined(OS_ANDROID) || defined(THREAD_SANITIZER) | 1305 #if defined(THREAD_SANITIZER) |
| 1269 // Browser process hit testing is not implemented on Android. | |
| 1270 // https://crbug.com/491334 | |
| 1271 // The test times out often on TSAN bot. | 1306 // The test times out often on TSAN bot. |
| 1272 // https://crbug.com/591170. | 1307 // https://crbug.com/591170. |
| 1273 #define MAYBE_SurfaceHitTestTest DISABLED_SurfaceHitTestTest | 1308 #define MAYBE_SurfaceHitTestTest DISABLED_SurfaceHitTestTest |
| 1274 #else | 1309 #else |
| 1275 #define MAYBE_SurfaceHitTestTest SurfaceHitTestTest | 1310 #define MAYBE_SurfaceHitTestTest SurfaceHitTestTest |
| 1276 #endif | 1311 #endif |
| 1277 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_SurfaceHitTestTest) { | 1312 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_SurfaceHitTestTest) { |
| 1278 SurfaceHitTestTestHelper(shell(), embedded_test_server()); | 1313 SurfaceHitTestTestHelper(shell(), embedded_test_server()); |
| 1279 } | 1314 } |
| 1280 | 1315 |
| 1281 // Same test as above, but runs in high-dpi mode. | 1316 // Same test as above, but runs in high-dpi mode. |
| 1282 #if defined(OS_ANDROID) || defined(OS_WIN) | 1317 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 1283 // Browser process hit testing is not implemented on Android. | 1318 // High DPI browser tests are not needed on Android, and confuse some of the |
| 1284 // https://crbug.com/491334 | 1319 // coordinate calculations. Android uses fixed device scale factor. |
| 1285 // Windows is disabled because of https://crbug.com/545547. | 1320 // Windows is disabled because of https://crbug.com/545547. |
| 1286 #define MAYBE_HighDPISurfaceHitTestTest DISABLED_SurfaceHitTestTest | 1321 #define MAYBE_HighDPISurfaceHitTestTest DISABLED_SurfaceHitTestTest |
| 1287 #else | 1322 #else |
| 1288 #define MAYBE_HighDPISurfaceHitTestTest SurfaceHitTestTest | 1323 #define MAYBE_HighDPISurfaceHitTestTest SurfaceHitTestTest |
| 1289 #endif | 1324 #endif |
| 1290 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, | 1325 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, |
| 1291 MAYBE_HighDPISurfaceHitTestTest) { | 1326 MAYBE_HighDPISurfaceHitTestTest) { |
| 1292 SurfaceHitTestTestHelper(shell(), embedded_test_server()); | 1327 SurfaceHitTestTestHelper(shell(), embedded_test_server()); |
| 1293 } | 1328 } |
| 1294 | 1329 |
| 1295 // Test that mouse events are being routed to the correct RenderWidgetHostView | 1330 // Test that mouse events are being routed to the correct RenderWidgetHostView |
| 1296 // when there are nested out-of-process iframes. | 1331 // when there are nested out-of-process iframes. |
| 1297 #if defined(OS_ANDROID) | 1332 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NestedSurfaceHitTestTest) { |
| 1298 // Browser process hit testing is not implemented on Android. | |
| 1299 // https://crbug.com/491334 | |
| 1300 #define MAYBE_NestedSurfaceHitTestTest DISABLED_NestedSurfaceHitTestTest | |
| 1301 #else | |
| 1302 #define MAYBE_NestedSurfaceHitTestTest NestedSurfaceHitTestTest | |
| 1303 #endif | |
| 1304 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 1305 MAYBE_NestedSurfaceHitTestTest) { | |
| 1306 GURL main_url(embedded_test_server()->GetURL( | 1333 GURL main_url(embedded_test_server()->GetURL( |
| 1307 "/frame_tree/page_with_positioned_nested_frames.html")); | 1334 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 1308 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1335 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1309 | 1336 |
| 1310 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1337 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1311 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 1338 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1312 ASSERT_EQ(1U, root->child_count()); | 1339 ASSERT_EQ(1U, root->child_count()); |
| 1313 | 1340 |
| 1314 FrameTreeNode* parent_iframe_node = root->child_at(0); | 1341 FrameTreeNode* parent_iframe_node = root->child_at(0); |
| 1315 GURL site_url(embedded_test_server()->GetURL( | 1342 GURL site_url(embedded_test_server()->GetURL( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1341 RenderWidgetHostViewBase* rwhv_nested = | 1368 RenderWidgetHostViewBase* rwhv_nested = |
| 1342 static_cast<RenderWidgetHostViewBase*>( | 1369 static_cast<RenderWidgetHostViewBase*>( |
| 1343 nested_iframe_node->current_frame_host() | 1370 nested_iframe_node->current_frame_host() |
| 1344 ->GetRenderWidgetHost() | 1371 ->GetRenderWidgetHost() |
| 1345 ->GetView()); | 1372 ->GetView()); |
| 1346 | 1373 |
| 1347 SurfaceHitTestReadyNotifier notifier( | 1374 SurfaceHitTestReadyNotifier notifier( |
| 1348 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_nested)); | 1375 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_nested)); |
| 1349 notifier.WaitForSurfaceReady(); | 1376 notifier.WaitForSurfaceReady(); |
| 1350 | 1377 |
| 1378 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell()); |
| 1379 |
| 1380 // Get the view bounds of the nested iframe, which should account for the |
| 1381 // relative offset of its direct parent within the root frame, for use in |
| 1382 // targeting the input event. |
| 1383 gfx::Rect bounds = rwhv_nested->GetViewBounds(); |
| 1384 |
| 1351 // Target input event to nested frame. | 1385 // Target input event to nested frame. |
| 1352 blink::WebMouseEvent nested_event(blink::WebInputEvent::MouseDown, | 1386 blink::WebMouseEvent nested_event(blink::WebInputEvent::MouseDown, |
| 1353 blink::WebInputEvent::NoModifiers, | 1387 blink::WebInputEvent::NoModifiers, |
| 1354 blink::WebInputEvent::TimeStampForTesting); | 1388 blink::WebInputEvent::TimeStampForTesting); |
| 1355 nested_event.button = blink::WebPointerProperties::Button::Left; | 1389 nested_event.button = blink::WebPointerProperties::Button::Left; |
| 1356 nested_event.x = 125; | 1390 nested_event.x = |
| 1357 nested_event.y = 125; | 1391 gfx::ToCeiledInt((bounds.x() - root_view->GetViewBounds().x()) / |
| 1392 scale_factor) + |
| 1393 5; |
| 1394 nested_event.y = |
| 1395 gfx::ToCeiledInt((bounds.y() - root_view->GetViewBounds().y()) / |
| 1396 scale_factor) + |
| 1397 5; |
| 1358 nested_event.clickCount = 1; | 1398 nested_event.clickCount = 1; |
| 1359 nested_frame_monitor.ResetEventReceived(); | 1399 nested_frame_monitor.ResetEventReceived(); |
| 1360 main_frame_monitor.ResetEventReceived(); | 1400 main_frame_monitor.ResetEventReceived(); |
| 1361 router->RouteMouseEvent(root_view, &nested_event, ui::LatencyInfo()); | 1401 router->RouteMouseEvent(root_view, &nested_event, ui::LatencyInfo()); |
| 1362 | 1402 |
| 1363 EXPECT_TRUE(nested_frame_monitor.EventWasReceived()); | 1403 EXPECT_TRUE(nested_frame_monitor.EventWasReceived()); |
| 1364 EXPECT_EQ(21, nested_frame_monitor.event().x); | 1404 // The expected result coordinates are (5, 5), but can get slightly |
| 1365 EXPECT_EQ(21, nested_frame_monitor.event().y); | 1405 // different results due to rounding error with some device scale factors. |
| 1406 EXPECT_TRUE(nested_frame_monitor.event().x <= 6 && |
| 1407 nested_frame_monitor.event().x >= 4) |
| 1408 << " actual event.x: " << nested_frame_monitor.event().x; |
| 1409 EXPECT_TRUE(nested_frame_monitor.event().y <= 6 && |
| 1410 nested_frame_monitor.event().y >= 4) |
| 1411 << " actual event.y: " << nested_frame_monitor.event().y; |
| 1366 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); | 1412 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); |
| 1367 } | 1413 } |
| 1368 | 1414 |
| 1369 // This test tests that browser process hittesting ignores frames with | 1415 // This test tests that browser process hittesting ignores frames with |
| 1370 // pointer-events: none. | 1416 // pointer-events: none. |
| 1371 #if defined(OS_ANDROID) | |
| 1372 // Browser process hit testing is not implemented on Android. | |
| 1373 // https://crbug.com/491334 | |
| 1374 #define MAYBE_SurfaceHitTestPointerEventsNone \ | |
| 1375 DISABLED_SurfaceHitTestPointerEventsNone | |
| 1376 #else | |
| 1377 #define MAYBE_SurfaceHitTestPointerEventsNone SurfaceHitTestPointerEventsNone | |
| 1378 #endif | |
| 1379 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1417 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1380 MAYBE_SurfaceHitTestPointerEventsNone) { | 1418 SurfaceHitTestPointerEventsNone) { |
| 1381 GURL main_url(embedded_test_server()->GetURL( | 1419 GURL main_url(embedded_test_server()->GetURL( |
| 1382 "/frame_tree/page_with_positioned_frame_pointer-events_none.html")); | 1420 "/frame_tree/page_with_positioned_frame_pointer-events_none.html")); |
| 1383 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1421 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1384 | 1422 |
| 1385 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1423 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1386 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 1424 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1387 ASSERT_EQ(1U, root->child_count()); | 1425 ASSERT_EQ(1U, root->child_count()); |
| 1388 | 1426 |
| 1389 FrameTreeNode* child_node = root->child_at(0); | 1427 FrameTreeNode* child_node = root->child_at(0); |
| 1390 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); | 1428 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); | 1461 router->RouteMouseEvent(root_view, &child_event, ui::LatencyInfo()); |
| 1424 | 1462 |
| 1425 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); | 1463 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); |
| 1426 EXPECT_EQ(75, main_frame_monitor.event().x); | 1464 EXPECT_EQ(75, main_frame_monitor.event().x); |
| 1427 EXPECT_EQ(75, main_frame_monitor.event().y); | 1465 EXPECT_EQ(75, main_frame_monitor.event().y); |
| 1428 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); | 1466 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); |
| 1429 } | 1467 } |
| 1430 | 1468 |
| 1431 // This test verifies that MouseEnter and MouseLeave events fire correctly | 1469 // This test verifies that MouseEnter and MouseLeave events fire correctly |
| 1432 // when the mouse cursor moves between processes. | 1470 // when the mouse cursor moves between processes. |
| 1433 #if defined(OS_ANDROID) | |
| 1434 // Browser process hit testing is not implemented on Android. | |
| 1435 // https://crbug.com/491334 | |
| 1436 #define MAYBE_CrossProcessMouseEnterAndLeaveTest \ | |
| 1437 DISABLED_CrossProcessMouseEnterAndLeaveTest | |
| 1438 #else | |
| 1439 #define MAYBE_CrossProcessMouseEnterAndLeaveTest \ | |
| 1440 CrossProcessMouseEnterAndLeaveTest | |
| 1441 #endif | |
| 1442 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1471 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1443 MAYBE_CrossProcessMouseEnterAndLeaveTest) { | 1472 CrossProcessMouseEnterAndLeaveTest) { |
| 1444 GURL main_url(embedded_test_server()->GetURL( | 1473 GURL main_url(embedded_test_server()->GetURL( |
| 1445 "a.com", "/cross_site_iframe_factory.html?a(b,c(d))")); | 1474 "a.com", "/cross_site_iframe_factory.html?a(b,c(d))")); |
| 1446 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1475 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1447 | 1476 |
| 1448 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1477 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) |
| 1449 ->GetFrameTree() | 1478 ->GetFrameTree() |
| 1450 ->root(); | 1479 ->root(); |
| 1451 | 1480 |
| 1452 EXPECT_EQ( | 1481 EXPECT_EQ( |
| 1453 " Site A ------------ proxies for B C D\n" | 1482 " Site A ------------ proxies for B C D\n" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1487 root->current_frame_host()->GetRenderWidgetHost()); | 1516 root->current_frame_host()->GetRenderWidgetHost()); |
| 1488 RenderWidgetHostMouseEventMonitor a_frame_monitor( | 1517 RenderWidgetHostMouseEventMonitor a_frame_monitor( |
| 1489 root->current_frame_host()->GetRenderWidgetHost()); | 1518 root->current_frame_host()->GetRenderWidgetHost()); |
| 1490 RenderWidgetHostMouseEventMonitor b_frame_monitor( | 1519 RenderWidgetHostMouseEventMonitor b_frame_monitor( |
| 1491 b_node->current_frame_host()->GetRenderWidgetHost()); | 1520 b_node->current_frame_host()->GetRenderWidgetHost()); |
| 1492 RenderWidgetHostMouseEventMonitor c_frame_monitor( | 1521 RenderWidgetHostMouseEventMonitor c_frame_monitor( |
| 1493 c_node->current_frame_host()->GetRenderWidgetHost()); | 1522 c_node->current_frame_host()->GetRenderWidgetHost()); |
| 1494 RenderWidgetHostMouseEventMonitor d_frame_monitor( | 1523 RenderWidgetHostMouseEventMonitor d_frame_monitor( |
| 1495 d_node->current_frame_host()->GetRenderWidgetHost()); | 1524 d_node->current_frame_host()->GetRenderWidgetHost()); |
| 1496 | 1525 |
| 1526 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell()); |
| 1527 |
| 1528 // Get the view bounds of the child iframe, which should account for the |
| 1529 // relative offset of its direct parent within the root frame, for use in |
| 1530 // targeting the input event. |
| 1531 gfx::Rect a_bounds = rwhv_a->GetViewBounds(); |
| 1532 gfx::Rect b_bounds = rwhv_b->GetViewBounds(); |
| 1533 gfx::Rect d_bounds = rwhv_d->GetViewBounds(); |
| 1534 |
| 1497 gfx::Point point_in_a_frame(2, 2); | 1535 gfx::Point point_in_a_frame(2, 2); |
| 1498 gfx::Point point_in_b_frame(313, 147); | 1536 gfx::Point point_in_b_frame( |
| 1499 gfx::Point point_in_d_frame(471, 207); | 1537 gfx::ToCeiledInt((b_bounds.x() - a_bounds.x()) / scale_factor) + 25, |
| 1538 gfx::ToCeiledInt((b_bounds.y() - a_bounds.y()) / scale_factor) + 25); |
| 1539 gfx::Point point_in_d_frame( |
| 1540 gfx::ToCeiledInt((d_bounds.x() - a_bounds.x()) / scale_factor) + 25, |
| 1541 gfx::ToCeiledInt((d_bounds.y() - a_bounds.y()) / scale_factor) + 25); |
| 1500 | 1542 |
| 1501 blink::WebMouseEvent mouse_event(blink::WebInputEvent::MouseMove, | 1543 blink::WebMouseEvent mouse_event(blink::WebInputEvent::MouseMove, |
| 1502 blink::WebInputEvent::NoModifiers, | 1544 blink::WebInputEvent::NoModifiers, |
| 1503 blink::WebInputEvent::TimeStampForTesting); | 1545 blink::WebInputEvent::TimeStampForTesting); |
| 1504 mouse_event.x = point_in_a_frame.x(); | 1546 mouse_event.x = point_in_a_frame.x(); |
| 1505 mouse_event.y = point_in_a_frame.y(); | 1547 mouse_event.y = point_in_a_frame.y(); |
| 1506 | 1548 |
| 1507 // Send an initial MouseMove to the root view, which shouldn't affect the | 1549 // Send an initial MouseMove to the root view, which shouldn't affect the |
| 1508 // other renderers. | 1550 // other renderers. |
| 1509 web_contents()->GetInputEventRouter()->RouteMouseEvent(rwhv_a, &mouse_event, | 1551 web_contents()->GetInputEventRouter()->RouteMouseEvent(rwhv_a, &mouse_event, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1539 EXPECT_TRUE(b_frame_monitor.EventWasReceived()); | 1581 EXPECT_TRUE(b_frame_monitor.EventWasReceived()); |
| 1540 EXPECT_EQ(b_frame_monitor.event().type(), blink::WebInputEvent::MouseLeave); | 1582 EXPECT_EQ(b_frame_monitor.event().type(), blink::WebInputEvent::MouseLeave); |
| 1541 EXPECT_TRUE(c_frame_monitor.EventWasReceived()); | 1583 EXPECT_TRUE(c_frame_monitor.EventWasReceived()); |
| 1542 EXPECT_EQ(c_frame_monitor.event().type(), blink::WebInputEvent::MouseMove); | 1584 EXPECT_EQ(c_frame_monitor.event().type(), blink::WebInputEvent::MouseMove); |
| 1543 EXPECT_TRUE(d_frame_monitor.EventWasReceived()); | 1585 EXPECT_TRUE(d_frame_monitor.EventWasReceived()); |
| 1544 } | 1586 } |
| 1545 | 1587 |
| 1546 // Verify that mouse capture works on a RenderWidgetHostView level, so that | 1588 // Verify that mouse capture works on a RenderWidgetHostView level, so that |
| 1547 // dragging scroll bars and selecting text continues even when the mouse | 1589 // dragging scroll bars and selecting text continues even when the mouse |
| 1548 // cursor crosses over cross-process frame boundaries. | 1590 // cursor crosses over cross-process frame boundaries. |
| 1549 #if defined(OS_ANDROID) | 1591 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossProcessMouseCapture) { |
| 1550 // Browser process hit testing is not implemented on Android. | |
| 1551 // https://crbug.com/491334 | |
| 1552 #define MAYBE_CrossProcessMouseCapture DISABLED_CrossProcessMouseCapture | |
| 1553 #else | |
| 1554 #define MAYBE_CrossProcessMouseCapture CrossProcessMouseCapture | |
| 1555 #endif | |
| 1556 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 1557 MAYBE_CrossProcessMouseCapture) { | |
| 1558 GURL main_url(embedded_test_server()->GetURL( | 1592 GURL main_url(embedded_test_server()->GetURL( |
| 1559 "/frame_tree/page_with_positioned_frame.html")); | 1593 "/frame_tree/page_with_positioned_frame.html")); |
| 1560 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1594 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1561 | 1595 |
| 1562 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1596 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1563 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 1597 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1564 ASSERT_EQ(1U, root->child_count()); | 1598 ASSERT_EQ(1U, root->child_count()); |
| 1565 | 1599 |
| 1566 FrameTreeNode* child_node = root->child_at(0); | 1600 FrameTreeNode* child_node = root->child_at(0); |
| 1567 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); | 1601 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1580 | 1614 |
| 1581 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 1615 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 1582 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 1616 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 1583 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( | 1617 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( |
| 1584 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 1618 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 1585 | 1619 |
| 1586 SurfaceHitTestReadyNotifier notifier( | 1620 SurfaceHitTestReadyNotifier notifier( |
| 1587 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | 1621 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 1588 notifier.WaitForSurfaceReady(); | 1622 notifier.WaitForSurfaceReady(); |
| 1589 | 1623 |
| 1624 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell()); |
| 1625 |
| 1626 // Get the view bounds of the child iframe, which should account for the |
| 1627 // relative offset of its direct parent within the root frame, for use in |
| 1628 // targeting the input event. |
| 1629 gfx::Rect bounds = rwhv_child->GetViewBounds(); |
| 1630 int child_frame_target_x = |
| 1631 gfx::ToCeiledInt((bounds.x() - root_view->GetViewBounds().x()) / |
| 1632 scale_factor) + |
| 1633 5; |
| 1634 int child_frame_target_y = |
| 1635 gfx::ToCeiledInt((bounds.y() - root_view->GetViewBounds().y()) / |
| 1636 scale_factor) + |
| 1637 5; |
| 1638 |
| 1590 // Target MouseDown to child frame. | 1639 // Target MouseDown to child frame. |
| 1591 blink::WebMouseEvent mouse_event(blink::WebInputEvent::MouseDown, | 1640 blink::WebMouseEvent mouse_event(blink::WebInputEvent::MouseDown, |
| 1592 blink::WebInputEvent::NoModifiers, | 1641 blink::WebInputEvent::NoModifiers, |
| 1593 blink::WebInputEvent::TimeStampForTesting); | 1642 blink::WebInputEvent::TimeStampForTesting); |
| 1594 mouse_event.button = blink::WebPointerProperties::Button::Left; | 1643 mouse_event.button = blink::WebPointerProperties::Button::Left; |
| 1595 mouse_event.x = 75; | 1644 mouse_event.x = child_frame_target_x; |
| 1596 mouse_event.y = 75; | 1645 mouse_event.y = child_frame_target_y; |
| 1597 mouse_event.clickCount = 1; | 1646 mouse_event.clickCount = 1; |
| 1598 main_frame_monitor.ResetEventReceived(); | 1647 main_frame_monitor.ResetEventReceived(); |
| 1599 child_frame_monitor.ResetEventReceived(); | 1648 child_frame_monitor.ResetEventReceived(); |
| 1600 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); | 1649 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); |
| 1601 | 1650 |
| 1602 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); | 1651 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); |
| 1603 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); | 1652 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); |
| 1604 | 1653 |
| 1605 // Target MouseMove to main frame. This should still be routed to the | 1654 // Target MouseMove to main frame. This should still be routed to the |
| 1606 // child frame because it is now capturing mouse input. | 1655 // child frame because it is now capturing mouse input. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1618 mouse_event.x = 1; | 1667 mouse_event.x = 1; |
| 1619 mouse_event.y = 2; | 1668 mouse_event.y = 2; |
| 1620 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); | 1669 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); |
| 1621 | 1670 |
| 1622 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); | 1671 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); |
| 1623 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); | 1672 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); |
| 1624 | 1673 |
| 1625 // A MouseUp to the child frame should cancel the mouse capture. | 1674 // A MouseUp to the child frame should cancel the mouse capture. |
| 1626 mouse_event.setType(blink::WebInputEvent::MouseUp); | 1675 mouse_event.setType(blink::WebInputEvent::MouseUp); |
| 1627 mouse_event.setModifiers(blink::WebInputEvent::NoModifiers); | 1676 mouse_event.setModifiers(blink::WebInputEvent::NoModifiers); |
| 1628 mouse_event.x = 75; | 1677 mouse_event.x = child_frame_target_x; |
| 1629 mouse_event.y = 75; | 1678 mouse_event.y = child_frame_target_y; |
| 1630 main_frame_monitor.ResetEventReceived(); | 1679 main_frame_monitor.ResetEventReceived(); |
| 1631 child_frame_monitor.ResetEventReceived(); | 1680 child_frame_monitor.ResetEventReceived(); |
| 1632 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); | 1681 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); |
| 1633 | 1682 |
| 1634 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); | 1683 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); |
| 1635 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); | 1684 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); |
| 1636 | 1685 |
| 1637 // Subsequent MouseMove events targeted to the main frame should be routed | 1686 // Subsequent MouseMove events targeted to the main frame should be routed |
| 1638 // to that frame. | 1687 // to that frame. |
| 1639 mouse_event.setType(blink::WebInputEvent::MouseMove); | 1688 mouse_event.setType(blink::WebInputEvent::MouseMove); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1658 child_frame_monitor.ResetEventReceived(); | 1707 child_frame_monitor.ResetEventReceived(); |
| 1659 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); | 1708 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); |
| 1660 | 1709 |
| 1661 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); | 1710 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); |
| 1662 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); | 1711 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); |
| 1663 | 1712 |
| 1664 // Sending a MouseMove to the child frame should still result in the main | 1713 // Sending a MouseMove to the child frame should still result in the main |
| 1665 // frame receiving the event. | 1714 // frame receiving the event. |
| 1666 mouse_event.setType(blink::WebInputEvent::MouseMove); | 1715 mouse_event.setType(blink::WebInputEvent::MouseMove); |
| 1667 mouse_event.setModifiers(blink::WebInputEvent::LeftButtonDown); | 1716 mouse_event.setModifiers(blink::WebInputEvent::LeftButtonDown); |
| 1668 mouse_event.x = 75; | 1717 mouse_event.x = child_frame_target_x; |
| 1669 mouse_event.y = 75; | 1718 mouse_event.y = child_frame_target_y; |
| 1670 main_frame_monitor.ResetEventReceived(); | 1719 main_frame_monitor.ResetEventReceived(); |
| 1671 child_frame_monitor.ResetEventReceived(); | 1720 child_frame_monitor.ResetEventReceived(); |
| 1672 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); | 1721 router->RouteMouseEvent(root_view, &mouse_event, ui::LatencyInfo()); |
| 1673 | 1722 |
| 1674 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); | 1723 EXPECT_TRUE(main_frame_monitor.EventWasReceived()); |
| 1675 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); | 1724 EXPECT_FALSE(child_frame_monitor.EventWasReceived()); |
| 1676 } | 1725 } |
| 1677 | 1726 |
| 1678 // Tests OOPIF rendering by checking that the RWH of the iframe generates | 1727 // Tests OOPIF rendering by checking that the RWH of the iframe generates |
| 1679 // OnSwapCompositorFrame message. | 1728 // OnSwapCompositorFrame message. |
| (...skipping 4277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5957 notifier.WaitForSurfaceReady(); | 6006 notifier.WaitForSurfaceReady(); |
| 5958 | 6007 |
| 5959 // A WebContentsDelegate to listen for the ShowContextMenu message. | 6008 // A WebContentsDelegate to listen for the ShowContextMenu message. |
| 5960 ContextMenuObserverDelegate context_menu_delegate; | 6009 ContextMenuObserverDelegate context_menu_delegate; |
| 5961 shell->web_contents()->SetDelegate(&context_menu_delegate); | 6010 shell->web_contents()->SetDelegate(&context_menu_delegate); |
| 5962 | 6011 |
| 5963 RenderWidgetHostInputEventRouter* router = | 6012 RenderWidgetHostInputEventRouter* router = |
| 5964 static_cast<WebContentsImpl*>(shell->web_contents()) | 6013 static_cast<WebContentsImpl*>(shell->web_contents()) |
| 5965 ->GetInputEventRouter(); | 6014 ->GetInputEventRouter(); |
| 5966 | 6015 |
| 5967 gfx::Point point(75, 75); | 6016 float scale_factor = GetAdjustmentScaleFactorForAndroid(shell); |
| 6017 |
| 6018 gfx::Rect root_bounds = root_view->GetViewBounds(); |
| 6019 gfx::Rect bounds = rwhv_child->GetViewBounds(); |
| 6020 |
| 6021 gfx::Point point( |
| 6022 gfx::ToCeiledInt((bounds.x() - root_bounds.x()) / scale_factor) + 10, |
| 6023 gfx::ToCeiledInt((bounds.y() - root_bounds.y()) / scale_factor) + 10); |
| 5968 | 6024 |
| 5969 // Target right-click event to child frame. | 6025 // Target right-click event to child frame. |
| 5970 blink::WebMouseEvent click_event(blink::WebInputEvent::MouseDown, | 6026 blink::WebMouseEvent click_event(blink::WebInputEvent::MouseDown, |
| 5971 blink::WebInputEvent::NoModifiers, | 6027 blink::WebInputEvent::NoModifiers, |
| 5972 blink::WebInputEvent::TimeStampForTesting); | 6028 blink::WebInputEvent::TimeStampForTesting); |
| 5973 click_event.button = blink::WebPointerProperties::Button::Right; | 6029 click_event.button = blink::WebPointerProperties::Button::Right; |
| 5974 click_event.x = point.x(); | 6030 click_event.x = point.x(); |
| 5975 click_event.y = point.y(); | 6031 click_event.y = point.y(); |
| 5976 click_event.clickCount = 1; | 6032 click_event.clickCount = 1; |
| 5977 router->RouteMouseEvent(root_view, &click_event, ui::LatencyInfo()); | 6033 router->RouteMouseEvent(root_view, &click_event, ui::LatencyInfo()); |
| 5978 | 6034 |
| 5979 // We also need a MouseUp event, needed by Windows. | 6035 // We also need a MouseUp event, needed by Windows. |
| 5980 click_event.setType(blink::WebInputEvent::MouseUp); | 6036 click_event.setType(blink::WebInputEvent::MouseUp); |
| 5981 click_event.x = point.x(); | 6037 click_event.x = point.x(); |
| 5982 click_event.y = point.y(); | 6038 click_event.y = point.y(); |
| 5983 router->RouteMouseEvent(root_view, &click_event, ui::LatencyInfo()); | 6039 router->RouteMouseEvent(root_view, &click_event, ui::LatencyInfo()); |
| 5984 | 6040 |
| 5985 context_menu_delegate.Wait(); | 6041 context_menu_delegate.Wait(); |
| 5986 | 6042 |
| 5987 ContextMenuParams params = context_menu_delegate.getParams(); | 6043 ContextMenuParams params = context_menu_delegate.getParams(); |
| 5988 | 6044 |
| 5989 EXPECT_EQ(point.x(), params.x); | 6045 EXPECT_EQ(point.x(), params.x); |
| 5990 EXPECT_EQ(point.y(), params.y); | 6046 EXPECT_EQ(point.y(), params.y); |
| 5991 } | 6047 } |
| 5992 | 6048 |
| 5993 // Test that a mouse right-click to an out-of-process iframe causes a context | 6049 // Test that a mouse right-click to an out-of-process iframe causes a context |
| 5994 // menu to be generated with the correct screen position. | 6050 // menu to be generated with the correct screen position. |
| 5995 #if defined(OS_ANDROID) | 6051 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CreateContextMenuTest) { |
| 5996 // Browser process hit testing is not implemented on Android. | |
| 5997 // https://crbug.com/491334 | |
| 5998 #define MAYBE_CreateContextMenuTest DISABLED_CreateContextMenuTest | |
| 5999 #else | |
| 6000 #define MAYBE_CreateContextMenuTest CreateContextMenuTest | |
| 6001 #endif | |
| 6002 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CreateContextMenuTest) { | |
| 6003 CreateContextMenuTestHelper(shell(), embedded_test_server()); | 6052 CreateContextMenuTestHelper(shell(), embedded_test_server()); |
| 6004 } | 6053 } |
| 6005 | 6054 |
| 6006 // Test that a mouse right-click to an out-of-process iframe causes a context | 6055 // Test that a mouse right-click to an out-of-process iframe causes a context |
| 6007 // menu to be generated with the correct screen position on a screen with | 6056 // menu to be generated with the correct screen position on a screen with |
| 6008 // non-default scale factor. | 6057 // non-default scale factor. |
| 6009 #if defined(OS_ANDROID) || defined(OS_WIN) | 6058 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 6010 // Browser process hit testing is not implemented on Android. | 6059 // High DPI tests don't work properly on Android, which has fixed scale factor. |
| 6011 // https://crbug.com/491334 | |
| 6012 // Windows is disabled because of https://crbug.com/545547. | 6060 // Windows is disabled because of https://crbug.com/545547. |
| 6013 #define MAYBE_HighDPICreateContextMenuTest DISABLED_HighDPICreateContextMenuTest | 6061 #define MAYBE_HighDPICreateContextMenuTest DISABLED_HighDPICreateContextMenuTest |
| 6014 #else | 6062 #else |
| 6015 #define MAYBE_HighDPICreateContextMenuTest HighDPICreateContextMenuTest | 6063 #define MAYBE_HighDPICreateContextMenuTest HighDPICreateContextMenuTest |
| 6016 #endif | 6064 #endif |
| 6017 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, | 6065 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, |
| 6018 MAYBE_HighDPICreateContextMenuTest) { | 6066 MAYBE_HighDPICreateContextMenuTest) { |
| 6019 CreateContextMenuTestHelper(shell(), embedded_test_server()); | 6067 CreateContextMenuTestHelper(shell(), embedded_test_server()); |
| 6020 } | 6068 } |
| 6021 | 6069 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6078 } | 6126 } |
| 6079 | 6127 |
| 6080 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | 6128 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
| 6081 gfx::Rect initial_rect_; | 6129 gfx::Rect initial_rect_; |
| 6082 | 6130 |
| 6083 DISALLOW_COPY_AND_ASSIGN(ShowWidgetMessageFilter); | 6131 DISALLOW_COPY_AND_ASSIGN(ShowWidgetMessageFilter); |
| 6084 }; | 6132 }; |
| 6085 | 6133 |
| 6086 // Test that clicking a select element in an out-of-process iframe creates | 6134 // Test that clicking a select element in an out-of-process iframe creates |
| 6087 // a popup menu in the correct position. | 6135 // a popup menu in the correct position. |
| 6088 #if defined(OS_ANDROID) | 6136 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, PopupMenuTest) { |
| 6089 // Surface-based hit testing and coordinate translation is not yet available | |
| 6090 // on Android. | |
| 6091 #define MAYBE_PopupMenuTest DISABLED_PopupMenuTest | |
| 6092 #else | |
| 6093 #define MAYBE_PopupMenuTest PopupMenuTest | |
| 6094 #endif | |
| 6095 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_PopupMenuTest) { | |
| 6096 GURL main_url( | 6137 GURL main_url( |
| 6097 embedded_test_server()->GetURL("/cross_site_iframe_factory.html?a(a)")); | 6138 embedded_test_server()->GetURL("/cross_site_iframe_factory.html?a(a)")); |
| 6098 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 6139 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 6099 | 6140 |
| 6100 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | 6141 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6101 | 6142 |
| 6102 #if !defined(OS_MACOSX) | 6143 #if !defined(OS_MACOSX) && !defined(OS_ANDROID) |
| 6103 // Unused variable on Mac. | 6144 // Unused variable on Mac and Android. |
| 6104 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( | 6145 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( |
| 6105 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 6146 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 6106 #endif | 6147 #endif |
| 6107 web_contents()->SendScreenRects(); | 6148 web_contents()->SendScreenRects(); |
| 6108 | 6149 |
| 6109 content::TestNavigationObserver navigation_observer(shell()->web_contents()); | 6150 content::TestNavigationObserver navigation_observer(shell()->web_contents()); |
| 6110 FrameTreeNode* child_node = root->child_at(0); | 6151 FrameTreeNode* child_node = root->child_at(0); |
| 6111 GURL site_url(embedded_test_server()->GetURL( | 6152 GURL site_url(embedded_test_server()->GetURL( |
| 6112 "baz.com", "/site_isolation/page-with-select.html")); | 6153 "baz.com", "/site_isolation/page-with-select.html")); |
| 6113 NavigateFrameToURL(child_node, site_url); | 6154 NavigateFrameToURL(child_node, site_url); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 6132 click_event.clickCount = 1; | 6173 click_event.clickCount = 1; |
| 6133 rwhv_child->ProcessMouseEvent(click_event, ui::LatencyInfo()); | 6174 rwhv_child->ProcessMouseEvent(click_event, ui::LatencyInfo()); |
| 6134 | 6175 |
| 6135 // Dismiss the popup. | 6176 // Dismiss the popup. |
| 6136 click_event.x = 1; | 6177 click_event.x = 1; |
| 6137 click_event.y = 1; | 6178 click_event.y = 1; |
| 6138 rwhv_child->ProcessMouseEvent(click_event, ui::LatencyInfo()); | 6179 rwhv_child->ProcessMouseEvent(click_event, ui::LatencyInfo()); |
| 6139 | 6180 |
| 6140 filter->Wait(); | 6181 filter->Wait(); |
| 6141 gfx::Rect popup_rect = filter->last_initial_rect(); | 6182 gfx::Rect popup_rect = filter->last_initial_rect(); |
| 6142 #if defined(OS_MACOSX) | 6183 #if defined(OS_MACOSX) || defined(OS_ANDROID) |
| 6143 // On Mac we receive the coordinates before they are transformed, so they | 6184 // On Mac and Android we receive the coordinates before they are transformed, |
| 6144 // are still relative to the out-of-process iframe origin. | 6185 // so they are still relative to the out-of-process iframe origin. |
| 6145 EXPECT_EQ(popup_rect.x(), 9); | 6186 EXPECT_EQ(popup_rect.x(), 9); |
| 6146 EXPECT_EQ(popup_rect.y(), 9); | 6187 EXPECT_EQ(popup_rect.y(), 9); |
| 6147 #else | 6188 #else |
| 6148 EXPECT_EQ(popup_rect.x() - rwhv_root->GetViewBounds().x(), 354); | 6189 EXPECT_EQ(popup_rect.x() - rwhv_root->GetViewBounds().x(), 354); |
| 6149 EXPECT_EQ(popup_rect.y() - rwhv_root->GetViewBounds().y(), 94); | 6190 EXPECT_EQ(popup_rect.y() - rwhv_root->GetViewBounds().y(), 94); |
| 6150 #endif | 6191 #endif |
| 6151 } | 6192 } |
| 6152 | 6193 |
| 6153 // Test that clicking a select element in a nested out-of-process iframe creates | 6194 // Test that clicking a select element in a nested out-of-process iframe creates |
| 6154 // a popup menu in the correct position, even if the top-level page repositions | 6195 // a popup menu in the correct position, even if the top-level page repositions |
| (...skipping 2831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8986 EXPECT_EQ(srcdoc_url, child->current_url()); | 9027 EXPECT_EQ(srcdoc_url, child->current_url()); |
| 8987 EXPECT_EQ(root->current_frame_host()->GetSiteInstance(), | 9028 EXPECT_EQ(root->current_frame_host()->GetSiteInstance(), |
| 8988 child->current_frame_host()->GetSiteInstance()); | 9029 child->current_frame_host()->GetSiteInstance()); |
| 8989 EXPECT_EQ(root->current_frame_host()->GetProcess(), | 9030 EXPECT_EQ(root->current_frame_host()->GetProcess(), |
| 8990 child->current_frame_host()->GetProcess()); | 9031 child->current_frame_host()->GetProcess()); |
| 8991 } | 9032 } |
| 8992 | 9033 |
| 8993 // Test that MouseDown and MouseUp to the same coordinates do not result in | 9034 // Test that MouseDown and MouseUp to the same coordinates do not result in |
| 8994 // different coordinates after routing. See bug https://crbug.com/670253. | 9035 // different coordinates after routing. See bug https://crbug.com/670253. |
| 8995 #if defined(OS_ANDROID) | 9036 #if defined(OS_ANDROID) |
| 8996 // Browser process hit testing is not implemented on Android. | 9037 // Android uses fixed scale factor, which makes this test unnecessary. |
| 8997 // https://crbug.com/491334 | |
| 8998 #define MAYBE_MouseClickWithNonIntegerScaleFactor \ | 9038 #define MAYBE_MouseClickWithNonIntegerScaleFactor \ |
| 8999 DISABLED_MouseClickWithNonIntegerScaleFactor | 9039 DISABLED_MouseClickWithNonIntegerScaleFactor |
| 9000 #else | 9040 #else |
| 9001 #define MAYBE_MouseClickWithNonIntegerScaleFactor \ | 9041 #define MAYBE_MouseClickWithNonIntegerScaleFactor \ |
| 9002 MouseClickWithNonIntegerScaleFactor | 9042 MouseClickWithNonIntegerScaleFactor |
| 9003 #endif | 9043 #endif |
| 9004 IN_PROC_BROWSER_TEST_F(SitePerProcessNonIntegerScaleFactorBrowserTest, | 9044 IN_PROC_BROWSER_TEST_F(SitePerProcessNonIntegerScaleFactorBrowserTest, |
| 9005 MAYBE_MouseClickWithNonIntegerScaleFactor) { | 9045 MAYBE_MouseClickWithNonIntegerScaleFactor) { |
| 9006 GURL initial_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 9046 GURL initial_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 9007 EXPECT_TRUE(NavigateToURL(shell(), initial_url)); | 9047 EXPECT_TRUE(NavigateToURL(shell(), initial_url)); |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9576 | 9616 |
| 9577 // Try the same navigation, but use the browser-initiated path. | 9617 // Try the same navigation, but use the browser-initiated path. |
| 9578 NavigateFrameToURL(root->child_at(0), frame_url); | 9618 NavigateFrameToURL(root->child_at(0), frame_url); |
| 9579 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); | 9619 EXPECT_FALSE(root->child_at(0)->render_manager()->pending_frame_host()); |
| 9580 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); | 9620 EXPECT_EQ(root->child_at(0)->current_url(), redirected_url); |
| 9581 EXPECT_EQ(b_site_instance, | 9621 EXPECT_EQ(b_site_instance, |
| 9582 root->child_at(0)->current_frame_host()->GetSiteInstance()); | 9622 root->child_at(0)->current_frame_host()->GetSiteInstance()); |
| 9583 } | 9623 } |
| 9584 | 9624 |
| 9585 } // namespace content | 9625 } // namespace content |
| OLD | NEW |