OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <queue> | 5 #include <queue> |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/process/process.h" | 9 #include "base/process/process.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "components/content_settings/core/browser/host_content_settings_map.h" | 31 #include "components/content_settings/core/browser/host_content_settings_map.h" |
32 #include "components/guest_view/browser/guest_view_manager.h" | 32 #include "components/guest_view/browser/guest_view_manager.h" |
33 #include "components/guest_view/browser/guest_view_manager_delegate.h" | 33 #include "components/guest_view/browser/guest_view_manager_delegate.h" |
34 #include "components/guest_view/browser/guest_view_manager_factory.h" | 34 #include "components/guest_view/browser/guest_view_manager_factory.h" |
35 #include "components/guest_view/browser/test_guest_view_manager.h" | 35 #include "components/guest_view/browser/test_guest_view_manager.h" |
36 #include "content/public/browser/gpu_data_manager.h" | 36 #include "content/public/browser/gpu_data_manager.h" |
37 #include "content/public/browser/interstitial_page.h" | 37 #include "content/public/browser/interstitial_page.h" |
38 #include "content/public/browser/interstitial_page_delegate.h" | 38 #include "content/public/browser/interstitial_page_delegate.h" |
39 #include "content/public/browser/notification_service.h" | 39 #include "content/public/browser/notification_service.h" |
40 #include "content/public/browser/render_process_host.h" | 40 #include "content/public/browser/render_process_host.h" |
| 41 #include "content/public/browser/render_widget_host_view.h" |
41 #include "content/public/browser/web_contents_delegate.h" | 42 #include "content/public/browser/web_contents_delegate.h" |
42 #include "content/public/common/child_process_host.h" | 43 #include "content/public/common/child_process_host.h" |
43 #include "content/public/common/content_switches.h" | 44 #include "content/public/common/content_switches.h" |
44 #include "content/public/test/browser_test_utils.h" | 45 #include "content/public/test/browser_test_utils.h" |
45 #include "content/public/test/fake_speech_recognition_manager.h" | 46 #include "content/public/test/fake_speech_recognition_manager.h" |
46 #include "content/public/test/test_renderer_host.h" | 47 #include "content/public/test/test_renderer_host.h" |
47 #include "extensions/browser/api/declarative/rules_registry.h" | 48 #include "extensions/browser/api/declarative/rules_registry.h" |
48 #include "extensions/browser/api/declarative/rules_registry_service.h" | 49 #include "extensions/browser/api/declarative/rules_registry_service.h" |
49 #include "extensions/browser/api/declarative/test_rules_registry.h" | 50 #include "extensions/browser/api/declarative/test_rules_registry.h" |
50 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" | 51 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" |
51 #include "extensions/browser/api/extensions_api_client.h" | 52 #include "extensions/browser/api/extensions_api_client.h" |
52 #include "extensions/browser/app_window/native_app_window.h" | 53 #include "extensions/browser/app_window/native_app_window.h" |
53 #include "extensions/browser/guest_view/web_view/web_view_guest.h" | 54 #include "extensions/browser/guest_view/web_view/web_view_guest.h" |
54 #include "extensions/common/extension.h" | 55 #include "extensions/common/extension.h" |
55 #include "extensions/common/extensions_client.h" | 56 #include "extensions/common/extensions_client.h" |
56 #include "extensions/test/extension_test_message_listener.h" | 57 #include "extensions/test/extension_test_message_listener.h" |
57 #include "media/base/media_switches.h" | 58 #include "media/base/media_switches.h" |
58 #include "net/test/embedded_test_server/embedded_test_server.h" | 59 #include "net/test/embedded_test_server/embedded_test_server.h" |
59 #include "net/test/embedded_test_server/http_request.h" | 60 #include "net/test/embedded_test_server/http_request.h" |
60 #include "net/test/embedded_test_server/http_response.h" | 61 #include "net/test/embedded_test_server/http_response.h" |
61 #include "ui/aura/window.h" | 62 #include "ui/aura/window.h" |
62 #include "ui/base/l10n/l10n_util.h" | 63 #include "ui/base/l10n/l10n_util.h" |
63 #include "ui/compositor/compositor.h" | 64 #include "ui/compositor/compositor.h" |
64 #include "ui/compositor/compositor_observer.h" | 65 #include "ui/compositor/compositor_observer.h" |
65 #include "ui/events/event_switches.h" | 66 #include "ui/events/event_switches.h" |
| 67 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" |
| 68 #include "ui/events/test/event_generator.h" |
66 #include "ui/gfx/switches.h" | 69 #include "ui/gfx/switches.h" |
67 #include "ui/gl/gl_switches.h" | 70 #include "ui/gl/gl_switches.h" |
68 #include "ui/views/view.h" | 71 #include "ui/views/view.h" |
69 #include "ui/views/widget/widget.h" | 72 #include "ui/views/widget/widget.h" |
70 | 73 |
71 #if defined(ENABLE_PLUGINS) | 74 #if defined(ENABLE_PLUGINS) |
72 #include "content/public/browser/plugin_service.h" | 75 #include "content/public/browser/plugin_service.h" |
73 #include "content/public/common/webplugininfo.h" | 76 #include "content/public/common/webplugininfo.h" |
74 #include "content/public/test/ppapi_test_utils.h" | 77 #include "content/public/test/ppapi_test_utils.h" |
75 #endif | 78 #endif |
(...skipping 2440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2516 "web_view/shim", NEEDS_TEST_SERVER); | 2519 "web_view/shim", NEEDS_TEST_SERVER); |
2517 } | 2520 } |
2518 | 2521 |
2519 // Tests that a WebView accessible resource can actually be loaded from a | 2522 // Tests that a WebView accessible resource can actually be loaded from a |
2520 // webpage in a WebView. | 2523 // webpage in a WebView. |
2521 IN_PROC_BROWSER_TEST_F(WebViewTest, LoadWebviewAccessibleResource) { | 2524 IN_PROC_BROWSER_TEST_F(WebViewTest, LoadWebviewAccessibleResource) { |
2522 TestHelper("testLoadWebviewAccessibleResource", | 2525 TestHelper("testLoadWebviewAccessibleResource", |
2523 "web_view/load_webview_accessible_resource", NEEDS_TEST_SERVER); | 2526 "web_view/load_webview_accessible_resource", NEEDS_TEST_SERVER); |
2524 } | 2527 } |
2525 | 2528 |
| 2529 class WebViewTouchTest : public WebViewTest { |
| 2530 protected: |
| 2531 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 2532 command_line->AppendSwitchASCII(switches::kTouchEvents, |
| 2533 switches::kTouchEventsEnabled); |
| 2534 |
| 2535 WebViewTest::SetUpCommandLine(command_line); |
| 2536 } |
| 2537 }; |
| 2538 |
| 2539 namespace { |
| 2540 |
| 2541 class ScrollWaiter { |
| 2542 public: |
| 2543 explicit ScrollWaiter(content::RenderWidgetHostView* host_view) |
| 2544 : host_view_(host_view), |
| 2545 current_offset_(host_view_->GetLastScrollOffset()) {} |
| 2546 ~ScrollWaiter() {} |
| 2547 |
| 2548 void WaitForScrollChange() { |
| 2549 while (current_offset_ == host_view_->GetLastScrollOffset()) |
| 2550 base::MessageLoop::current()->RunUntilIdle(); |
| 2551 } |
| 2552 |
| 2553 private: |
| 2554 content::RenderWidgetHostView* host_view_; |
| 2555 gfx::Vector2dF current_offset_; |
| 2556 }; |
| 2557 |
| 2558 } // namespace |
| 2559 |
| 2560 // Tests that scrolls bubble from guest to embedder. |
| 2561 IN_PROC_BROWSER_TEST_F(WebViewTest, TestGuestWheelScrollsBubble) { |
| 2562 LoadAppWithGuest("web_view/scrollable_embedder_and_guest"); |
| 2563 |
| 2564 content::WebContents* embedder_contents = GetEmbedderWebContents(); |
| 2565 |
| 2566 std::vector<content::WebContents*> guest_web_contents_list; |
| 2567 GetGuestViewManager()->WaitForNumGuestsCreated(1u); |
| 2568 GetGuestViewManager()->GetGuestWebContentsList(&guest_web_contents_list); |
| 2569 ASSERT_EQ(1u, guest_web_contents_list.size()); |
| 2570 |
| 2571 content::WebContents* guest_contents = guest_web_contents_list[0]; |
| 2572 |
| 2573 |
| 2574 // Send scroll gesture to embedder & verify. |
| 2575 content::RenderWidgetHostView* embedder_host_view = |
| 2576 embedder_contents->GetRenderWidgetHostView(); |
| 2577 EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
| 2578 |
| 2579 float scroll_magnitude = 15.f; |
| 2580 |
| 2581 { |
| 2582 gfx::Point embedder_scroll_start(200, 40 + scroll_magnitude); |
| 2583 gfx::Point embedder_scroll_end(200, 40); |
| 2584 gfx::Vector2dF expected_offset(0.f, scroll_magnitude); |
| 2585 |
| 2586 ScrollWaiter waiter(embedder_host_view); |
| 2587 |
| 2588 ui::test::EventGenerator generator( |
| 2589 embedder_contents->GetTopLevelNativeWindow(), embedder_scroll_start); |
| 2590 generator.MoveMouseToInHost(embedder_scroll_start); |
| 2591 generator.MoveMouseWheel(0, -scroll_magnitude); |
| 2592 waiter.WaitForScrollChange(); |
| 2593 EXPECT_EQ(expected_offset, embedder_host_view->GetLastScrollOffset()); |
| 2594 } |
| 2595 |
| 2596 content::RenderWidgetHostView* guest_host_view = |
| 2597 guest_contents->GetRenderWidgetHostView(); |
| 2598 EXPECT_EQ(gfx::Vector2dF(), guest_host_view->GetLastScrollOffset()); |
| 2599 |
| 2600 // Send scroll gesture to guest and verify embedder scrolls. |
| 2601 // Perform a scroll gesture of the same magnitude, but in the opposite |
| 2602 // direction and centered over the GuestView this time. |
| 2603 { |
| 2604 gfx::Point guest_scroll_start(200, 120); |
| 2605 gfx::Point guest_scroll_end(200, 120 + scroll_magnitude); |
| 2606 ScrollWaiter waiter(embedder_host_view); |
| 2607 |
| 2608 ui::test::EventGenerator generator( |
| 2609 embedder_contents->GetTopLevelNativeWindow(), guest_scroll_start); |
| 2610 generator.MoveMouseToInHost(guest_scroll_start); |
| 2611 generator.MoveMouseWheel(0, scroll_magnitude); |
| 2612 |
| 2613 waiter.WaitForScrollChange(); |
| 2614 EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
| 2615 } |
| 2616 } |
| 2617 |
| 2618 IN_PROC_BROWSER_TEST_F(WebViewTouchTest, TestGuestGestureScrollsBubble) { |
| 2619 LoadAppWithGuest("web_view/scrollable_embedder_and_guest"); |
| 2620 |
| 2621 content::WebContents* embedder_contents = GetEmbedderWebContents(); |
| 2622 |
| 2623 std::vector<content::WebContents*> guest_web_contents_list; |
| 2624 GetGuestViewManager()->WaitForNumGuestsCreated(1u); |
| 2625 GetGuestViewManager()->GetGuestWebContentsList(&guest_web_contents_list); |
| 2626 ASSERT_EQ(1u, guest_web_contents_list.size()); |
| 2627 |
| 2628 content::WebContents* guest_contents = guest_web_contents_list[0]; |
| 2629 |
| 2630 // Send scroll gesture to embedder & verify. |
| 2631 content::RenderWidgetHostView* embedder_host_view = |
| 2632 embedder_contents->GetRenderWidgetHostView(); |
| 2633 EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
| 2634 |
| 2635 float touch_slop = ui::GetGestureProviderConfig( |
| 2636 ui::GestureProviderConfigType::CURRENT_PLATFORM) |
| 2637 .gesture_detector_config.touch_slop; |
| 2638 float scroll_magnitude = 15.f; |
| 2639 float gesture_distance = scroll_magnitude + touch_slop; |
| 2640 |
| 2641 { |
| 2642 gfx::Point embedder_scroll_start(200, 40 + gesture_distance); |
| 2643 gfx::Point embedder_scroll_end(200, 40); |
| 2644 gfx::Vector2dF expected_offset(0.f, scroll_magnitude); |
| 2645 |
| 2646 ScrollWaiter waiter(embedder_host_view); |
| 2647 |
| 2648 ui::test::EventGenerator generator( |
| 2649 embedder_contents->GetTopLevelNativeWindow(), embedder_scroll_start); |
| 2650 generator.GestureScrollSequence(embedder_scroll_start, embedder_scroll_end, |
| 2651 base::TimeDelta::FromMilliseconds(100), 1); |
| 2652 waiter.WaitForScrollChange(); |
| 2653 EXPECT_EQ(expected_offset, embedder_host_view->GetLastScrollOffset()); |
| 2654 } |
| 2655 |
| 2656 content::RenderWidgetHostView* guest_host_view = |
| 2657 guest_contents->GetRenderWidgetHostView(); |
| 2658 EXPECT_EQ(gfx::Vector2dF(), guest_host_view->GetLastScrollOffset()); |
| 2659 |
| 2660 // Send scroll gesture to guest and verify embedder scrolls. |
| 2661 // Perform a scroll gesture of the same magnitude, but in the opposite |
| 2662 // direction and centered over the GuestView this time. |
| 2663 { |
| 2664 gfx::Point guest_scroll_start(200, 120); |
| 2665 gfx::Point guest_scroll_end(200, 120 + gesture_distance); |
| 2666 ScrollWaiter waiter(embedder_host_view); |
| 2667 |
| 2668 ui::test::EventGenerator generator( |
| 2669 embedder_contents->GetTopLevelNativeWindow(), guest_scroll_start); |
| 2670 generator.GestureScrollSequence(guest_scroll_start, guest_scroll_end, |
| 2671 base::TimeDelta::FromMilliseconds(100), 1); |
| 2672 |
| 2673 waiter.WaitForScrollChange(); |
| 2674 EXPECT_EQ(gfx::Vector2dF(), embedder_host_view->GetLastScrollOffset()); |
| 2675 } |
| 2676 } |
| 2677 |
2526 #if defined(USE_AURA) | 2678 #if defined(USE_AURA) |
2527 // TODO(wjmaclean): when WebViewTest is re-enabled on the site-isolation | 2679 // TODO(wjmaclean): when WebViewTest is re-enabled on the site-isolation |
2528 // bots, then re-enable this test class as well. | 2680 // bots, then re-enable this test class as well. |
2529 // https://crbug.com/503751 | 2681 // https://crbug.com/503751 |
2530 class WebViewFocusTest : public WebViewTest { | 2682 class WebViewFocusTest : public WebViewTest { |
2531 public: | 2683 public: |
2532 ~WebViewFocusTest() override {} | 2684 ~WebViewFocusTest() override {} |
2533 | 2685 |
2534 void SetUpCommandLine(base::CommandLine* command_line) override { | 2686 void SetUpCommandLine(base::CommandLine* command_line) override { |
2535 WebViewTest::SetUpCommandLine(command_line); | 2687 WebViewTest::SetUpCommandLine(command_line); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2742 const task_management::Task* task = task_manager.tasks().back(); | 2894 const task_management::Task* task = task_manager.tasks().back(); |
2743 EXPECT_EQ(task_management::Task::GUEST, task->GetType()); | 2895 EXPECT_EQ(task_management::Task::GUEST, task->GetType()); |
2744 const base::string16 title = task->title(); | 2896 const base::string16 title = task->title(); |
2745 const base::string16 expected_prefix = GetExpectedPrefix(guest_contents); | 2897 const base::string16 expected_prefix = GetExpectedPrefix(guest_contents); |
2746 EXPECT_TRUE(base::StartsWith(title, | 2898 EXPECT_TRUE(base::StartsWith(title, |
2747 expected_prefix, | 2899 expected_prefix, |
2748 base::CompareCase::INSENSITIVE_ASCII)); | 2900 base::CompareCase::INSENSITIVE_ASCII)); |
2749 } | 2901 } |
2750 | 2902 |
2751 #endif // defined(ENABLE_TASK_MANAGER) | 2903 #endif // defined(ENABLE_TASK_MANAGER) |
OLD | NEW |