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 5381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5392 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); | 5392 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); |
5393 InputRouterImpl* child_input_router = | 5393 InputRouterImpl* child_input_router = |
5394 static_cast<InputRouterImpl*>(child_render_widget_host->input_router()); | 5394 static_cast<InputRouterImpl*>(child_render_widget_host->input_router()); |
5395 EXPECT_EQ(TOUCH_ACTION_AUTO, | 5395 EXPECT_EQ(TOUCH_ACTION_AUTO, |
5396 child_input_router->touch_action_filter_.allowed_touch_action()); | 5396 child_input_router->touch_action_filter_.allowed_touch_action()); |
5397 | 5397 |
5398 // Simulate touch event to sub-frame. | 5398 // Simulate touch event to sub-frame. |
5399 gfx::Point child_center(150, 150); | 5399 gfx::Point child_center(150, 150); |
5400 auto* rwhv = static_cast<RenderWidgetHostViewAura*>( | 5400 auto* rwhv = static_cast<RenderWidgetHostViewAura*>( |
5401 contents->GetRenderWidgetHostView()); | 5401 contents->GetRenderWidgetHostView()); |
| 5402 |
| 5403 // Wait until renderer's compositor thread is synced. |
| 5404 { |
| 5405 MainThreadFrameObserver observer(child_render_widget_host); |
| 5406 observer.Wait(); |
| 5407 } |
| 5408 |
5402 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0, | 5409 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0, |
5403 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); | 5410 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); |
5404 rwhv->OnTouchEvent(&touch_event); | 5411 rwhv->OnTouchEvent(&touch_event); |
| 5412 { |
| 5413 MainThreadFrameObserver observer(child_render_widget_host); |
| 5414 observer.Wait(); |
| 5415 } |
5405 | 5416 |
5406 // Verify touch handler in subframe was invoked | 5417 // Verify touch handler in subframe was invoked. |
5407 std::string result; | 5418 std::string result; |
5408 EXPECT_TRUE(ExecuteScriptAndExtractString( | 5419 EXPECT_TRUE(ExecuteScriptAndExtractString( |
5409 root->child_at(0), | 5420 root->child_at(0), |
5410 "window.domAutomationController.send(getLastTouchEvent());", &result)); | 5421 "window.domAutomationController.send(getLastTouchEvent());", &result)); |
5411 EXPECT_EQ("touchstart", result); | 5422 EXPECT_EQ("touchstart", result); |
5412 | 5423 |
5413 // Verify the presence of the touch handler in the child frame correctly | 5424 // Verify the presence of the touch handler in the child frame correctly |
5414 // propagates touch-action:none information back to the child's input router. | 5425 // propagates touch-action:none information back to the child's input router. |
5415 EXPECT_EQ(TOUCH_ACTION_NONE, | 5426 EXPECT_EQ(TOUCH_ACTION_NONE, |
5416 child_input_router->touch_action_filter_.allowed_touch_action()); | 5427 child_input_router->touch_action_filter_.allowed_touch_action()); |
5417 } | 5428 } |
5418 | 5429 |
| 5430 // This test verifies that the test in |
| 5431 // SitePerProcessBrowserTest.SubframeTouchEventRouting also works properly for |
| 5432 // the main frame. Prior to the CL in which this test is introduced, use of |
| 5433 // MainThreadFrameObserver in SubframeTouchEventRouting was not necessary since |
| 5434 // the touch events were handled on the main thread. Now they are handled on the |
| 5435 // compositor thread, hence the need to synchronize. |
| 5436 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5437 MainframeTouchEventRouting) { |
| 5438 GURL main_url(embedded_test_server()->GetURL( |
| 5439 "/page_with_touch_handler.html")); |
| 5440 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 5441 |
| 5442 WebContentsImpl* contents = web_contents(); |
| 5443 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 5444 |
| 5445 // Synchronize with the renderers to guarantee that the |
| 5446 // surface information required for event hit testing is ready. |
| 5447 auto* rwhv = static_cast<RenderWidgetHostViewAura*>( |
| 5448 contents->GetRenderWidgetHostView()); |
| 5449 |
| 5450 // There's no intrinsic reason the following values can't be equal, but they |
| 5451 // aren't at present, and if they become the same this test will need to be |
| 5452 // updated to accommodate. |
| 5453 EXPECT_NE(TOUCH_ACTION_AUTO, TOUCH_ACTION_NONE); |
| 5454 |
| 5455 // Verify the main frame's input router is initially set for |
| 5456 // TOUCH_ACTION_AUTO. The |
| 5457 // TouchStart event will trigger TOUCH_ACTION_NONE being sent back to the |
| 5458 // browser. |
| 5459 RenderWidgetHostImpl* render_widget_host = |
| 5460 root->current_frame_host()->GetRenderWidgetHost(); |
| 5461 InputRouterImpl* input_router = |
| 5462 static_cast<InputRouterImpl*>(render_widget_host->input_router()); |
| 5463 EXPECT_EQ(TOUCH_ACTION_AUTO, |
| 5464 input_router->touch_action_filter_.allowed_touch_action()); |
| 5465 |
| 5466 // Simulate touch event to sub-frame. |
| 5467 gfx::Point frame_center(150, 150); |
| 5468 |
| 5469 // Wait until renderer's compositor thread is synced. |
| 5470 { |
| 5471 auto observer = |
| 5472 base::MakeUnique<MainThreadFrameObserver>(render_widget_host); |
| 5473 observer->Wait(); |
| 5474 } |
| 5475 |
| 5476 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, frame_center, 0, 0, |
| 5477 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); |
| 5478 rwhv->OnTouchEvent(&touch_event); |
| 5479 { |
| 5480 auto observer = |
| 5481 base::MakeUnique<MainThreadFrameObserver>(render_widget_host); |
| 5482 observer->Wait(); |
| 5483 } |
| 5484 |
| 5485 // Verify touch handler in subframe was invoked. |
| 5486 std::string result; |
| 5487 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 5488 root, "window.domAutomationController.send(getLastTouchEvent());", |
| 5489 &result)); |
| 5490 EXPECT_EQ("touchstart", result); |
| 5491 |
| 5492 // Verify the presence of the touch handler in the child frame correctly |
| 5493 // propagates touch-action:none information back to the child's input router. |
| 5494 EXPECT_EQ(TOUCH_ACTION_NONE, |
| 5495 input_router->touch_action_filter_.allowed_touch_action()); |
| 5496 } |
| 5497 |
5419 namespace { | 5498 namespace { |
5420 | 5499 |
5421 // Declared here to be close to the SubframeGestureEventRouting test. | 5500 // Declared here to be close to the SubframeGestureEventRouting test. |
5422 void OnSyntheticGestureCompleted(scoped_refptr<MessageLoopRunner> runner, | 5501 void OnSyntheticGestureCompleted(scoped_refptr<MessageLoopRunner> runner, |
5423 SyntheticGesture::Result result) { | 5502 SyntheticGesture::Result result) { |
5424 EXPECT_EQ(SyntheticGesture::GESTURE_FINISHED, result); | 5503 EXPECT_EQ(SyntheticGesture::GESTURE_FINISHED, result); |
5425 runner->Quit(); | 5504 runner->Quit(); |
5426 } | 5505 } |
5427 | 5506 |
5428 } // namespace anonymous | 5507 } // namespace anonymous |
(...skipping 3663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9092 shell(), embedded_test_server()->GetURL("b.com", "/title3.html"))); | 9171 shell(), embedded_test_server()->GetURL("b.com", "/title3.html"))); |
9093 | 9172 |
9094 // Pretend that a.com just requested a context menu. This used to cause a | 9173 // Pretend that a.com just requested a context menu. This used to cause a |
9095 // because the RenderWidgetHostView is destroyed when the frame is swapped and | 9174 // because the RenderWidgetHostView is destroyed when the frame is swapped and |
9096 // added to pending delete list. | 9175 // added to pending delete list. |
9097 rfh->OnMessageReceived( | 9176 rfh->OnMessageReceived( |
9098 FrameHostMsg_ContextMenu(rfh->GetRoutingID(), ContextMenuParams())); | 9177 FrameHostMsg_ContextMenu(rfh->GetRoutingID(), ContextMenuParams())); |
9099 } | 9178 } |
9100 | 9179 |
9101 } // namespace content | 9180 } // namespace content |
OLD | NEW |