Chromium Code Reviews| 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 13 matching lines...) Expand all Loading... | |
| 24 #include "content/browser/frame_host/frame_tree.h" | 24 #include "content/browser/frame_host/frame_tree.h" |
| 25 #include "content/browser/frame_host/navigator.h" | 25 #include "content/browser/frame_host/navigator.h" |
| 26 #include "content/browser/frame_host/render_frame_proxy_host.h" | 26 #include "content/browser/frame_host/render_frame_proxy_host.h" |
| 27 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" | 27 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" |
| 28 #include "content/browser/gpu/compositor_util.h" | 28 #include "content/browser/gpu/compositor_util.h" |
| 29 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 29 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 30 #include "content/browser/renderer_host/input/synthetic_tap_gesture.h" | 30 #include "content/browser/renderer_host/input/synthetic_tap_gesture.h" |
| 31 #include "content/browser/renderer_host/render_view_host_impl.h" | 31 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 32 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" | 32 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" |
| 33 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 33 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
| 34 #include "content/browser/web_contents/web_contents_impl.h" | |
| 35 #include "content/common/frame_messages.h" | 34 #include "content/common/frame_messages.h" |
| 36 #include "content/common/input/synthetic_tap_gesture_params.h" | 35 #include "content/common/input/synthetic_tap_gesture_params.h" |
| 37 #include "content/common/view_messages.h" | 36 #include "content/common/view_messages.h" |
| 38 #include "content/public/browser/cert_store.h" | 37 #include "content/public/browser/cert_store.h" |
| 39 #include "content/public/browser/notification_observer.h" | 38 #include "content/public/browser/notification_observer.h" |
| 40 #include "content/public/browser/notification_service.h" | 39 #include "content/public/browser/notification_service.h" |
| 41 #include "content/public/browser/notification_types.h" | 40 #include "content/public/browser/notification_types.h" |
| 42 #include "content/public/browser/resource_dispatcher_host.h" | 41 #include "content/public/browser/resource_dispatcher_host.h" |
| 43 #include "content/public/common/browser_side_navigation_policy.h" | 42 #include "content/public/common/browser_side_navigation_policy.h" |
| 44 #include "content/public/common/content_switches.h" | 43 #include "content/public/common/content_switches.h" |
| 45 #include "content/public/common/url_constants.h" | 44 #include "content/public/common/url_constants.h" |
| 46 #include "content/public/test/browser_test_utils.h" | 45 #include "content/public/test/browser_test_utils.h" |
| 47 #include "content/public/test/content_browser_test_utils.h" | 46 #include "content/public/test/content_browser_test_utils.h" |
| 48 #include "content/public/test/test_navigation_observer.h" | 47 #include "content/public/test/test_navigation_observer.h" |
| 49 #include "content/public/test/test_utils.h" | 48 #include "content/public/test/test_utils.h" |
| 50 #include "content/shell/browser/shell.h" | |
| 51 #include "content/test/content_browser_test_utils_internal.h" | 49 #include "content/test/content_browser_test_utils_internal.h" |
| 52 #include "content/test/test_frame_navigation_observer.h" | 50 #include "content/test/test_frame_navigation_observer.h" |
| 53 #include "ipc/ipc_security_test_util.h" | 51 #include "ipc/ipc_security_test_util.h" |
| 54 #include "net/dns/mock_host_resolver.h" | 52 #include "net/dns/mock_host_resolver.h" |
| 55 #include "net/test/embedded_test_server/embedded_test_server.h" | 53 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 56 #include "third_party/WebKit/public/web/WebInputEvent.h" | 54 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 57 #include "third_party/WebKit/public/web/WebSandboxFlags.h" | 55 #include "third_party/WebKit/public/web/WebSandboxFlags.h" |
| 58 #include "ui/events/event.h" | 56 #include "ui/events/event.h" |
| 59 #include "ui/events/event_utils.h" | 57 #include "ui/events/event_utils.h" |
| 60 #include "ui/gfx/geometry/point.h" | 58 #include "ui/gfx/geometry/point.h" |
| (...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 625 }; | 623 }; |
| 626 | 624 |
| 627 // Ensure that navigating subframes in --site-per-process mode works and the | 625 // Ensure that navigating subframes in --site-per-process mode works and the |
| 628 // correct documents are committed. | 626 // correct documents are committed. |
| 629 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) { | 627 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) { |
| 630 GURL main_url(embedded_test_server()->GetURL( | 628 GURL main_url(embedded_test_server()->GetURL( |
| 631 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); | 629 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); |
| 632 NavigateToURL(shell(), main_url); | 630 NavigateToURL(shell(), main_url); |
| 633 | 631 |
| 634 // It is safe to obtain the root frame tree node here, as it doesn't change. | 632 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 635 FrameTreeNode* root = | 633 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 636 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 637 GetFrameTree()->root(); | |
| 638 | 634 |
| 639 TestNavigationObserver observer(shell()->web_contents()); | 635 TestNavigationObserver observer(shell()->web_contents()); |
| 640 | 636 |
| 641 // Load same-site page into iframe. | 637 // Load same-site page into iframe. |
| 642 FrameTreeNode* child = root->child_at(0); | 638 FrameTreeNode* child = root->child_at(0); |
| 643 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 639 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 644 NavigateFrameToURL(child, http_url); | 640 NavigateFrameToURL(child, http_url); |
| 645 EXPECT_EQ(http_url, observer.last_navigation_url()); | 641 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| 646 EXPECT_TRUE(observer.last_navigation_succeeded()); | 642 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 647 { | 643 { |
| 648 // There should be only one RenderWidgetHost when there are no | 644 // There should be only one RenderWidgetHost when there are no |
| 649 // cross-process iframes. | 645 // cross-process iframes. |
| 650 std::set<RenderWidgetHostView*> views_set = | 646 std::set<RenderWidgetHostView*> views_set = |
| 651 static_cast<WebContentsImpl*>(shell()->web_contents()) | 647 web_contents()->GetRenderWidgetHostViewsInTree(); |
| 652 ->GetRenderWidgetHostViewsInTree(); | |
| 653 EXPECT_EQ(1U, views_set.size()); | 648 EXPECT_EQ(1U, views_set.size()); |
| 654 } | 649 } |
| 655 | 650 |
| 656 EXPECT_EQ( | 651 EXPECT_EQ( |
| 657 " Site A\n" | 652 " Site A\n" |
| 658 " |--Site A\n" | 653 " |--Site A\n" |
| 659 " +--Site A\n" | 654 " +--Site A\n" |
| 660 " |--Site A\n" | 655 " |--Site A\n" |
| 661 " +--Site A\n" | 656 " +--Site A\n" |
| 662 " +--Site A\n" | 657 " +--Site A\n" |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 675 SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance(); | 670 SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance(); |
| 676 RenderViewHost* rvh = child->current_frame_host()->render_view_host(); | 671 RenderViewHost* rvh = child->current_frame_host()->render_view_host(); |
| 677 RenderProcessHost* rph = child->current_frame_host()->GetProcess(); | 672 RenderProcessHost* rph = child->current_frame_host()->GetProcess(); |
| 678 EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh); | 673 EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh); |
| 679 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance); | 674 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance); |
| 680 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph); | 675 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph); |
| 681 { | 676 { |
| 682 // There should be now two RenderWidgetHosts, one for each process | 677 // There should be now two RenderWidgetHosts, one for each process |
| 683 // rendering a frame. | 678 // rendering a frame. |
| 684 std::set<RenderWidgetHostView*> views_set = | 679 std::set<RenderWidgetHostView*> views_set = |
| 685 static_cast<WebContentsImpl*>(shell()->web_contents()) | 680 web_contents()->GetRenderWidgetHostViewsInTree(); |
| 686 ->GetRenderWidgetHostViewsInTree(); | |
| 687 EXPECT_EQ(2U, views_set.size()); | 681 EXPECT_EQ(2U, views_set.size()); |
| 688 } | 682 } |
| 689 RenderFrameProxyHost* proxy_to_parent = | 683 RenderFrameProxyHost* proxy_to_parent = |
| 690 child->render_manager()->GetProxyToParent(); | 684 child->render_manager()->GetProxyToParent(); |
| 691 EXPECT_TRUE(proxy_to_parent); | 685 EXPECT_TRUE(proxy_to_parent); |
| 692 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); | 686 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); |
| 693 // The out-of-process iframe should have its own RenderWidgetHost, | 687 // The out-of-process iframe should have its own RenderWidgetHost, |
| 694 // independent of any RenderViewHost. | 688 // independent of any RenderViewHost. |
| 695 EXPECT_NE( | 689 EXPECT_NE( |
| 696 rvh->GetWidget()->GetView(), | 690 rvh->GetWidget()->GetView(), |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 723 EXPECT_NE(rvh, child->current_frame_host()->render_view_host()); | 717 EXPECT_NE(rvh, child->current_frame_host()->render_view_host()); |
| 724 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 718 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 725 child->current_frame_host()->GetSiteInstance()); | 719 child->current_frame_host()->GetSiteInstance()); |
| 726 EXPECT_NE(site_instance, | 720 EXPECT_NE(site_instance, |
| 727 child->current_frame_host()->GetSiteInstance()); | 721 child->current_frame_host()->GetSiteInstance()); |
| 728 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), | 722 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), |
| 729 child->current_frame_host()->GetProcess()); | 723 child->current_frame_host()->GetProcess()); |
| 730 EXPECT_NE(rph, child->current_frame_host()->GetProcess()); | 724 EXPECT_NE(rph, child->current_frame_host()->GetProcess()); |
| 731 { | 725 { |
| 732 std::set<RenderWidgetHostView*> views_set = | 726 std::set<RenderWidgetHostView*> views_set = |
| 733 static_cast<WebContentsImpl*>(shell()->web_contents()) | 727 web_contents()->GetRenderWidgetHostViewsInTree(); |
| 734 ->GetRenderWidgetHostViewsInTree(); | |
| 735 EXPECT_EQ(2U, views_set.size()); | 728 EXPECT_EQ(2U, views_set.size()); |
| 736 } | 729 } |
| 737 EXPECT_EQ(proxy_to_parent, child->render_manager()->GetProxyToParent()); | 730 EXPECT_EQ(proxy_to_parent, child->render_manager()->GetProxyToParent()); |
| 738 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); | 731 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); |
| 739 EXPECT_NE( | 732 EXPECT_NE( |
| 740 child->current_frame_host()->render_view_host()->GetWidget()->GetView(), | 733 child->current_frame_host()->render_view_host()->GetWidget()->GetView(), |
| 741 proxy_to_parent->cross_process_frame_connector()->get_view_for_testing()); | 734 proxy_to_parent->cross_process_frame_connector()->get_view_for_testing()); |
| 742 EXPECT_TRUE(child->current_frame_host()->GetRenderWidgetHost()); | 735 EXPECT_TRUE(child->current_frame_host()->GetRenderWidgetHost()); |
| 743 | 736 |
| 744 EXPECT_EQ( | 737 EXPECT_EQ( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 791 #else | 784 #else |
| 792 #define MAYBE_NestedSurfaceHitTestTest NestedSurfaceHitTestTest | 785 #define MAYBE_NestedSurfaceHitTestTest NestedSurfaceHitTestTest |
| 793 #endif | 786 #endif |
| 794 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 787 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 795 MAYBE_NestedSurfaceHitTestTest) { | 788 MAYBE_NestedSurfaceHitTestTest) { |
| 796 GURL main_url(embedded_test_server()->GetURL( | 789 GURL main_url(embedded_test_server()->GetURL( |
| 797 "/frame_tree/page_with_positioned_nested_frames.html")); | 790 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 798 NavigateToURL(shell(), main_url); | 791 NavigateToURL(shell(), main_url); |
| 799 | 792 |
| 800 // It is safe to obtain the root frame tree node here, as it doesn't change. | 793 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 801 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 794 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 802 ->GetFrameTree() | |
| 803 ->root(); | |
| 804 ASSERT_EQ(1U, root->child_count()); | 795 ASSERT_EQ(1U, root->child_count()); |
| 805 | 796 |
| 806 FrameTreeNode* parent_iframe_node = root->child_at(0); | 797 FrameTreeNode* parent_iframe_node = root->child_at(0); |
| 807 GURL site_url(embedded_test_server()->GetURL( | 798 GURL site_url(embedded_test_server()->GetURL( |
| 808 "a.com", "/frame_tree/page_with_positioned_frame.html")); | 799 "a.com", "/frame_tree/page_with_positioned_frame.html")); |
| 809 EXPECT_EQ(site_url, parent_iframe_node->current_url()); | 800 EXPECT_EQ(site_url, parent_iframe_node->current_url()); |
| 810 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 801 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 811 parent_iframe_node->current_frame_host()->GetSiteInstance()); | 802 parent_iframe_node->current_frame_host()->GetSiteInstance()); |
| 812 | 803 |
| 813 FrameTreeNode* nested_iframe_node = parent_iframe_node->child_at(0); | 804 FrameTreeNode* nested_iframe_node = parent_iframe_node->child_at(0); |
| 814 GURL nested_site_url( | 805 GURL nested_site_url( |
| 815 embedded_test_server()->GetURL("baz.com", "/title1.html")); | 806 embedded_test_server()->GetURL("baz.com", "/title1.html")); |
| 816 EXPECT_EQ(nested_site_url, nested_iframe_node->current_url()); | 807 EXPECT_EQ(nested_site_url, nested_iframe_node->current_url()); |
| 817 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 808 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 818 nested_iframe_node->current_frame_host()->GetSiteInstance()); | 809 nested_iframe_node->current_frame_host()->GetSiteInstance()); |
| 819 EXPECT_NE(parent_iframe_node->current_frame_host()->GetSiteInstance(), | 810 EXPECT_NE(parent_iframe_node->current_frame_host()->GetSiteInstance(), |
| 820 nested_iframe_node->current_frame_host()->GetSiteInstance()); | 811 nested_iframe_node->current_frame_host()->GetSiteInstance()); |
| 821 | 812 |
| 822 // Create listeners for mouse events. | 813 // Create listeners for mouse events. |
| 823 RenderWidgetHostMouseEventMonitor main_frame_monitor( | 814 RenderWidgetHostMouseEventMonitor main_frame_monitor( |
| 824 root->current_frame_host()->GetRenderWidgetHost()); | 815 root->current_frame_host()->GetRenderWidgetHost()); |
| 825 RenderWidgetHostMouseEventMonitor nested_frame_monitor( | 816 RenderWidgetHostMouseEventMonitor nested_frame_monitor( |
| 826 nested_iframe_node->current_frame_host()->GetRenderWidgetHost()); | 817 nested_iframe_node->current_frame_host()->GetRenderWidgetHost()); |
| 827 | 818 |
| 828 RenderWidgetHostInputEventRouter* router = | 819 RenderWidgetHostInputEventRouter* router = |
| 829 static_cast<WebContentsImpl*>(shell()->web_contents()) | 820 web_contents()->GetInputEventRouter(); |
| 830 ->GetInputEventRouter(); | |
| 831 | 821 |
| 832 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 822 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 833 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 823 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 834 RenderWidgetHostViewBase* rwhv_nested = | 824 RenderWidgetHostViewBase* rwhv_nested = |
| 835 static_cast<RenderWidgetHostViewBase*>( | 825 static_cast<RenderWidgetHostViewBase*>( |
| 836 nested_iframe_node->current_frame_host() | 826 nested_iframe_node->current_frame_host() |
| 837 ->GetRenderWidgetHost() | 827 ->GetRenderWidgetHost() |
| 838 ->GetView()); | 828 ->GetView()); |
| 839 | 829 |
| 840 SurfaceHitTestReadyNotifier notifier( | 830 SurfaceHitTestReadyNotifier notifier( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 #else | 862 #else |
| 873 #define MAYBE_SurfaceHitTestPointerEventsNone SurfaceHitTestPointerEventsNone | 863 #define MAYBE_SurfaceHitTestPointerEventsNone SurfaceHitTestPointerEventsNone |
| 874 #endif | 864 #endif |
| 875 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 865 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 876 MAYBE_SurfaceHitTestPointerEventsNone) { | 866 MAYBE_SurfaceHitTestPointerEventsNone) { |
| 877 GURL main_url(embedded_test_server()->GetURL( | 867 GURL main_url(embedded_test_server()->GetURL( |
| 878 "/frame_tree/page_with_positioned_frame_pointer-events_none.html")); | 868 "/frame_tree/page_with_positioned_frame_pointer-events_none.html")); |
| 879 NavigateToURL(shell(), main_url); | 869 NavigateToURL(shell(), main_url); |
| 880 | 870 |
| 881 // It is safe to obtain the root frame tree node here, as it doesn't change. | 871 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 882 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 872 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 883 ->GetFrameTree() | |
| 884 ->root(); | |
| 885 ASSERT_EQ(1U, root->child_count()); | 873 ASSERT_EQ(1U, root->child_count()); |
| 886 | 874 |
| 887 FrameTreeNode* child_node = root->child_at(0); | 875 FrameTreeNode* child_node = root->child_at(0); |
| 888 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); | 876 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); |
| 889 EXPECT_EQ(site_url, child_node->current_url()); | 877 EXPECT_EQ(site_url, child_node->current_url()); |
| 890 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 878 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 891 child_node->current_frame_host()->GetSiteInstance()); | 879 child_node->current_frame_host()->GetSiteInstance()); |
| 892 | 880 |
| 893 // Create listeners for mouse events. | 881 // Create listeners for mouse events. |
| 894 RenderWidgetHostMouseEventMonitor main_frame_monitor( | 882 RenderWidgetHostMouseEventMonitor main_frame_monitor( |
| 895 root->current_frame_host()->GetRenderWidgetHost()); | 883 root->current_frame_host()->GetRenderWidgetHost()); |
| 896 RenderWidgetHostMouseEventMonitor child_frame_monitor( | 884 RenderWidgetHostMouseEventMonitor child_frame_monitor( |
| 897 child_node->current_frame_host()->GetRenderWidgetHost()); | 885 child_node->current_frame_host()->GetRenderWidgetHost()); |
| 898 | 886 |
| 899 RenderWidgetHostInputEventRouter* router = | 887 RenderWidgetHostInputEventRouter* router = |
| 900 static_cast<WebContentsImpl*>(shell()->web_contents()) | 888 web_contents()->GetInputEventRouter(); |
| 901 ->GetInputEventRouter(); | |
| 902 | 889 |
| 903 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 890 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 904 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 891 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 905 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( | 892 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( |
| 906 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 893 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 907 | 894 |
| 908 SurfaceHitTestReadyNotifier notifier( | 895 SurfaceHitTestReadyNotifier notifier( |
| 909 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | 896 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 910 notifier.WaitForSurfaceReady(); | 897 notifier.WaitForSurfaceReady(); |
| 911 | 898 |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 934 #else | 921 #else |
| 935 #define MAYBE_CompositorFrameSwapped CompositorFrameSwapped | 922 #define MAYBE_CompositorFrameSwapped CompositorFrameSwapped |
| 936 #endif | 923 #endif |
| 937 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 924 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 938 MAYBE_CompositorFrameSwapped) { | 925 MAYBE_CompositorFrameSwapped) { |
| 939 GURL main_url(embedded_test_server()->GetURL( | 926 GURL main_url(embedded_test_server()->GetURL( |
| 940 "a.com", "/cross_site_iframe_factory.html?a(baz)")); | 927 "a.com", "/cross_site_iframe_factory.html?a(baz)")); |
| 941 NavigateToURL(shell(), main_url); | 928 NavigateToURL(shell(), main_url); |
| 942 | 929 |
| 943 // It is safe to obtain the root frame tree node here, as it doesn't change. | 930 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 944 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 931 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 945 ->GetFrameTree() | |
| 946 ->root(); | |
| 947 ASSERT_EQ(1U, root->child_count()); | 932 ASSERT_EQ(1U, root->child_count()); |
| 948 | 933 |
| 949 FrameTreeNode* child_node = root->child_at(0); | 934 FrameTreeNode* child_node = root->child_at(0); |
| 950 GURL site_url(embedded_test_server()->GetURL( | 935 GURL site_url(embedded_test_server()->GetURL( |
| 951 "baz.com", "/cross_site_iframe_factory.html?baz()")); | 936 "baz.com", "/cross_site_iframe_factory.html?baz()")); |
| 952 EXPECT_EQ(site_url, child_node->current_url()); | 937 EXPECT_EQ(site_url, child_node->current_url()); |
| 953 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 938 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 954 child_node->current_frame_host()->GetSiteInstance()); | 939 child_node->current_frame_host()->GetSiteInstance()); |
| 955 RenderWidgetHostViewBase* rwhv_base = static_cast<RenderWidgetHostViewBase*>( | 940 RenderWidgetHostViewBase* rwhv_base = static_cast<RenderWidgetHostViewBase*>( |
| 956 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 941 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 967 } | 952 } |
| 968 } | 953 } |
| 969 | 954 |
| 970 // Ensure that OOPIFs are deleted after navigating to a new main frame. | 955 // Ensure that OOPIFs are deleted after navigating to a new main frame. |
| 971 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CleanupCrossSiteIframe) { | 956 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CleanupCrossSiteIframe) { |
| 972 GURL main_url(embedded_test_server()->GetURL( | 957 GURL main_url(embedded_test_server()->GetURL( |
| 973 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); | 958 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); |
| 974 NavigateToURL(shell(), main_url); | 959 NavigateToURL(shell(), main_url); |
| 975 | 960 |
| 976 // It is safe to obtain the root frame tree node here, as it doesn't change. | 961 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 977 FrameTreeNode* root = | 962 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 978 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 979 GetFrameTree()->root(); | |
| 980 | 963 |
| 981 TestNavigationObserver observer(shell()->web_contents()); | 964 TestNavigationObserver observer(shell()->web_contents()); |
| 982 | 965 |
| 983 // Load a cross-site page into both iframes. | 966 // Load a cross-site page into both iframes. |
| 984 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); | 967 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); |
| 985 NavigateFrameToURL(root->child_at(0), foo_url); | 968 NavigateFrameToURL(root->child_at(0), foo_url); |
| 986 EXPECT_TRUE(observer.last_navigation_succeeded()); | 969 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 987 EXPECT_EQ(foo_url, observer.last_navigation_url()); | 970 EXPECT_EQ(foo_url, observer.last_navigation_url()); |
| 988 NavigateFrameToURL(root->child_at(1), foo_url); | 971 NavigateFrameToURL(root->child_at(1), foo_url); |
| 989 EXPECT_TRUE(observer.last_navigation_succeeded()); | 972 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1026 EXPECT_FALSE(RenderViewHost::FromID(subframe_process_id, subframe_rvh_id)); | 1009 EXPECT_FALSE(RenderViewHost::FromID(subframe_process_id, subframe_rvh_id)); |
| 1027 } | 1010 } |
| 1028 | 1011 |
| 1029 // Ensure that root frames cannot be detached. | 1012 // Ensure that root frames cannot be detached. |
| 1030 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RestrictFrameDetach) { | 1013 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RestrictFrameDetach) { |
| 1031 GURL main_url(embedded_test_server()->GetURL( | 1014 GURL main_url(embedded_test_server()->GetURL( |
| 1032 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); | 1015 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); |
| 1033 NavigateToURL(shell(), main_url); | 1016 NavigateToURL(shell(), main_url); |
| 1034 | 1017 |
| 1035 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1018 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1036 FrameTreeNode* root = | 1019 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1037 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1038 GetFrameTree()->root(); | |
| 1039 | 1020 |
| 1040 TestNavigationObserver observer(shell()->web_contents()); | 1021 TestNavigationObserver observer(shell()->web_contents()); |
| 1041 | 1022 |
| 1042 // Load cross-site pages into both iframes. | 1023 // Load cross-site pages into both iframes. |
| 1043 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); | 1024 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); |
| 1044 NavigateFrameToURL(root->child_at(0), foo_url); | 1025 NavigateFrameToURL(root->child_at(0), foo_url); |
| 1045 EXPECT_TRUE(observer.last_navigation_succeeded()); | 1026 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 1046 EXPECT_EQ(foo_url, observer.last_navigation_url()); | 1027 EXPECT_EQ(foo_url, observer.last_navigation_url()); |
| 1047 GURL bar_url = embedded_test_server()->GetURL("bar.com", "/title2.html"); | 1028 GURL bar_url = embedded_test_server()->GetURL("bar.com", "/title2.html"); |
| 1048 NavigateFrameToURL(root->child_at(1), bar_url); | 1029 NavigateFrameToURL(root->child_at(1), bar_url); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1090 " C = http://bar.com/", | 1071 " C = http://bar.com/", |
| 1091 DepictFrameTree(root)); | 1072 DepictFrameTree(root)); |
| 1092 } | 1073 } |
| 1093 | 1074 |
| 1094 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteFrame) { | 1075 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteFrame) { |
| 1095 GURL main_url(embedded_test_server()->GetURL( | 1076 GURL main_url(embedded_test_server()->GetURL( |
| 1096 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); | 1077 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); |
| 1097 NavigateToURL(shell(), main_url); | 1078 NavigateToURL(shell(), main_url); |
| 1098 | 1079 |
| 1099 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1080 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1100 FrameTreeNode* root = | 1081 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1101 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1102 GetFrameTree()->root(); | |
| 1103 | 1082 |
| 1104 TestNavigationObserver observer(shell()->web_contents()); | 1083 TestNavigationObserver observer(shell()->web_contents()); |
| 1105 | 1084 |
| 1106 // Load same-site page into iframe. | 1085 // Load same-site page into iframe. |
| 1107 FrameTreeNode* child = root->child_at(0); | 1086 FrameTreeNode* child = root->child_at(0); |
| 1108 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 1087 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 1109 NavigateFrameToURL(child, http_url); | 1088 NavigateFrameToURL(child, http_url); |
| 1110 EXPECT_EQ(http_url, observer.last_navigation_url()); | 1089 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| 1111 EXPECT_TRUE(observer.last_navigation_succeeded()); | 1090 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 1112 | 1091 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1159 child->current_frame_host()->GetSiteInstance()); | 1138 child->current_frame_host()->GetSiteInstance()); |
| 1160 } | 1139 } |
| 1161 | 1140 |
| 1162 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1141 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1163 NavigateRemoteFrameToBlankAndDataURLs) { | 1142 NavigateRemoteFrameToBlankAndDataURLs) { |
| 1164 GURL main_url(embedded_test_server()->GetURL( | 1143 GURL main_url(embedded_test_server()->GetURL( |
| 1165 "a.com", "/cross_site_iframe_factory.html?a(a,a(a))")); | 1144 "a.com", "/cross_site_iframe_factory.html?a(a,a(a))")); |
| 1166 NavigateToURL(shell(), main_url); | 1145 NavigateToURL(shell(), main_url); |
| 1167 | 1146 |
| 1168 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1147 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1169 FrameTreeNode* root = | 1148 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1170 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1171 GetFrameTree()->root(); | |
| 1172 | 1149 |
| 1173 TestNavigationObserver observer(shell()->web_contents()); | 1150 TestNavigationObserver observer(shell()->web_contents()); |
| 1174 | 1151 |
| 1175 // Load same-site page into iframe. | 1152 // Load same-site page into iframe. |
| 1176 FrameTreeNode* child = root->child_at(0); | 1153 FrameTreeNode* child = root->child_at(0); |
| 1177 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 1154 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 1178 NavigateFrameToURL(child, http_url); | 1155 NavigateFrameToURL(child, http_url); |
| 1179 EXPECT_EQ(http_url, observer.last_navigation_url()); | 1156 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| 1180 EXPECT_TRUE(observer.last_navigation_succeeded()); | 1157 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 1181 EXPECT_EQ( | 1158 EXPECT_EQ( |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1267 // | 1244 // |
| 1268 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to | 1245 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to |
| 1269 // site B and stays in not rendered state. | 1246 // site B and stays in not rendered state. |
| 1270 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1247 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1271 NavigateRemoteFrameToKilledProcess) { | 1248 NavigateRemoteFrameToKilledProcess) { |
| 1272 GURL main_url(embedded_test_server()->GetURL( | 1249 GURL main_url(embedded_test_server()->GetURL( |
| 1273 "foo.com", "/cross_site_iframe_factory.html?foo.com(bar.com, foo.com)")); | 1250 "foo.com", "/cross_site_iframe_factory.html?foo.com(bar.com, foo.com)")); |
| 1274 NavigateToURL(shell(), main_url); | 1251 NavigateToURL(shell(), main_url); |
| 1275 | 1252 |
| 1276 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1253 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1277 FrameTreeNode* root = | 1254 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1278 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1279 GetFrameTree()->root(); | |
| 1280 | 1255 |
| 1281 TestNavigationObserver observer(shell()->web_contents()); | 1256 TestNavigationObserver observer(shell()->web_contents()); |
| 1282 ASSERT_EQ(2U, root->child_count()); | 1257 ASSERT_EQ(2U, root->child_count()); |
| 1283 | 1258 |
| 1284 // Make sure node2 points to the correct cross-site page. | 1259 // Make sure node2 points to the correct cross-site page. |
| 1285 GURL site_b_url = embedded_test_server()->GetURL( | 1260 GURL site_b_url = embedded_test_server()->GetURL( |
| 1286 "bar.com", "/cross_site_iframe_factory.html?bar.com()"); | 1261 "bar.com", "/cross_site_iframe_factory.html?bar.com()"); |
| 1287 FrameTreeNode* node2 = root->child_at(0); | 1262 FrameTreeNode* node2 = root->child_at(0); |
| 1288 EXPECT_EQ(site_b_url, node2->current_url()); | 1263 EXPECT_EQ(site_b_url, node2->current_url()); |
| 1289 | 1264 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 1318 // | 1293 // |
| 1319 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to | 1294 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to |
| 1320 // site B and stays in not rendered state. | 1295 // site B and stays in not rendered state. |
| 1321 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1296 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1322 NavigateRemoteFrameToKilledProcessWithSubtree) { | 1297 NavigateRemoteFrameToKilledProcessWithSubtree) { |
| 1323 GURL main_url(embedded_test_server()->GetURL( | 1298 GURL main_url(embedded_test_server()->GetURL( |
| 1324 "a.com", "/cross_site_iframe_factory.html?a(bar(baz), a)")); | 1299 "a.com", "/cross_site_iframe_factory.html?a(bar(baz), a)")); |
| 1325 NavigateToURL(shell(), main_url); | 1300 NavigateToURL(shell(), main_url); |
| 1326 | 1301 |
| 1327 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1302 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1328 FrameTreeNode* root = | 1303 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1329 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1330 GetFrameTree()->root(); | |
| 1331 TestNavigationObserver observer(shell()->web_contents()); | 1304 TestNavigationObserver observer(shell()->web_contents()); |
| 1332 | 1305 |
| 1333 ASSERT_EQ(2U, root->child_count()); | 1306 ASSERT_EQ(2U, root->child_count()); |
| 1334 | 1307 |
| 1335 GURL site_b_url(embedded_test_server()->GetURL( | 1308 GURL site_b_url(embedded_test_server()->GetURL( |
| 1336 "bar.com", "/cross_site_iframe_factory.html?bar(baz())")); | 1309 "bar.com", "/cross_site_iframe_factory.html?bar(baz())")); |
| 1337 // We can't use a TestNavigationObserver to verify the URL here, | 1310 // We can't use a TestNavigationObserver to verify the URL here, |
| 1338 // since the frame has children that may have clobbered it in the observer. | 1311 // since the frame has children that may have clobbered it in the observer. |
| 1339 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); | 1312 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); |
| 1340 | 1313 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1405 | 1378 |
| 1406 // Ensure that the renderer process doesn't crash when the main frame navigates | 1379 // Ensure that the renderer process doesn't crash when the main frame navigates |
| 1407 // a remote child to a page that results in a network error. | 1380 // a remote child to a page that results in a network error. |
| 1408 // See https://crbug.com/558016. | 1381 // See https://crbug.com/558016. |
| 1409 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteAfterError) { | 1382 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteAfterError) { |
| 1410 GURL main_url(embedded_test_server()->GetURL( | 1383 GURL main_url(embedded_test_server()->GetURL( |
| 1411 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 1384 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 1412 NavigateToURL(shell(), main_url); | 1385 NavigateToURL(shell(), main_url); |
| 1413 | 1386 |
| 1414 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1387 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1415 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1388 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1416 ->GetFrameTree() | |
| 1417 ->root(); | |
| 1418 | 1389 |
| 1419 // Load same-site page into iframe. | 1390 // Load same-site page into iframe. |
| 1420 { | 1391 { |
| 1421 TestNavigationObserver observer(shell()->web_contents()); | 1392 TestNavigationObserver observer(shell()->web_contents()); |
| 1422 FrameTreeNode* child = root->child_at(0); | 1393 FrameTreeNode* child = root->child_at(0); |
| 1423 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 1394 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 1424 NavigateFrameToURL(child, http_url); | 1395 NavigateFrameToURL(child, http_url); |
| 1425 EXPECT_EQ(http_url, observer.last_navigation_url()); | 1396 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| 1426 EXPECT_TRUE(observer.last_navigation_succeeded()); | 1397 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 1427 observer.Wait(); | 1398 observer.Wait(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1461 // successfully loads after earlier encountering a network error for it. | 1432 // successfully loads after earlier encountering a network error for it. |
| 1462 // See https://crbug.com/560511. | 1433 // See https://crbug.com/560511. |
| 1463 // TODO(creis): Make the net error page show in the correct process as well, | 1434 // TODO(creis): Make the net error page show in the correct process as well, |
| 1464 // per https://crbug.com/588314. | 1435 // per https://crbug.com/588314. |
| 1465 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) { | 1436 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) { |
| 1466 GURL main_url(embedded_test_server()->GetURL( | 1437 GURL main_url(embedded_test_server()->GetURL( |
| 1467 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 1438 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 1468 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1439 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1469 | 1440 |
| 1470 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1441 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1471 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1442 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1472 ->GetFrameTree() | |
| 1473 ->root(); | |
| 1474 FrameTreeNode* child = root->child_at(0); | 1443 FrameTreeNode* child = root->child_at(0); |
| 1475 GURL url_a = child->current_url(); | 1444 GURL url_a = child->current_url(); |
| 1476 | 1445 |
| 1477 // Disable host resolution in the test server and try to navigate the subframe | 1446 // Disable host resolution in the test server and try to navigate the subframe |
| 1478 // cross-site, which will lead to a committed net error (which looks like | 1447 // cross-site, which will lead to a committed net error (which looks like |
| 1479 // success to the TestNavigationObserver). | 1448 // success to the TestNavigationObserver). |
| 1480 GURL url_b = embedded_test_server()->GetURL("b.com", "/title3.html"); | 1449 GURL url_b = embedded_test_server()->GetURL("b.com", "/title3.html"); |
| 1481 host_resolver()->ClearRules(); | 1450 host_resolver()->ClearRules(); |
| 1482 TestNavigationObserver observer(shell()->web_contents()); | 1451 TestNavigationObserver observer(shell()->web_contents()); |
| 1483 NavigateIframeToURL(shell()->web_contents(), "child-0", url_b); | 1452 NavigateIframeToURL(shell()->web_contents(), "child-0", url_b); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1565 // verifying that a proxy for node 4 has been recreated in process B. This | 1534 // verifying that a proxy for node 4 has been recreated in process B. This |
| 1566 // verifies the fix for https://crbug.com/478892. | 1535 // verifies the fix for https://crbug.com/478892. |
| 1567 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1536 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1568 NavigatingToKilledProcessRestoresAllProxies) { | 1537 NavigatingToKilledProcessRestoresAllProxies) { |
| 1569 // Navigate to a page with three frames: one cross-site and two same-site. | 1538 // Navigate to a page with three frames: one cross-site and two same-site. |
| 1570 GURL main_url(embedded_test_server()->GetURL( | 1539 GURL main_url(embedded_test_server()->GetURL( |
| 1571 "a.com", "/frame_tree/page_with_three_frames.html")); | 1540 "a.com", "/frame_tree/page_with_three_frames.html")); |
| 1572 NavigateToURL(shell(), main_url); | 1541 NavigateToURL(shell(), main_url); |
| 1573 | 1542 |
| 1574 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1543 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1575 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1544 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1576 ->GetFrameTree() | |
| 1577 ->root(); | |
| 1578 TestNavigationObserver observer(shell()->web_contents()); | 1545 TestNavigationObserver observer(shell()->web_contents()); |
| 1579 | 1546 |
| 1580 EXPECT_EQ( | 1547 EXPECT_EQ( |
| 1581 " Site A ------------ proxies for B\n" | 1548 " Site A ------------ proxies for B\n" |
| 1582 " |--Site B ------- proxies for A\n" | 1549 " |--Site B ------- proxies for A\n" |
| 1583 " |--Site A ------- proxies for B\n" | 1550 " |--Site A ------- proxies for B\n" |
| 1584 " +--Site A ------- proxies for B\n" | 1551 " +--Site A ------- proxies for B\n" |
| 1585 "Where A = http://a.com/\n" | 1552 "Where A = http://a.com/\n" |
| 1586 " B = http://b.com/", | 1553 " B = http://b.com/", |
| 1587 DepictFrameTree(root)); | 1554 DepictFrameTree(root)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1630 // process A, and then checks that process B isn't resurrected to create a | 1597 // process A, and then checks that process B isn't resurrected to create a |
| 1631 // proxy for the new child frame. See https://crbug.com/476846. | 1598 // proxy for the new child frame. See https://crbug.com/476846. |
| 1632 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1599 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1633 CreateChildFrameAfterKillingProcess) { | 1600 CreateChildFrameAfterKillingProcess) { |
| 1634 // Navigate to a page with three frames: one cross-site and two same-site. | 1601 // Navigate to a page with three frames: one cross-site and two same-site. |
| 1635 GURL main_url(embedded_test_server()->GetURL( | 1602 GURL main_url(embedded_test_server()->GetURL( |
| 1636 "a.com", "/frame_tree/page_with_three_frames.html")); | 1603 "a.com", "/frame_tree/page_with_three_frames.html")); |
| 1637 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1604 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1638 | 1605 |
| 1639 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1606 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1640 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1607 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1641 ->GetFrameTree() | |
| 1642 ->root(); | |
| 1643 | 1608 |
| 1644 EXPECT_EQ( | 1609 EXPECT_EQ( |
| 1645 " Site A ------------ proxies for B\n" | 1610 " Site A ------------ proxies for B\n" |
| 1646 " |--Site B ------- proxies for A\n" | 1611 " |--Site B ------- proxies for A\n" |
| 1647 " |--Site A ------- proxies for B\n" | 1612 " |--Site A ------- proxies for B\n" |
| 1648 " +--Site A ------- proxies for B\n" | 1613 " +--Site A ------- proxies for B\n" |
| 1649 "Where A = http://a.com/\n" | 1614 "Where A = http://a.com/\n" |
| 1650 " B = http://b.com/", | 1615 " B = http://b.com/", |
| 1651 DepictFrameTree(root)); | 1616 DepictFrameTree(root)); |
| 1652 SiteInstance* b_site_instance = | 1617 SiteInstance* b_site_instance = |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1707 // for which its parent has proxies. This includes A. However, even though | 1672 // for which its parent has proxies. This includes A. However, even though |
| 1708 // process A is live (step 4), the parent proxy in A is not live (which was | 1673 // process A is live (step 4), the parent proxy in A is not live (which was |
| 1709 // incorrectly assumed previously). This is because step 4 does not resurrect | 1674 // incorrectly assumed previously). This is because step 4 does not resurrect |
| 1710 // proxies for popups opened before the crash. | 1675 // proxies for popups opened before the crash. |
| 1711 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1676 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1712 CreateChildFrameAfterKillingOpener) { | 1677 CreateChildFrameAfterKillingOpener) { |
| 1713 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 1678 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 1714 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1679 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1715 | 1680 |
| 1716 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1681 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1717 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1682 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1718 ->GetFrameTree() | |
| 1719 ->root(); | |
| 1720 SiteInstance* site_instance_a = root->current_frame_host()->GetSiteInstance(); | 1683 SiteInstance* site_instance_a = root->current_frame_host()->GetSiteInstance(); |
| 1721 | 1684 |
| 1722 // Open a popup and navigate it cross-process to b.com. | 1685 // Open a popup and navigate it cross-process to b.com. |
| 1723 ShellAddedObserver new_shell_observer; | 1686 ShellAddedObserver new_shell_observer; |
| 1724 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), | 1687 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), |
| 1725 "popup = window.open('about:blank');")); | 1688 "popup = window.open('about:blank');")); |
| 1726 Shell* popup = new_shell_observer.GetShell(); | 1689 Shell* popup = new_shell_observer.GetShell(); |
| 1727 GURL popup_url(embedded_test_server()->GetURL("b.com", "/title2.html")); | 1690 GURL popup_url(embedded_test_server()->GetURL("b.com", "/title2.html")); |
| 1728 EXPECT_TRUE(NavigateToURL(popup, popup_url)); | 1691 EXPECT_TRUE(NavigateToURL(popup, popup_url)); |
| 1729 | 1692 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1795 // node1 is the root. | 1758 // node1 is the root. |
| 1796 // Initially, both node1.proxy_hosts_ and node3.proxy_hosts_ contain C. | 1759 // Initially, both node1.proxy_hosts_ and node3.proxy_hosts_ contain C. |
| 1797 // After we kill B, make sure proxies for C are cleared. | 1760 // After we kill B, make sure proxies for C are cleared. |
| 1798 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 1761 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 1799 KillingRendererClearsDescendantProxies) { | 1762 KillingRendererClearsDescendantProxies) { |
| 1800 GURL main_url(embedded_test_server()->GetURL( | 1763 GURL main_url(embedded_test_server()->GetURL( |
| 1801 "a.com", "/frame_tree/page_with_two_frames_nested.html")); | 1764 "a.com", "/frame_tree/page_with_two_frames_nested.html")); |
| 1802 NavigateToURL(shell(), main_url); | 1765 NavigateToURL(shell(), main_url); |
| 1803 | 1766 |
| 1804 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1767 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1805 FrameTreeNode* root = | 1768 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1806 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1807 GetFrameTree()->root(); | |
| 1808 ASSERT_EQ(2U, root->child_count()); | 1769 ASSERT_EQ(2U, root->child_count()); |
| 1809 | 1770 |
| 1810 GURL site_b_url( | 1771 GURL site_b_url( |
| 1811 embedded_test_server()->GetURL( | 1772 embedded_test_server()->GetURL( |
| 1812 "bar.com", "/frame_tree/page_with_one_frame.html")); | 1773 "bar.com", "/frame_tree/page_with_one_frame.html")); |
| 1813 // We can't use a TestNavigationObserver to verify the URL here, | 1774 // We can't use a TestNavigationObserver to verify the URL here, |
| 1814 // since the frame has children that may have clobbered it in the observer. | 1775 // since the frame has children that may have clobbered it in the observer. |
| 1815 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); | 1776 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); |
| 1816 | 1777 |
| 1817 // Ensure that a new process is created for node2. | 1778 // Ensure that a new process is created for node2. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1869 } | 1830 } |
| 1870 | 1831 |
| 1871 // Crash a subframe and ensures its children are cleared from the FrameTree. | 1832 // Crash a subframe and ensures its children are cleared from the FrameTree. |
| 1872 // See http://crbug.com/338508. | 1833 // See http://crbug.com/338508. |
| 1873 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrashSubframe) { | 1834 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrashSubframe) { |
| 1874 GURL main_url(embedded_test_server()->GetURL( | 1835 GURL main_url(embedded_test_server()->GetURL( |
| 1875 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 1836 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 1876 NavigateToURL(shell(), main_url); | 1837 NavigateToURL(shell(), main_url); |
| 1877 | 1838 |
| 1878 // Check the subframe process. | 1839 // Check the subframe process. |
| 1879 FrameTreeNode* root = | 1840 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1880 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 1881 GetFrameTree()->root(); | |
| 1882 EXPECT_EQ( | 1841 EXPECT_EQ( |
| 1883 " Site A ------------ proxies for B\n" | 1842 " Site A ------------ proxies for B\n" |
| 1884 " +--Site B ------- proxies for A\n" | 1843 " +--Site B ------- proxies for A\n" |
| 1885 "Where A = http://a.com/\n" | 1844 "Where A = http://a.com/\n" |
| 1886 " B = http://b.com/", | 1845 " B = http://b.com/", |
| 1887 DepictFrameTree(root)); | 1846 DepictFrameTree(root)); |
| 1888 FrameTreeNode* child = root->child_at(0); | 1847 FrameTreeNode* child = root->child_at(0); |
| 1889 EXPECT_TRUE( | 1848 EXPECT_TRUE( |
| 1890 child->current_frame_host()->render_view_host()->IsRenderViewLive()); | 1849 child->current_frame_host()->render_view_host()->IsRenderViewLive()); |
| 1891 EXPECT_TRUE(child->current_frame_host()->IsRenderFrameLive()); | 1850 EXPECT_TRUE(child->current_frame_host()->IsRenderFrameLive()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1932 // When a new subframe is added, related SiteInstances that can reach the | 1891 // When a new subframe is added, related SiteInstances that can reach the |
| 1933 // subframe should create proxies for it (https://crbug.com/423587). This test | 1892 // subframe should create proxies for it (https://crbug.com/423587). This test |
| 1934 // checks that if A embeds B and later adds a new subframe A2, A2 gets a proxy | 1893 // checks that if A embeds B and later adds a new subframe A2, A2 gets a proxy |
| 1935 // in B's process. | 1894 // in B's process. |
| 1936 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CreateProxiesForNewFrames) { | 1895 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CreateProxiesForNewFrames) { |
| 1937 GURL main_url(embedded_test_server()->GetURL( | 1896 GURL main_url(embedded_test_server()->GetURL( |
| 1938 "b.com", "/frame_tree/page_with_one_frame.html")); | 1897 "b.com", "/frame_tree/page_with_one_frame.html")); |
| 1939 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 1898 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 1940 | 1899 |
| 1941 // It is safe to obtain the root frame tree node here, as it doesn't change. | 1900 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 1942 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 1901 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 1943 ->GetFrameTree() | |
| 1944 ->root(); | |
| 1945 ASSERT_EQ(1U, root->child_count()); | 1902 ASSERT_EQ(1U, root->child_count()); |
| 1946 | 1903 |
| 1947 // Make sure the frame starts out at the correct cross-site URL. | 1904 // Make sure the frame starts out at the correct cross-site URL. |
| 1948 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), | 1905 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), |
| 1949 root->child_at(0)->current_url()); | 1906 root->child_at(0)->current_url()); |
| 1950 | 1907 |
| 1951 EXPECT_EQ( | 1908 EXPECT_EQ( |
| 1952 " Site A ------------ proxies for B\n" | 1909 " Site A ------------ proxies for B\n" |
| 1953 " +--Site B ------- proxies for A\n" | 1910 " +--Site B ------- proxies for A\n" |
| 1954 "Where A = http://b.com/\n" | 1911 "Where A = http://b.com/\n" |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2177 | 2134 |
| 2178 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are | 2135 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are |
| 2179 // created in the FrameTree skipping the subtree of the navigating frame. | 2136 // created in the FrameTree skipping the subtree of the navigating frame. |
| 2180 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2137 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2181 ProxyCreationSkipsSubtree) { | 2138 ProxyCreationSkipsSubtree) { |
| 2182 GURL main_url(embedded_test_server()->GetURL( | 2139 GURL main_url(embedded_test_server()->GetURL( |
| 2183 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); | 2140 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); |
| 2184 NavigateToURL(shell(), main_url); | 2141 NavigateToURL(shell(), main_url); |
| 2185 | 2142 |
| 2186 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2143 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2187 FrameTreeNode* root = | 2144 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2188 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 2189 GetFrameTree()->root(); | |
| 2190 | 2145 |
| 2191 EXPECT_TRUE(root->child_at(1) != NULL); | 2146 EXPECT_TRUE(root->child_at(1) != NULL); |
| 2192 EXPECT_EQ(2U, root->child_at(1)->child_count()); | 2147 EXPECT_EQ(2U, root->child_at(1)->child_count()); |
| 2193 | 2148 |
| 2194 { | 2149 { |
| 2195 // Load same-site page into iframe. | 2150 // Load same-site page into iframe. |
| 2196 TestNavigationObserver observer(shell()->web_contents()); | 2151 TestNavigationObserver observer(shell()->web_contents()); |
| 2197 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 2152 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 2198 NavigateFrameToURL(root->child_at(0), http_url); | 2153 NavigateFrameToURL(root->child_at(0), http_url); |
| 2199 EXPECT_EQ(http_url, observer.last_navigation_url()); | 2154 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2325 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2280 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2326 MAYBE_FrameOwnerPropertiesPropagationScrolling) { | 2281 MAYBE_FrameOwnerPropertiesPropagationScrolling) { |
| 2327 #if defined(OS_MACOSX) | 2282 #if defined(OS_MACOSX) |
| 2328 ui::test::ScopedPreferredScrollerStyle scroller_style_override(false); | 2283 ui::test::ScopedPreferredScrollerStyle scroller_style_override(false); |
| 2329 #endif | 2284 #endif |
| 2330 GURL main_url(embedded_test_server()->GetURL( | 2285 GURL main_url(embedded_test_server()->GetURL( |
| 2331 "a.com", "/frame_owner_properties_scrolling.html")); | 2286 "a.com", "/frame_owner_properties_scrolling.html")); |
| 2332 NavigateToURL(shell(), main_url); | 2287 NavigateToURL(shell(), main_url); |
| 2333 | 2288 |
| 2334 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2289 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2335 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2290 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2336 ->GetFrameTree() | |
| 2337 ->root(); | |
| 2338 ASSERT_EQ(1u, root->child_count()); | 2291 ASSERT_EQ(1u, root->child_count()); |
| 2339 | 2292 |
| 2340 EXPECT_EQ( | 2293 EXPECT_EQ( |
| 2341 " Site A ------------ proxies for B\n" | 2294 " Site A ------------ proxies for B\n" |
| 2342 " +--Site B ------- proxies for A\n" | 2295 " +--Site B ------- proxies for A\n" |
| 2343 "Where A = http://a.com/\n" | 2296 "Where A = http://a.com/\n" |
| 2344 " B = http://b.com/", | 2297 " B = http://b.com/", |
| 2345 DepictFrameTree(root)); | 2298 DepictFrameTree(root)); |
| 2346 | 2299 |
| 2347 FrameTreeNode* child = root->child_at(0); | 2300 FrameTreeNode* child = root->child_at(0); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2393 | 2346 |
| 2394 // Verify that "marginwidth" and "marginheight" properties on frame elements | 2347 // Verify that "marginwidth" and "marginheight" properties on frame elements |
| 2395 // propagate to child frames correctly. | 2348 // propagate to child frames correctly. |
| 2396 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2349 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2397 FrameOwnerPropertiesPropagationMargin) { | 2350 FrameOwnerPropertiesPropagationMargin) { |
| 2398 GURL main_url(embedded_test_server()->GetURL( | 2351 GURL main_url(embedded_test_server()->GetURL( |
| 2399 "a.com", "/frame_owner_properties_margin.html")); | 2352 "a.com", "/frame_owner_properties_margin.html")); |
| 2400 NavigateToURL(shell(), main_url); | 2353 NavigateToURL(shell(), main_url); |
| 2401 | 2354 |
| 2402 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2355 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2403 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2356 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2404 ->GetFrameTree() | |
| 2405 ->root(); | |
| 2406 ASSERT_EQ(1u, root->child_count()); | 2357 ASSERT_EQ(1u, root->child_count()); |
| 2407 | 2358 |
| 2408 EXPECT_EQ( | 2359 EXPECT_EQ( |
| 2409 " Site A ------------ proxies for B\n" | 2360 " Site A ------------ proxies for B\n" |
| 2410 " +--Site B ------- proxies for A\n" | 2361 " +--Site B ------- proxies for A\n" |
| 2411 "Where A = http://a.com/\n" | 2362 "Where A = http://a.com/\n" |
| 2412 " B = http://b.com/", | 2363 " B = http://b.com/", |
| 2413 DepictFrameTree(root)); | 2364 DepictFrameTree(root)); |
| 2414 | 2365 |
| 2415 FrameTreeNode* child = root->child_at(0); | 2366 FrameTreeNode* child = root->child_at(0); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2482 } | 2433 } |
| 2483 } | 2434 } |
| 2484 | 2435 |
| 2485 // Verify origin replication with an A-embed-B-embed-C-embed-A hierarchy. | 2436 // Verify origin replication with an A-embed-B-embed-C-embed-A hierarchy. |
| 2486 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginReplication) { | 2437 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginReplication) { |
| 2487 GURL main_url(embedded_test_server()->GetURL( | 2438 GURL main_url(embedded_test_server()->GetURL( |
| 2488 "a.com", "/cross_site_iframe_factory.html?a(b(c(a),b), a)")); | 2439 "a.com", "/cross_site_iframe_factory.html?a(b(c(a),b), a)")); |
| 2489 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2440 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2490 | 2441 |
| 2491 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2442 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2492 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2443 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2493 ->GetFrameTree() | |
| 2494 ->root(); | |
| 2495 | 2444 |
| 2496 EXPECT_EQ( | 2445 EXPECT_EQ( |
| 2497 " Site A ------------ proxies for B C\n" | 2446 " Site A ------------ proxies for B C\n" |
| 2498 " |--Site B ------- proxies for A C\n" // tiptop_child | 2447 " |--Site B ------- proxies for A C\n" // tiptop_child |
| 2499 " | |--Site C -- proxies for A B\n" // middle_child | 2448 " | |--Site C -- proxies for A B\n" // middle_child |
| 2500 " | | +--Site A -- proxies for B C\n" // lowest_child | 2449 " | | +--Site A -- proxies for B C\n" // lowest_child |
| 2501 " | +--Site B -- proxies for A C\n" | 2450 " | +--Site B -- proxies for A C\n" |
| 2502 " +--Site A ------- proxies for B C\n" | 2451 " +--Site A ------- proxies for B C\n" |
| 2503 "Where A = http://a.com/\n" | 2452 "Where A = http://a.com/\n" |
| 2504 " B = http://b.com/\n" | 2453 " B = http://b.com/\n" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2573 &result)); | 2522 &result)); |
| 2574 EXPECT_EQ(a_origin, result + "/"); | 2523 EXPECT_EQ(a_origin, result + "/"); |
| 2575 } | 2524 } |
| 2576 | 2525 |
| 2577 // Check that iframe sandbox flags are replicated correctly. | 2526 // Check that iframe sandbox flags are replicated correctly. |
| 2578 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsReplication) { | 2527 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsReplication) { |
| 2579 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html")); | 2528 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html")); |
| 2580 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2529 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2581 | 2530 |
| 2582 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2531 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2583 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2532 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2584 ->GetFrameTree() | |
| 2585 ->root(); | |
| 2586 | 2533 |
| 2587 TestNavigationObserver observer(shell()->web_contents()); | 2534 TestNavigationObserver observer(shell()->web_contents()); |
| 2588 | 2535 |
| 2589 // Navigate the second (sandboxed) subframe to a cross-site page with a | 2536 // Navigate the second (sandboxed) subframe to a cross-site page with a |
| 2590 // subframe. | 2537 // subframe. |
| 2591 GURL foo_url( | 2538 GURL foo_url( |
| 2592 embedded_test_server()->GetURL("foo.com", "/frame_tree/1-1.html")); | 2539 embedded_test_server()->GetURL("foo.com", "/frame_tree/1-1.html")); |
| 2593 NavigateFrameToURL(root->child_at(1), foo_url); | 2540 NavigateFrameToURL(root->child_at(1), foo_url); |
| 2594 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 2541 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| 2595 | 2542 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2673 EXPECT_EQ(main_url.GetOrigin().spec(), result + "/"); | 2620 EXPECT_EQ(main_url.GetOrigin().spec(), result + "/"); |
| 2674 } | 2621 } |
| 2675 | 2622 |
| 2676 // Check that dynamic updates to iframe sandbox flags are propagated correctly. | 2623 // Check that dynamic updates to iframe sandbox flags are propagated correctly. |
| 2677 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicSandboxFlags) { | 2624 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicSandboxFlags) { |
| 2678 GURL main_url( | 2625 GURL main_url( |
| 2679 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); | 2626 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); |
| 2680 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2627 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2681 | 2628 |
| 2682 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2629 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2683 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2630 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2684 ->GetFrameTree() | |
| 2685 ->root(); | |
| 2686 | 2631 |
| 2687 TestNavigationObserver observer(shell()->web_contents()); | 2632 TestNavigationObserver observer(shell()->web_contents()); |
| 2688 ASSERT_EQ(2U, root->child_count()); | 2633 ASSERT_EQ(2U, root->child_count()); |
| 2689 | 2634 |
| 2690 // Make sure first frame starts out at the correct cross-site page. | 2635 // Make sure first frame starts out at the correct cross-site page. |
| 2691 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), | 2636 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), |
| 2692 root->child_at(0)->current_url()); | 2637 root->child_at(0)->current_url()); |
| 2693 | 2638 |
| 2694 // Navigate second frame to another cross-site page. | 2639 // Navigate second frame to another cross-site page. |
| 2695 GURL baz_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); | 2640 GURL baz_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2797 } | 2742 } |
| 2798 | 2743 |
| 2799 // Check that dynamic updates to iframe sandbox flags are propagated correctly. | 2744 // Check that dynamic updates to iframe sandbox flags are propagated correctly. |
| 2800 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2745 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2801 DynamicSandboxFlagsRemoteToLocal) { | 2746 DynamicSandboxFlagsRemoteToLocal) { |
| 2802 GURL main_url( | 2747 GURL main_url( |
| 2803 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); | 2748 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); |
| 2804 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2749 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2805 | 2750 |
| 2806 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2751 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2807 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2752 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2808 ->GetFrameTree() | |
| 2809 ->root(); | |
| 2810 | 2753 |
| 2811 TestNavigationObserver observer(shell()->web_contents()); | 2754 TestNavigationObserver observer(shell()->web_contents()); |
| 2812 ASSERT_EQ(2U, root->child_count()); | 2755 ASSERT_EQ(2U, root->child_count()); |
| 2813 | 2756 |
| 2814 // Make sure the two frames starts out at correct URLs. | 2757 // Make sure the two frames starts out at correct URLs. |
| 2815 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), | 2758 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), |
| 2816 root->child_at(0)->current_url()); | 2759 root->child_at(0)->current_url()); |
| 2817 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html"), | 2760 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html"), |
| 2818 root->child_at(1)->current_url()); | 2761 root->child_at(1)->current_url()); |
| 2819 | 2762 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2867 } | 2810 } |
| 2868 | 2811 |
| 2869 // Check that dynamic updates to iframe sandbox flags are propagated correctly. | 2812 // Check that dynamic updates to iframe sandbox flags are propagated correctly. |
| 2870 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2813 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2871 DynamicSandboxFlagsRendererInitiatedNavigation) { | 2814 DynamicSandboxFlagsRendererInitiatedNavigation) { |
| 2872 GURL main_url( | 2815 GURL main_url( |
| 2873 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); | 2816 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); |
| 2874 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2817 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2875 | 2818 |
| 2876 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2819 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2877 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2820 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2878 ->GetFrameTree() | |
| 2879 ->root(); | |
| 2880 | 2821 |
| 2881 TestNavigationObserver observer(shell()->web_contents()); | 2822 TestNavigationObserver observer(shell()->web_contents()); |
| 2882 ASSERT_EQ(1U, root->child_count()); | 2823 ASSERT_EQ(1U, root->child_count()); |
| 2883 | 2824 |
| 2884 // Make sure the frame starts out at the correct cross-site page. | 2825 // Make sure the frame starts out at the correct cross-site page. |
| 2885 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), | 2826 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), |
| 2886 root->child_at(0)->current_url()); | 2827 root->child_at(0)->current_url()); |
| 2887 | 2828 |
| 2888 // The frame should not be sandboxed to start with. | 2829 // The frame should not be sandboxed to start with. |
| 2889 EXPECT_EQ(blink::WebSandboxFlags::None, | 2830 EXPECT_EQ(blink::WebSandboxFlags::None, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2948 // checking whether the grandchild frame added in step 3 sees proper sandbox | 2889 // checking whether the grandchild frame added in step 3 sees proper sandbox |
| 2949 // flags and origin for its (remote) parent. This wasn't addressed when | 2890 // flags and origin for its (remote) parent. This wasn't addressed when |
| 2950 // https://crbug.com/423587 was fixed. | 2891 // https://crbug.com/423587 was fixed. |
| 2951 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 2892 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 2952 ProxiesForNewChildFramesHaveCorrectReplicationState) { | 2893 ProxiesForNewChildFramesHaveCorrectReplicationState) { |
| 2953 GURL main_url( | 2894 GURL main_url( |
| 2954 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); | 2895 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); |
| 2955 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2896 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 2956 | 2897 |
| 2957 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2898 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 2958 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2899 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 2959 ->GetFrameTree() | |
| 2960 ->root(); | |
| 2961 TestNavigationObserver observer(shell()->web_contents()); | 2900 TestNavigationObserver observer(shell()->web_contents()); |
| 2962 | 2901 |
| 2963 EXPECT_EQ( | 2902 EXPECT_EQ( |
| 2964 " Site A ------------ proxies for B\n" | 2903 " Site A ------------ proxies for B\n" |
| 2965 " +--Site B ------- proxies for A\n" | 2904 " +--Site B ------- proxies for A\n" |
| 2966 "Where A = http://127.0.0.1/\n" | 2905 "Where A = http://127.0.0.1/\n" |
| 2967 " B = http://baz.com/", | 2906 " B = http://baz.com/", |
| 2968 DepictFrameTree(root)); | 2907 DepictFrameTree(root)); |
| 2969 | 2908 |
| 2970 // In the root frame, add a new sandboxed local frame, which itself has a | 2909 // In the root frame, add a new sandboxed local frame, which itself has a |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3029 EXPECT_TRUE(success); | 2968 EXPECT_TRUE(success); |
| 3030 EXPECT_EQ(1u, Shell::windows().size()); | 2969 EXPECT_EQ(1u, Shell::windows().size()); |
| 3031 } | 2970 } |
| 3032 | 2971 |
| 3033 // Verify that a child frame can retrieve the name property set by its parent. | 2972 // Verify that a child frame can retrieve the name property set by its parent. |
| 3034 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, WindowNameReplication) { | 2973 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, WindowNameReplication) { |
| 3035 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); | 2974 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); |
| 3036 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 2975 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3037 | 2976 |
| 3038 // It is safe to obtain the root frame tree node here, as it doesn't change. | 2977 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3039 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 2978 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3040 ->GetFrameTree() | |
| 3041 ->root(); | |
| 3042 | 2979 |
| 3043 TestNavigationObserver observer(shell()->web_contents()); | 2980 TestNavigationObserver observer(shell()->web_contents()); |
| 3044 | 2981 |
| 3045 // Load cross-site page into iframe. | 2982 // Load cross-site page into iframe. |
| 3046 GURL frame_url = | 2983 GURL frame_url = |
| 3047 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); | 2984 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); |
| 3048 NavigateFrameToURL(root->child_at(0), frame_url); | 2985 NavigateFrameToURL(root->child_at(0), frame_url); |
| 3049 EXPECT_TRUE(observer.last_navigation_succeeded()); | 2986 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 3050 EXPECT_EQ(frame_url, observer.last_navigation_url()); | 2987 EXPECT_EQ(frame_url, observer.last_navigation_url()); |
| 3051 | 2988 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 3062 EXPECT_EQ("3-1-name", result); | 2999 EXPECT_EQ("3-1-name", result); |
| 3063 } | 3000 } |
| 3064 | 3001 |
| 3065 // Verify that dynamic updates to a frame's window.name propagate to the | 3002 // Verify that dynamic updates to a frame's window.name propagate to the |
| 3066 // frame's proxies, so that the latest frame names can be used in navigations. | 3003 // frame's proxies, so that the latest frame names can be used in navigations. |
| 3067 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicWindowName) { | 3004 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicWindowName) { |
| 3068 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); | 3005 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); |
| 3069 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3006 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3070 | 3007 |
| 3071 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3008 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3072 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3009 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3073 ->GetFrameTree() | |
| 3074 ->root(); | |
| 3075 TestNavigationObserver observer(shell()->web_contents()); | 3010 TestNavigationObserver observer(shell()->web_contents()); |
| 3076 | 3011 |
| 3077 // Load cross-site page into iframe. | 3012 // Load cross-site page into iframe. |
| 3078 GURL frame_url = | 3013 GURL frame_url = |
| 3079 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); | 3014 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); |
| 3080 NavigateFrameToURL(root->child_at(0), frame_url); | 3015 NavigateFrameToURL(root->child_at(0), frame_url); |
| 3081 EXPECT_TRUE(observer.last_navigation_succeeded()); | 3016 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 3082 EXPECT_EQ(frame_url, observer.last_navigation_url()); | 3017 EXPECT_EQ(frame_url, observer.last_navigation_url()); |
| 3083 | 3018 |
| 3084 // Browser process should know the child frame's original window.name | 3019 // Browser process should know the child frame's original window.name |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3121 } | 3056 } |
| 3122 | 3057 |
| 3123 // Verify that when a frame is navigated to a new origin, the origin update | 3058 // Verify that when a frame is navigated to a new origin, the origin update |
| 3124 // propagates to the frame's proxies. | 3059 // propagates to the frame's proxies. |
| 3125 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginUpdatesReachProxies) { | 3060 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginUpdatesReachProxies) { |
| 3126 GURL main_url( | 3061 GURL main_url( |
| 3127 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); | 3062 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); |
| 3128 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3063 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3129 | 3064 |
| 3130 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3065 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3131 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3066 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3132 ->GetFrameTree() | |
| 3133 ->root(); | |
| 3134 TestNavigationObserver observer(shell()->web_contents()); | 3067 TestNavigationObserver observer(shell()->web_contents()); |
| 3135 | 3068 |
| 3136 EXPECT_EQ( | 3069 EXPECT_EQ( |
| 3137 " Site A ------------ proxies for B\n" | 3070 " Site A ------------ proxies for B\n" |
| 3138 " |--Site B ------- proxies for A\n" | 3071 " |--Site B ------- proxies for A\n" |
| 3139 " +--Site A ------- proxies for B\n" | 3072 " +--Site A ------- proxies for B\n" |
| 3140 "Where A = http://127.0.0.1/\n" | 3073 "Where A = http://127.0.0.1/\n" |
| 3141 " B = http://bar.com/", | 3074 " B = http://bar.com/", |
| 3142 DepictFrameTree(root)); | 3075 DepictFrameTree(root)); |
| 3143 | 3076 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 3174 << frame_origin << ")"; | 3107 << frame_origin << ")"; |
| 3175 } | 3108 } |
| 3176 | 3109 |
| 3177 // Ensure that navigating subframes in --site-per-process mode properly fires | 3110 // Ensure that navigating subframes in --site-per-process mode properly fires |
| 3178 // the DidStopLoading event on WebContentsObserver. | 3111 // the DidStopLoading event on WebContentsObserver. |
| 3179 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteDidStopLoading) { | 3112 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteDidStopLoading) { |
| 3180 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | 3113 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); |
| 3181 NavigateToURL(shell(), main_url); | 3114 NavigateToURL(shell(), main_url); |
| 3182 | 3115 |
| 3183 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3116 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3184 FrameTreeNode* root = | 3117 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3185 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 3186 GetFrameTree()->root(); | |
| 3187 | 3118 |
| 3188 TestNavigationObserver observer(shell()->web_contents()); | 3119 TestNavigationObserver observer(shell()->web_contents()); |
| 3189 | 3120 |
| 3190 // Load same-site page into iframe. | 3121 // Load same-site page into iframe. |
| 3191 FrameTreeNode* child = root->child_at(0); | 3122 FrameTreeNode* child = root->child_at(0); |
| 3192 GURL http_url(embedded_test_server()->GetURL("/title1.html")); | 3123 GURL http_url(embedded_test_server()->GetURL("/title1.html")); |
| 3193 NavigateFrameToURL(child, http_url); | 3124 NavigateFrameToURL(child, http_url); |
| 3194 EXPECT_EQ(http_url, observer.last_navigation_url()); | 3125 EXPECT_EQ(http_url, observer.last_navigation_url()); |
| 3195 EXPECT_TRUE(observer.last_navigation_succeeded()); | 3126 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 3196 | 3127 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 3210 | 3141 |
| 3211 // Ensure that the renderer does not crash when navigating a frame that has a | 3142 // Ensure that the renderer does not crash when navigating a frame that has a |
| 3212 // sibling RemoteFrame. See https://crbug.com/426953. | 3143 // sibling RemoteFrame. See https://crbug.com/426953. |
| 3213 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3144 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3214 NavigateWithSiblingRemoteFrame) { | 3145 NavigateWithSiblingRemoteFrame) { |
| 3215 GURL main_url( | 3146 GURL main_url( |
| 3216 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); | 3147 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); |
| 3217 NavigateToURL(shell(), main_url); | 3148 NavigateToURL(shell(), main_url); |
| 3218 | 3149 |
| 3219 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3150 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3220 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3151 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3221 ->GetFrameTree() | |
| 3222 ->root(); | |
| 3223 TestNavigationObserver observer(shell()->web_contents()); | 3152 TestNavigationObserver observer(shell()->web_contents()); |
| 3224 | 3153 |
| 3225 // Make sure the first frame is out of process. | 3154 // Make sure the first frame is out of process. |
| 3226 ASSERT_EQ(2U, root->child_count()); | 3155 ASSERT_EQ(2U, root->child_count()); |
| 3227 FrameTreeNode* node2 = root->child_at(0); | 3156 FrameTreeNode* node2 = root->child_at(0); |
| 3228 EXPECT_NE(root->current_frame_host()->GetSiteInstance(), | 3157 EXPECT_NE(root->current_frame_host()->GetSiteInstance(), |
| 3229 node2->current_frame_host()->GetSiteInstance()); | 3158 node2->current_frame_host()->GetSiteInstance()); |
| 3230 | 3159 |
| 3231 // Make sure the second frame is in the parent's process. | 3160 // Make sure the second frame is in the parent's process. |
| 3232 FrameTreeNode* node3 = root->child_at(1); | 3161 FrameTreeNode* node3 = root->child_at(1); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 3246 // Ensure that the renderer does not crash when a local frame with a remote | 3175 // Ensure that the renderer does not crash when a local frame with a remote |
| 3247 // parent frame is swapped from local to remote, then back to local again. | 3176 // parent frame is swapped from local to remote, then back to local again. |
| 3248 // See https://crbug.com/585654. | 3177 // See https://crbug.com/585654. |
| 3249 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3178 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3250 NavigateSiblingsToSameProcess) { | 3179 NavigateSiblingsToSameProcess) { |
| 3251 GURL main_url( | 3180 GURL main_url( |
| 3252 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); | 3181 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); |
| 3253 NavigateToURL(shell(), main_url); | 3182 NavigateToURL(shell(), main_url); |
| 3254 | 3183 |
| 3255 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3184 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3256 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3185 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3257 ->GetFrameTree() | |
| 3258 ->root(); | |
| 3259 | 3186 |
| 3260 FrameTreeNode* node2 = root->child_at(0); | 3187 FrameTreeNode* node2 = root->child_at(0); |
| 3261 FrameTreeNode* node3 = root->child_at(1); | 3188 FrameTreeNode* node3 = root->child_at(1); |
| 3262 | 3189 |
| 3263 // Navigate the second iframe to the same process as the first. | 3190 // Navigate the second iframe to the same process as the first. |
| 3264 GURL frame_url = embedded_test_server()->GetURL("bar.com", "/title1.html"); | 3191 GURL frame_url = embedded_test_server()->GetURL("bar.com", "/title1.html"); |
| 3265 NavigateFrameToURL(node3, frame_url); | 3192 NavigateFrameToURL(node3, frame_url); |
| 3266 | 3193 |
| 3267 // Verify that they are in the same process. | 3194 // Verify that they are in the same process. |
| 3268 EXPECT_EQ(node2->current_frame_host()->GetSiteInstance(), | 3195 EXPECT_EQ(node2->current_frame_host()->GetSiteInstance(), |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 3293 { | 3220 { |
| 3294 GURL main_url( | 3221 GURL main_url( |
| 3295 embedded_test_server()->GetURL("/frame_with_load_event.html")); | 3222 embedded_test_server()->GetURL("/frame_with_load_event.html")); |
| 3296 base::string16 expected_title(base::UTF8ToUTF16("LOADED")); | 3223 base::string16 expected_title(base::UTF8ToUTF16("LOADED")); |
| 3297 TitleWatcher title_watcher(shell()->web_contents(), expected_title); | 3224 TitleWatcher title_watcher(shell()->web_contents(), expected_title); |
| 3298 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3225 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3299 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); | 3226 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); |
| 3300 } | 3227 } |
| 3301 | 3228 |
| 3302 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3229 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3303 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3230 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3304 ->GetFrameTree() | |
| 3305 ->root(); | |
| 3306 | 3231 |
| 3307 // Load another cross-site page into the iframe and check that the load event | 3232 // Load another cross-site page into the iframe and check that the load event |
| 3308 // is fired. | 3233 // is fired. |
| 3309 { | 3234 { |
| 3310 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); | 3235 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); |
| 3311 base::string16 expected_title(base::UTF8ToUTF16("LOADEDLOADED")); | 3236 base::string16 expected_title(base::UTF8ToUTF16("LOADEDLOADED")); |
| 3312 TitleWatcher title_watcher(shell()->web_contents(), expected_title); | 3237 TitleWatcher title_watcher(shell()->web_contents(), expected_title); |
| 3313 TestNavigationObserver observer(shell()->web_contents()); | 3238 TestNavigationObserver observer(shell()->web_contents()); |
| 3314 NavigateFrameToURL(root->child_at(0), foo_url); | 3239 NavigateFrameToURL(root->child_at(0), foo_url); |
| 3315 EXPECT_TRUE(observer.last_navigation_succeeded()); | 3240 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 3316 EXPECT_EQ(foo_url, observer.last_navigation_url()); | 3241 EXPECT_EQ(foo_url, observer.last_navigation_url()); |
| 3317 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); | 3242 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); |
| 3318 } | 3243 } |
| 3319 } | 3244 } |
| 3320 | 3245 |
| 3321 // Check that postMessage can be routed between cross-site iframes. | 3246 // Check that postMessage can be routed between cross-site iframes. |
| 3322 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframePostMessage) { | 3247 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframePostMessage) { |
| 3323 GURL main_url(embedded_test_server()->GetURL( | 3248 GURL main_url(embedded_test_server()->GetURL( |
| 3324 "/frame_tree/page_with_post_message_frames.html")); | 3249 "/frame_tree/page_with_post_message_frames.html")); |
| 3325 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3250 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3326 | 3251 |
| 3327 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3252 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3328 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3253 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3329 ->GetFrameTree() | |
| 3330 ->root(); | |
| 3331 | 3254 |
| 3332 ASSERT_EQ(2U, root->child_count()); | 3255 ASSERT_EQ(2U, root->child_count()); |
| 3333 | 3256 |
| 3334 // Verify the frames start at correct URLs. First frame should be | 3257 // Verify the frames start at correct URLs. First frame should be |
| 3335 // same-site; second frame should be cross-site. | 3258 // same-site; second frame should be cross-site. |
| 3336 GURL same_site_url(embedded_test_server()->GetURL("/post_message.html")); | 3259 GURL same_site_url(embedded_test_server()->GetURL("/post_message.html")); |
| 3337 EXPECT_EQ(same_site_url, root->child_at(0)->current_url()); | 3260 EXPECT_EQ(same_site_url, root->child_at(0)->current_url()); |
| 3338 GURL foo_url(embedded_test_server()->GetURL("foo.com", | 3261 GURL foo_url(embedded_test_server()->GetURL("foo.com", |
| 3339 "/post_message.html")); | 3262 "/post_message.html")); |
| 3340 EXPECT_EQ(foo_url, root->child_at(1)->current_url()); | 3263 EXPECT_EQ(foo_url, root->child_at(1)->current_url()); |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 3366 | 3289 |
| 3367 // Check that postMessage can be sent from a subframe on a cross-process opener | 3290 // Check that postMessage can be sent from a subframe on a cross-process opener |
| 3368 // tab, and that its event.source points to a valid proxy. | 3291 // tab, and that its event.source points to a valid proxy. |
| 3369 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3292 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3370 PostMessageWithSubframeOnOpenerChain) { | 3293 PostMessageWithSubframeOnOpenerChain) { |
| 3371 GURL main_url(embedded_test_server()->GetURL( | 3294 GURL main_url(embedded_test_server()->GetURL( |
| 3372 "a.com", "/frame_tree/page_with_post_message_frames.html")); | 3295 "a.com", "/frame_tree/page_with_post_message_frames.html")); |
| 3373 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3296 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3374 | 3297 |
| 3375 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3298 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3376 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3299 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3377 ->GetFrameTree() | |
| 3378 ->root(); | |
| 3379 | 3300 |
| 3380 ASSERT_EQ(2U, root->child_count()); | 3301 ASSERT_EQ(2U, root->child_count()); |
| 3381 | 3302 |
| 3382 // Verify the initial state of the world. First frame should be same-site; | 3303 // Verify the initial state of the world. First frame should be same-site; |
| 3383 // second frame should be cross-site. | 3304 // second frame should be cross-site. |
| 3384 EXPECT_EQ( | 3305 EXPECT_EQ( |
| 3385 " Site A ------------ proxies for B\n" | 3306 " Site A ------------ proxies for B\n" |
| 3386 " |--Site A ------- proxies for B\n" | 3307 " |--Site A ------- proxies for B\n" |
| 3387 " +--Site B ------- proxies for A\n" | 3308 " +--Site B ------- proxies for A\n" |
| 3388 "Where A = http://a.com/\n" | 3309 "Where A = http://a.com/\n" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3477 | 3398 |
| 3478 // Check that parent.frames[num] references correct sibling frames when the | 3399 // Check that parent.frames[num] references correct sibling frames when the |
| 3479 // parent is remote. See https://crbug.com/478792. | 3400 // parent is remote. See https://crbug.com/478792. |
| 3480 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, IndexedFrameAccess) { | 3401 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, IndexedFrameAccess) { |
| 3481 // Start on a page with three same-site subframes. | 3402 // Start on a page with three same-site subframes. |
| 3482 GURL main_url( | 3403 GURL main_url( |
| 3483 embedded_test_server()->GetURL("a.com", "/frame_tree/top.html")); | 3404 embedded_test_server()->GetURL("a.com", "/frame_tree/top.html")); |
| 3484 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3405 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3485 | 3406 |
| 3486 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3407 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3487 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3408 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3488 ->GetFrameTree() | |
| 3489 ->root(); | |
| 3490 ASSERT_EQ(3U, root->child_count()); | 3409 ASSERT_EQ(3U, root->child_count()); |
| 3491 FrameTreeNode* child0 = root->child_at(0); | 3410 FrameTreeNode* child0 = root->child_at(0); |
| 3492 FrameTreeNode* child1 = root->child_at(1); | 3411 FrameTreeNode* child1 = root->child_at(1); |
| 3493 FrameTreeNode* child2 = root->child_at(2); | 3412 FrameTreeNode* child2 = root->child_at(2); |
| 3494 | 3413 |
| 3495 // Send each of the frames to a different site. Each new renderer will first | 3414 // Send each of the frames to a different site. Each new renderer will first |
| 3496 // create proxies for the parent and two sibling subframes and then create | 3415 // create proxies for the parent and two sibling subframes and then create |
| 3497 // and insert the new RenderFrame into the frame tree. | 3416 // and insert the new RenderFrame into the frame tree. |
| 3498 GURL b_url(embedded_test_server()->GetURL("b.com", "/post_message.html")); | 3417 GURL b_url(embedded_test_server()->GetURL("b.com", "/post_message.html")); |
| 3499 GURL c_url(embedded_test_server()->GetURL("c.com", "/post_message.html")); | 3418 GURL c_url(embedded_test_server()->GetURL("c.com", "/post_message.html")); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3549 EXPECT_EQ(1, GetReceivedMessages(child0)); | 3468 EXPECT_EQ(1, GetReceivedMessages(child0)); |
| 3550 EXPECT_EQ(2, GetReceivedMessages(child1)); | 3469 EXPECT_EQ(2, GetReceivedMessages(child1)); |
| 3551 EXPECT_EQ(1, GetReceivedMessages(child2)); | 3470 EXPECT_EQ(1, GetReceivedMessages(child2)); |
| 3552 } | 3471 } |
| 3553 | 3472 |
| 3554 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RFPHDestruction) { | 3473 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RFPHDestruction) { |
| 3555 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | 3474 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); |
| 3556 NavigateToURL(shell(), main_url); | 3475 NavigateToURL(shell(), main_url); |
| 3557 | 3476 |
| 3558 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3477 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3559 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3478 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3560 ->GetFrameTree() | |
| 3561 ->root(); | |
| 3562 | 3479 |
| 3563 TestNavigationObserver observer(shell()->web_contents()); | 3480 TestNavigationObserver observer(shell()->web_contents()); |
| 3564 | 3481 |
| 3565 // Load cross-site page into iframe. | 3482 // Load cross-site page into iframe. |
| 3566 FrameTreeNode* child = root->child_at(0); | 3483 FrameTreeNode* child = root->child_at(0); |
| 3567 GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html"); | 3484 GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html"); |
| 3568 NavigateFrameToURL(root->child_at(0), url); | 3485 NavigateFrameToURL(root->child_at(0), url); |
| 3569 EXPECT_TRUE(observer.last_navigation_succeeded()); | 3486 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 3570 EXPECT_EQ(url, observer.last_navigation_url()); | 3487 EXPECT_EQ(url, observer.last_navigation_url()); |
| 3571 EXPECT_EQ( | 3488 EXPECT_EQ( |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3610 "Where A = http://127.0.0.1/", | 3527 "Where A = http://127.0.0.1/", |
| 3611 DepictFrameTree(root)); | 3528 DepictFrameTree(root)); |
| 3612 } | 3529 } |
| 3613 | 3530 |
| 3614 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OpenPopupWithRemoteParent) { | 3531 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OpenPopupWithRemoteParent) { |
| 3615 GURL main_url( | 3532 GURL main_url( |
| 3616 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); | 3533 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); |
| 3617 NavigateToURL(shell(), main_url); | 3534 NavigateToURL(shell(), main_url); |
| 3618 | 3535 |
| 3619 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3536 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3620 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3537 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3621 ->GetFrameTree() | |
| 3622 ->root(); | |
| 3623 | 3538 |
| 3624 // Navigate first child cross-site. | 3539 // Navigate first child cross-site. |
| 3625 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); | 3540 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); |
| 3626 NavigateFrameToURL(root->child_at(0), frame_url); | 3541 NavigateFrameToURL(root->child_at(0), frame_url); |
| 3627 | 3542 |
| 3628 // Open a popup from the first child. | 3543 // Open a popup from the first child. |
| 3629 Shell* new_shell = OpenPopup(root->child_at(0)->current_frame_host(), | 3544 Shell* new_shell = OpenPopup(root->child_at(0)->current_frame_host(), |
| 3630 GURL(url::kAboutBlankURL), ""); | 3545 GURL(url::kAboutBlankURL), ""); |
| 3631 EXPECT_TRUE(new_shell); | 3546 EXPECT_TRUE(new_shell); |
| 3632 | 3547 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3714 | 3629 |
| 3715 // Verify that named frames are discoverable from their opener's ancestors. | 3630 // Verify that named frames are discoverable from their opener's ancestors. |
| 3716 // See https://crbug.com/511474. | 3631 // See https://crbug.com/511474. |
| 3717 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3632 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3718 DiscoverNamedFrameFromAncestorOfOpener) { | 3633 DiscoverNamedFrameFromAncestorOfOpener) { |
| 3719 GURL main_url( | 3634 GURL main_url( |
| 3720 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); | 3635 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); |
| 3721 NavigateToURL(shell(), main_url); | 3636 NavigateToURL(shell(), main_url); |
| 3722 | 3637 |
| 3723 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3638 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3724 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3639 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3725 ->GetFrameTree() | |
| 3726 ->root(); | |
| 3727 | 3640 |
| 3728 // Navigate first child cross-site. | 3641 // Navigate first child cross-site. |
| 3729 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); | 3642 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); |
| 3730 NavigateFrameToURL(root->child_at(0), frame_url); | 3643 NavigateFrameToURL(root->child_at(0), frame_url); |
| 3731 | 3644 |
| 3732 // Open a popup named "foo" from the first child. | 3645 // Open a popup named "foo" from the first child. |
| 3733 Shell* foo_shell = OpenPopup(root->child_at(0)->current_frame_host(), | 3646 Shell* foo_shell = OpenPopup(root->child_at(0)->current_frame_host(), |
| 3734 GURL(url::kAboutBlankURL), "foo"); | 3647 GURL(url::kAboutBlankURL), "foo"); |
| 3735 EXPECT_TRUE(foo_shell); | 3648 EXPECT_TRUE(foo_shell); |
| 3736 | 3649 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 3767 // still be discoverable from its opener's ancestors. Also, instead of using | 3680 // still be discoverable from its opener's ancestors. Also, instead of using |
| 3768 // an opener's ancestor, this test uses a popup with same origin as that | 3681 // an opener's ancestor, this test uses a popup with same origin as that |
| 3769 // ancestor. See https://crbug.com/511474. | 3682 // ancestor. See https://crbug.com/511474. |
| 3770 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3683 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3771 DiscoverFrameAfterSettingWindowName) { | 3684 DiscoverFrameAfterSettingWindowName) { |
| 3772 GURL main_url( | 3685 GURL main_url( |
| 3773 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); | 3686 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); |
| 3774 NavigateToURL(shell(), main_url); | 3687 NavigateToURL(shell(), main_url); |
| 3775 | 3688 |
| 3776 // It is safe to obtain the root frame tree node here, as it doesn't change. | 3689 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 3777 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3690 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3778 ->GetFrameTree() | |
| 3779 ->root(); | |
| 3780 | 3691 |
| 3781 // Open a same-site popup from the main frame. | 3692 // Open a same-site popup from the main frame. |
| 3782 GURL a_com_url(embedded_test_server()->GetURL("a.com", "/title3.html")); | 3693 GURL a_com_url(embedded_test_server()->GetURL("a.com", "/title3.html")); |
| 3783 Shell* a_com_shell = | 3694 Shell* a_com_shell = |
| 3784 OpenPopup(root->child_at(0)->current_frame_host(), a_com_url, ""); | 3695 OpenPopup(root->child_at(0)->current_frame_host(), a_com_url, ""); |
| 3785 EXPECT_TRUE(a_com_shell); | 3696 EXPECT_TRUE(a_com_shell); |
| 3786 | 3697 |
| 3787 // Navigate first child on main frame cross-site. | 3698 // Navigate first child on main frame cross-site. |
| 3788 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); | 3699 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); |
| 3789 NavigateFrameToURL(root->child_at(0), frame_url); | 3700 NavigateFrameToURL(root->child_at(0), frame_url); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3827 // ^ | | 3738 // ^ | |
| 3828 // +--------------------+ | 3739 // +--------------------+ |
| 3829 // | 3740 // |
| 3830 // The sites are carefully set up so that both opener updates are cross-process | 3741 // The sites are carefully set up so that both opener updates are cross-process |
| 3831 // but still allowed by Blink's navigation checks. | 3742 // but still allowed by Blink's navigation checks. |
| 3832 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, UpdateSubframeOpener) { | 3743 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, UpdateSubframeOpener) { |
| 3833 GURL main_url = embedded_test_server()->GetURL( | 3744 GURL main_url = embedded_test_server()->GetURL( |
| 3834 "foo.com", "/frame_tree/page_with_two_frames.html"); | 3745 "foo.com", "/frame_tree/page_with_two_frames.html"); |
| 3835 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3746 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3836 | 3747 |
| 3837 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3748 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3838 ->GetFrameTree() | |
| 3839 ->root(); | |
| 3840 EXPECT_EQ(2U, root->child_count()); | 3749 EXPECT_EQ(2U, root->child_count()); |
| 3841 | 3750 |
| 3842 // From the top frame, open a popup and navigate it to a cross-site page with | 3751 // From the top frame, open a popup and navigate it to a cross-site page with |
| 3843 // two subframes. | 3752 // two subframes. |
| 3844 Shell* popup_shell = | 3753 Shell* popup_shell = |
| 3845 OpenPopup(shell()->web_contents(), GURL(url::kAboutBlankURL), "popup"); | 3754 OpenPopup(shell()->web_contents(), GURL(url::kAboutBlankURL), "popup"); |
| 3846 EXPECT_TRUE(popup_shell); | 3755 EXPECT_TRUE(popup_shell); |
| 3847 GURL popup_url(embedded_test_server()->GetURL( | 3756 GURL popup_url(embedded_test_server()->GetURL( |
| 3848 "bar.com", "/frame_tree/page_with_post_message_frames.html")); | 3757 "bar.com", "/frame_tree/page_with_post_message_frames.html")); |
| 3849 NavigateToURL(popup_shell, popup_url); | 3758 NavigateToURL(popup_shell, popup_url); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3902 | 3811 |
| 3903 // Check that when a subframe navigates to a new SiteInstance, the new | 3812 // Check that when a subframe navigates to a new SiteInstance, the new |
| 3904 // SiteInstance will get a proxy for the opener of subframe's parent. I.e., | 3813 // SiteInstance will get a proxy for the opener of subframe's parent. I.e., |
| 3905 // accessing parent.opener from the subframe should still work after a | 3814 // accessing parent.opener from the subframe should still work after a |
| 3906 // cross-process navigation. | 3815 // cross-process navigation. |
| 3907 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3816 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 3908 NavigatingSubframePreservesOpenerInParent) { | 3817 NavigatingSubframePreservesOpenerInParent) { |
| 3909 GURL main_url = embedded_test_server()->GetURL("a.com", "/post_message.html"); | 3818 GURL main_url = embedded_test_server()->GetURL("a.com", "/post_message.html"); |
| 3910 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3819 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3911 | 3820 |
| 3912 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3821 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3913 ->GetFrameTree() | |
| 3914 ->root(); | |
| 3915 | 3822 |
| 3916 // Open a popup with a cross-site page that has a subframe. | 3823 // Open a popup with a cross-site page that has a subframe. |
| 3917 GURL popup_url(embedded_test_server()->GetURL( | 3824 GURL popup_url(embedded_test_server()->GetURL( |
| 3918 "b.com", "/cross_site_iframe_factory.html?b(b)")); | 3825 "b.com", "/cross_site_iframe_factory.html?b(b)")); |
| 3919 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); | 3826 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); |
| 3920 EXPECT_TRUE(popup_shell); | 3827 EXPECT_TRUE(popup_shell); |
| 3921 FrameTreeNode* popup_root = | 3828 FrameTreeNode* popup_root = |
| 3922 static_cast<WebContentsImpl*>(popup_shell->web_contents()) | 3829 static_cast<WebContentsImpl*>(popup_shell->web_contents()) |
| 3923 ->GetFrameTree() | 3830 ->GetFrameTree() |
| 3924 ->root(); | 3831 ->root(); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 3949 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 3856 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
| 3950 } | 3857 } |
| 3951 | 3858 |
| 3952 // Check that if a subframe has an opener, that opener is preserved when the | 3859 // Check that if a subframe has an opener, that opener is preserved when the |
| 3953 // subframe navigates cross-site. | 3860 // subframe navigates cross-site. |
| 3954 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateSubframeWithOpener) { | 3861 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateSubframeWithOpener) { |
| 3955 GURL main_url(embedded_test_server()->GetURL( | 3862 GURL main_url(embedded_test_server()->GetURL( |
| 3956 "foo.com", "/frame_tree/page_with_two_frames.html")); | 3863 "foo.com", "/frame_tree/page_with_two_frames.html")); |
| 3957 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3864 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 3958 | 3865 |
| 3959 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3866 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 3960 ->GetFrameTree() | |
| 3961 ->root(); | |
| 3962 EXPECT_EQ( | 3867 EXPECT_EQ( |
| 3963 " Site A ------------ proxies for B\n" | 3868 " Site A ------------ proxies for B\n" |
| 3964 " |--Site B ------- proxies for A\n" | 3869 " |--Site B ------- proxies for A\n" |
| 3965 " +--Site A ------- proxies for B\n" | 3870 " +--Site A ------- proxies for B\n" |
| 3966 "Where A = http://foo.com/\n" | 3871 "Where A = http://foo.com/\n" |
| 3967 " B = http://bar.com/", | 3872 " B = http://bar.com/", |
| 3968 DepictFrameTree(root)); | 3873 DepictFrameTree(root)); |
| 3969 | 3874 |
| 3970 // Update the first (cross-site) subframe's opener to root frame. | 3875 // Update the first (cross-site) subframe's opener to root frame. |
| 3971 bool success = false; | 3876 bool success = false; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4016 // RenderFrameProxy is created for that subframe in another renderer process. | 3921 // RenderFrameProxy is created for that subframe in another renderer process. |
| 4017 // Similar to NavigateSubframeWithOpener, but this test verifies the subframe | 3922 // Similar to NavigateSubframeWithOpener, but this test verifies the subframe |
| 4018 // opener plumbing for FrameMsg_NewFrameProxy, whereas | 3923 // opener plumbing for FrameMsg_NewFrameProxy, whereas |
| 4019 // NavigateSubframeWithOpener targets FrameMsg_NewFrame. | 3924 // NavigateSubframeWithOpener targets FrameMsg_NewFrame. |
| 4020 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 3925 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4021 NewRenderFrameProxyPreservesOpener) { | 3926 NewRenderFrameProxyPreservesOpener) { |
| 4022 GURL main_url( | 3927 GURL main_url( |
| 4023 embedded_test_server()->GetURL("foo.com", "/post_message.html")); | 3928 embedded_test_server()->GetURL("foo.com", "/post_message.html")); |
| 4024 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 3929 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4025 | 3930 |
| 4026 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 3931 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4027 ->GetFrameTree() | |
| 4028 ->root(); | |
| 4029 | 3932 |
| 4030 // Open a popup with a cross-site page that has two subframes. | 3933 // Open a popup with a cross-site page that has two subframes. |
| 4031 GURL popup_url(embedded_test_server()->GetURL( | 3934 GURL popup_url(embedded_test_server()->GetURL( |
| 4032 "bar.com", "/frame_tree/page_with_post_message_frames.html")); | 3935 "bar.com", "/frame_tree/page_with_post_message_frames.html")); |
| 4033 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); | 3936 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); |
| 4034 EXPECT_TRUE(popup_shell); | 3937 EXPECT_TRUE(popup_shell); |
| 4035 FrameTreeNode* popup_root = | 3938 FrameTreeNode* popup_root = |
| 4036 static_cast<WebContentsImpl*>(popup_shell->web_contents()) | 3939 static_cast<WebContentsImpl*>(popup_shell->web_contents()) |
| 4037 ->GetFrameTree() | 3940 ->GetFrameTree() |
| 4038 ->root(); | 3941 ->root(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4103 DISABLED_RenderViewHostPendingDeletionIsNotReused | 4006 DISABLED_RenderViewHostPendingDeletionIsNotReused |
| 4104 #else | 4007 #else |
| 4105 #define MAYBE_RenderViewHostPendingDeletionIsNotReused \ | 4008 #define MAYBE_RenderViewHostPendingDeletionIsNotReused \ |
| 4106 RenderViewHostPendingDeletionIsNotReused | 4009 RenderViewHostPendingDeletionIsNotReused |
| 4107 #endif | 4010 #endif |
| 4108 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4011 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4109 MAYBE_RenderViewHostPendingDeletionIsNotReused) { | 4012 MAYBE_RenderViewHostPendingDeletionIsNotReused) { |
| 4110 GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 4013 GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 4111 NavigateToURL(shell(), a_url); | 4014 NavigateToURL(shell(), a_url); |
| 4112 | 4015 |
| 4113 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4016 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4114 ->GetFrameTree() | |
| 4115 ->root(); | |
| 4116 RenderFrameHostImpl* rfh = root->current_frame_host(); | 4017 RenderFrameHostImpl* rfh = root->current_frame_host(); |
| 4117 RenderViewHostImpl* rvh = rfh->render_view_host(); | 4018 RenderViewHostImpl* rvh = rfh->render_view_host(); |
| 4118 int rvh_routing_id = rvh->GetRoutingID(); | 4019 int rvh_routing_id = rvh->GetRoutingID(); |
| 4119 SiteInstanceImpl* site_instance = rfh->GetSiteInstance(); | 4020 SiteInstanceImpl* site_instance = rfh->GetSiteInstance(); |
| 4120 RenderFrameDeletedObserver deleted_observer(rfh); | 4021 RenderFrameDeletedObserver deleted_observer(rfh); |
| 4121 | 4022 |
| 4122 // Install a BrowserMessageFilter to drop SwapOut ACK messages in A's | 4023 // Install a BrowserMessageFilter to drop SwapOut ACK messages in A's |
| 4123 // process. | 4024 // process. |
| 4124 scoped_refptr<SwapoutACKMessageFilter> filter = new SwapoutACKMessageFilter(); | 4025 scoped_refptr<SwapoutACKMessageFilter> filter = new SwapoutACKMessageFilter(); |
| 4125 rfh->GetProcess()->AddFilter(filter.get()); | 4026 rfh->GetProcess()->AddFilter(filter.get()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4169 } | 4070 } |
| 4170 | 4071 |
| 4171 // Test for https://crbug.com/591478, where navigating to a cross-site page with | 4072 // Test for https://crbug.com/591478, where navigating to a cross-site page with |
| 4172 // a subframe on the old site could cause the old RenderViewHost (now pending | 4073 // a subframe on the old site could cause the old RenderViewHost (now pending |
| 4173 // deletion) to be reused. | 4074 // deletion) to be reused. |
| 4174 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4075 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4175 DontReusePendingDeleteRenderViewHostForSubframe) { | 4076 DontReusePendingDeleteRenderViewHostForSubframe) { |
| 4176 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 4077 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 4177 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4078 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4178 | 4079 |
| 4179 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4080 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4180 ->GetFrameTree() | |
| 4181 ->root(); | |
| 4182 RenderViewHostImpl* rvh_a = root->current_frame_host()->render_view_host(); | 4081 RenderViewHostImpl* rvh_a = root->current_frame_host()->render_view_host(); |
| 4183 int rvh_a_routing_id = rvh_a->GetRoutingID(); | 4082 int rvh_a_routing_id = rvh_a->GetRoutingID(); |
| 4184 | 4083 |
| 4185 std::string script = | 4084 std::string script = |
| 4186 "window.onunload = function() { " | 4085 "window.onunload = function() { " |
| 4187 " var start = Date.now();" | 4086 " var start = Date.now();" |
| 4188 " while (Date.now() - start < 1000);" | 4087 " while (Date.now() - start < 1000);" |
| 4189 "}"; | 4088 "}"; |
| 4190 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script)); | 4089 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script)); |
| 4191 | 4090 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 4202 // Check that when a cross-process frame acquires focus, the old focused frame | 4101 // Check that when a cross-process frame acquires focus, the old focused frame |
| 4203 // loses focus and fires blur events. Starting on a page with a cross-site | 4102 // loses focus and fires blur events. Starting on a page with a cross-site |
| 4204 // subframe, simulate mouse clicks to switch focus from root frame to subframe | 4103 // subframe, simulate mouse clicks to switch focus from root frame to subframe |
| 4205 // and then back to root frame. | 4104 // and then back to root frame. |
| 4206 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4105 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4207 CrossProcessFocusChangeFiresBlurEvents) { | 4106 CrossProcessFocusChangeFiresBlurEvents) { |
| 4208 GURL main_url( | 4107 GURL main_url( |
| 4209 embedded_test_server()->GetURL("a.com", "/page_with_input_field.html")); | 4108 embedded_test_server()->GetURL("a.com", "/page_with_input_field.html")); |
| 4210 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4109 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4211 | 4110 |
| 4212 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4111 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4213 ->GetFrameTree() | |
| 4214 ->root(); | |
| 4215 | 4112 |
| 4216 EXPECT_EQ( | 4113 EXPECT_EQ( |
| 4217 " Site A ------------ proxies for B\n" | 4114 " Site A ------------ proxies for B\n" |
| 4218 " +--Site B ------- proxies for A\n" | 4115 " +--Site B ------- proxies for A\n" |
| 4219 "Where A = http://a.com/\n" | 4116 "Where A = http://a.com/\n" |
| 4220 " B = http://b.com/", | 4117 " B = http://b.com/", |
| 4221 DepictFrameTree(root)); | 4118 DepictFrameTree(root)); |
| 4222 | 4119 |
| 4223 // Focus the main frame's text field. The return value "input-focus" | 4120 // Focus the main frame's text field. The return value "input-focus" |
| 4224 // indicates that the focus event was fired correctly. | 4121 // indicates that the focus event was fired correctly. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4264 | 4161 |
| 4265 // Check that when a cross-process subframe is focused, its parent's | 4162 // Check that when a cross-process subframe is focused, its parent's |
| 4266 // document.activeElement correctly returns the corresponding <iframe> element. | 4163 // document.activeElement correctly returns the corresponding <iframe> element. |
| 4267 // The test sets up an A-embed-B-embed-C page and shifts focus A->B->A->C, | 4164 // The test sets up an A-embed-B-embed-C page and shifts focus A->B->A->C, |
| 4268 // checking document.activeElement after each change. | 4165 // checking document.activeElement after each change. |
| 4269 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DocumentActiveElement) { | 4166 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DocumentActiveElement) { |
| 4270 GURL main_url(embedded_test_server()->GetURL( | 4167 GURL main_url(embedded_test_server()->GetURL( |
| 4271 "a.com", "/cross_site_iframe_factory.html?a(b(c))")); | 4168 "a.com", "/cross_site_iframe_factory.html?a(b(c))")); |
| 4272 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4169 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4273 | 4170 |
| 4274 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4171 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4275 ->GetFrameTree() | |
| 4276 ->root(); | |
| 4277 | 4172 |
| 4278 EXPECT_EQ( | 4173 EXPECT_EQ( |
| 4279 " Site A ------------ proxies for B C\n" | 4174 " Site A ------------ proxies for B C\n" |
| 4280 " +--Site B ------- proxies for A C\n" | 4175 " +--Site B ------- proxies for A C\n" |
| 4281 " +--Site C -- proxies for A B\n" | 4176 " +--Site C -- proxies for A B\n" |
| 4282 "Where A = http://a.com/\n" | 4177 "Where A = http://a.com/\n" |
| 4283 " B = http://b.com/\n" | 4178 " B = http://b.com/\n" |
| 4284 " C = http://c.com/", | 4179 " C = http://c.com/", |
| 4285 DepictFrameTree(root)); | 4180 DepictFrameTree(root)); |
| 4286 | 4181 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4343 // The test builds a page with four cross-site frames and then focuses them one | 4238 // The test builds a page with four cross-site frames and then focuses them one |
| 4344 // by one, checking the value of document.hasFocus() in all frames. For any | 4239 // by one, checking the value of document.hasFocus() in all frames. For any |
| 4345 // given focused frame, document.hasFocus() should return true for that frame | 4240 // given focused frame, document.hasFocus() should return true for that frame |
| 4346 // and all its ancestor frames. | 4241 // and all its ancestor frames. |
| 4347 // Disabled due to flakes; see https://crbug.com/559273. | 4242 // Disabled due to flakes; see https://crbug.com/559273. |
| 4348 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DISABLED_DocumentHasFocus) { | 4243 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DISABLED_DocumentHasFocus) { |
| 4349 GURL main_url(embedded_test_server()->GetURL( | 4244 GURL main_url(embedded_test_server()->GetURL( |
| 4350 "a.com", "/cross_site_iframe_factory.html?a(b(c),d)")); | 4245 "a.com", "/cross_site_iframe_factory.html?a(b(c),d)")); |
| 4351 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4246 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4352 | 4247 |
| 4353 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4248 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4354 ->GetFrameTree() | |
| 4355 ->root(); | |
| 4356 | 4249 |
| 4357 EXPECT_EQ( | 4250 EXPECT_EQ( |
| 4358 " Site A ------------ proxies for B C D\n" | 4251 " Site A ------------ proxies for B C D\n" |
| 4359 " |--Site B ------- proxies for A C D\n" | 4252 " |--Site B ------- proxies for A C D\n" |
| 4360 " | +--Site C -- proxies for A B D\n" | 4253 " | +--Site C -- proxies for A B D\n" |
| 4361 " +--Site D ------- proxies for A B C\n" | 4254 " +--Site D ------- proxies for A B C\n" |
| 4362 "Where A = http://a.com/\n" | 4255 "Where A = http://a.com/\n" |
| 4363 " B = http://b.com/\n" | 4256 " B = http://b.com/\n" |
| 4364 " C = http://c.com/\n" | 4257 " C = http://c.com/\n" |
| 4365 " D = http://d.com/", | 4258 " D = http://d.com/", |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4411 EXPECT_FALSE(document_has_focus(grandchild)); | 4304 EXPECT_FALSE(document_has_focus(grandchild)); |
| 4412 EXPECT_TRUE(document_has_focus(child2)); | 4305 EXPECT_TRUE(document_has_focus(child2)); |
| 4413 } | 4306 } |
| 4414 | 4307 |
| 4415 // Check that window.focus works for cross-process subframes. | 4308 // Check that window.focus works for cross-process subframes. |
| 4416 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframeWindowFocus) { | 4309 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframeWindowFocus) { |
| 4417 GURL main_url(embedded_test_server()->GetURL( | 4310 GURL main_url(embedded_test_server()->GetURL( |
| 4418 "a.com", "/cross_site_iframe_factory.html?a(b,c)")); | 4311 "a.com", "/cross_site_iframe_factory.html?a(b,c)")); |
| 4419 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4312 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4420 | 4313 |
| 4421 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4314 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4422 ->GetFrameTree() | |
| 4423 ->root(); | |
| 4424 | 4315 |
| 4425 EXPECT_EQ( | 4316 EXPECT_EQ( |
| 4426 " Site A ------------ proxies for B C\n" | 4317 " Site A ------------ proxies for B C\n" |
| 4427 " |--Site B ------- proxies for A C\n" | 4318 " |--Site B ------- proxies for A C\n" |
| 4428 " +--Site C ------- proxies for A B\n" | 4319 " +--Site C ------- proxies for A B\n" |
| 4429 "Where A = http://a.com/\n" | 4320 "Where A = http://a.com/\n" |
| 4430 " B = http://b.com/\n" | 4321 " B = http://b.com/\n" |
| 4431 " C = http://c.com/", | 4322 " C = http://c.com/", |
| 4432 DepictFrameTree(root)); | 4323 DepictFrameTree(root)); |
| 4433 | 4324 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4550 | 4441 |
| 4551 // Verify that we receive a mouse cursor update message when we mouse over | 4442 // Verify that we receive a mouse cursor update message when we mouse over |
| 4552 // a text field contained in an out-of-process iframe. | 4443 // a text field contained in an out-of-process iframe. |
| 4553 // Fails under TSan. http://crbug.com/545237 | 4444 // Fails under TSan. http://crbug.com/545237 |
| 4554 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4445 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4555 DISABLED_CursorUpdateFromReceivedFromCrossSiteIframe) { | 4446 DISABLED_CursorUpdateFromReceivedFromCrossSiteIframe) { |
| 4556 GURL main_url(embedded_test_server()->GetURL( | 4447 GURL main_url(embedded_test_server()->GetURL( |
| 4557 "/frame_tree/page_with_positioned_frame.html")); | 4448 "/frame_tree/page_with_positioned_frame.html")); |
| 4558 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4449 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4559 | 4450 |
| 4560 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4451 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 4561 ->GetFrameTree() | |
| 4562 ->root(); | |
| 4563 | 4452 |
| 4564 FrameTreeNode* child_node = root->child_at(0); | 4453 FrameTreeNode* child_node = root->child_at(0); |
| 4565 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 4454 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), |
| 4566 child_node->current_frame_host()->GetSiteInstance()); | 4455 child_node->current_frame_host()->GetSiteInstance()); |
| 4567 | 4456 |
| 4568 scoped_refptr<CursorMessageFilter> filter = new CursorMessageFilter(); | 4457 scoped_refptr<CursorMessageFilter> filter = new CursorMessageFilter(); |
| 4569 child_node->current_frame_host()->GetProcess()->AddFilter(filter.get()); | 4458 child_node->current_frame_host()->GetProcess()->AddFilter(filter.get()); |
| 4570 | 4459 |
| 4571 // Send a MouseMove to the subframe. The frame contains text, and moving the | 4460 // Send a MouseMove to the subframe. The frame contains text, and moving the |
| 4572 // mouse over it should cause the renderer to send a mouse cursor update. | 4461 // mouse over it should cause the renderer to send a mouse cursor update. |
| 4573 blink::WebMouseEvent mouse_event; | 4462 blink::WebMouseEvent mouse_event; |
| 4574 mouse_event.type = blink::WebInputEvent::MouseMove; | 4463 mouse_event.type = blink::WebInputEvent::MouseMove; |
| 4575 mouse_event.x = 60; | 4464 mouse_event.x = 60; |
| 4576 mouse_event.y = 60; | 4465 mouse_event.y = 60; |
| 4577 RenderWidgetHost* rwh_child = | 4466 RenderWidgetHost* rwh_child = |
| 4578 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); | 4467 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); |
| 4579 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 4468 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 4580 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 4469 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 4581 static_cast<WebContentsImpl*>(shell()->web_contents()) | 4470 web_contents()->GetInputEventRouter()->RouteMouseEvent(root_view, |
| 4582 ->GetInputEventRouter() | 4471 &mouse_event); |
| 4583 ->RouteMouseEvent(root_view, &mouse_event); | |
| 4584 | 4472 |
| 4585 // CursorMessageFilter::Wait() implicitly tests whether we receive a | 4473 // CursorMessageFilter::Wait() implicitly tests whether we receive a |
| 4586 // ViewHostMsg_SetCursor message from the renderer process, because it does | 4474 // ViewHostMsg_SetCursor message from the renderer process, because it does |
| 4587 // does not return otherwise. | 4475 // does not return otherwise. |
| 4588 filter->Wait(); | 4476 filter->Wait(); |
| 4589 EXPECT_EQ(filter->last_set_cursor_routing_id(), rwh_child->GetRoutingID()); | 4477 EXPECT_EQ(filter->last_set_cursor_routing_id(), rwh_child->GetRoutingID()); |
| 4590 } | 4478 } |
| 4591 #endif | 4479 #endif |
| 4592 | 4480 |
| 4593 // Tests that we are using the correct RenderFrameProxy when navigating an | 4481 // Tests that we are using the correct RenderFrameProxy when navigating an |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 4616 #if defined(USE_AURA) | 4504 #if defined(USE_AURA) |
| 4617 // Browser process hit testing is not implemented on Android, and this test | 4505 // Browser process hit testing is not implemented on Android, and this test |
| 4618 // requires Aura for RenderWidgetHostViewAura::OnTouchEvent(). | 4506 // requires Aura for RenderWidgetHostViewAura::OnTouchEvent(). |
| 4619 // https://crbug.com/491334 | 4507 // https://crbug.com/491334 |
| 4620 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4508 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4621 SubframeTouchEventRouting) { | 4509 SubframeTouchEventRouting) { |
| 4622 GURL main_url(embedded_test_server()->GetURL( | 4510 GURL main_url(embedded_test_server()->GetURL( |
| 4623 "/frame_tree/page_with_positioned_nested_frames.html")); | 4511 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 4624 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4512 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4625 | 4513 |
| 4626 WebContentsImpl* web_contents = | 4514 WebContentsImpl* contents = web_contents(); |
| 4627 static_cast<WebContentsImpl*>(shell()->web_contents()); | 4515 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 4628 FrameTreeNode* root = web_contents->GetFrameTree()->root(); | |
| 4629 ASSERT_EQ(1U, root->child_count()); | 4516 ASSERT_EQ(1U, root->child_count()); |
| 4630 | 4517 |
| 4631 GURL frame_url( | 4518 GURL frame_url( |
| 4632 embedded_test_server()->GetURL("b.com", "/page_with_touch_handler.html")); | 4519 embedded_test_server()->GetURL("b.com", "/page_with_touch_handler.html")); |
| 4633 NavigateFrameToURL(root->child_at(0), frame_url); | 4520 NavigateFrameToURL(root->child_at(0), frame_url); |
| 4634 | 4521 |
| 4635 // Synchronize with the child and parent renderers to guarantee that the | 4522 // Synchronize with the child and parent renderers to guarantee that the |
| 4636 // surface information required for event hit testing is ready. | 4523 // surface information required for event hit testing is ready. |
| 4637 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>( | 4524 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>( |
| 4638 root->child_at(0)->current_frame_host()->GetView()); | 4525 root->child_at(0)->current_frame_host()->GetView()); |
| 4639 SurfaceHitTestReadyNotifier notifier( | 4526 SurfaceHitTestReadyNotifier notifier( |
| 4640 static_cast<RenderWidgetHostViewChildFrame*>(child_rwhv)); | 4527 static_cast<RenderWidgetHostViewChildFrame*>(child_rwhv)); |
| 4641 notifier.WaitForSurfaceReady(); | 4528 notifier.WaitForSurfaceReady(); |
| 4642 | 4529 |
| 4643 // Simulate touch event to sub-frame. | 4530 // Simulate touch event to sub-frame. |
| 4644 gfx::Point child_center(150, 150); | 4531 gfx::Point child_center(150, 150); |
| 4645 auto rwhv = static_cast<RenderWidgetHostViewAura*>( | 4532 auto rwhv = static_cast<RenderWidgetHostViewAura*>( |
| 4646 web_contents->GetRenderWidgetHostView()); | 4533 contents->GetRenderWidgetHostView()); |
| 4647 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0, | 4534 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0, |
| 4648 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); | 4535 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); |
| 4649 rwhv->OnTouchEvent(&touch_event); | 4536 rwhv->OnTouchEvent(&touch_event); |
| 4650 | 4537 |
| 4651 // Verify touch handler in subframe was invoked | 4538 // Verify touch handler in subframe was invoked |
| 4652 std::string result; | 4539 std::string result; |
| 4653 EXPECT_TRUE(ExecuteScriptAndExtractString( | 4540 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 4654 root->child_at(0)->current_frame_host(), | 4541 root->child_at(0)->current_frame_host(), |
| 4655 "window.domAutomationController.send(getLastTouchEvent());", &result)); | 4542 "window.domAutomationController.send(getLastTouchEvent());", &result)); |
| 4656 EXPECT_EQ("touchstart", result); | 4543 EXPECT_EQ("touchstart", result); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 4672 #define MAYBE_SubframeGestureEventRouting DISABLED_SubframeGestureEventRouting | 4559 #define MAYBE_SubframeGestureEventRouting DISABLED_SubframeGestureEventRouting |
| 4673 #else | 4560 #else |
| 4674 #define MAYBE_SubframeGestureEventRouting SubframeGestureEventRouting | 4561 #define MAYBE_SubframeGestureEventRouting SubframeGestureEventRouting |
| 4675 #endif | 4562 #endif |
| 4676 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4563 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4677 MAYBE_SubframeGestureEventRouting) { | 4564 MAYBE_SubframeGestureEventRouting) { |
| 4678 GURL main_url(embedded_test_server()->GetURL( | 4565 GURL main_url(embedded_test_server()->GetURL( |
| 4679 "/frame_tree/page_with_positioned_nested_frames.html")); | 4566 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 4680 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4567 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4681 | 4568 |
| 4682 WebContentsImpl* web_contents = | 4569 WebContentsImpl* contents = web_contents(); |
| 4683 static_cast<WebContentsImpl*>(shell()->web_contents()); | 4570 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 4684 FrameTreeNode* root = web_contents->GetFrameTree()->root(); | |
| 4685 ASSERT_EQ(1U, root->child_count()); | 4571 ASSERT_EQ(1U, root->child_count()); |
| 4686 | 4572 |
| 4687 GURL frame_url( | 4573 GURL frame_url( |
| 4688 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); | 4574 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); |
| 4689 NavigateFrameToURL(root->child_at(0), frame_url); | 4575 NavigateFrameToURL(root->child_at(0), frame_url); |
| 4690 auto child_frame_host = root->child_at(0)->current_frame_host(); | 4576 auto child_frame_host = root->child_at(0)->current_frame_host(); |
| 4691 | 4577 |
| 4692 // Synchronize with the child and parent renderers to guarantee that the | 4578 // Synchronize with the child and parent renderers to guarantee that the |
| 4693 // surface information required for event hit testing is ready. | 4579 // surface information required for event hit testing is ready. |
| 4694 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>( | 4580 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>( |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4807 } | 4693 } |
| 4808 | 4694 |
| 4809 } // namespace anonymous | 4695 } // namespace anonymous |
| 4810 | 4696 |
| 4811 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4697 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4812 InputEventRouterGestureTargetQueueTest) { | 4698 InputEventRouterGestureTargetQueueTest) { |
| 4813 GURL main_url(embedded_test_server()->GetURL( | 4699 GURL main_url(embedded_test_server()->GetURL( |
| 4814 "/frame_tree/page_with_positioned_nested_frames.html")); | 4700 "/frame_tree/page_with_positioned_nested_frames.html")); |
| 4815 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4701 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4816 | 4702 |
| 4817 WebContentsImpl* web_contents = | 4703 WebContentsImpl* contents = web_contents(); |
| 4818 static_cast<WebContentsImpl*>(shell()->web_contents()); | 4704 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 4819 FrameTreeNode* root = web_contents->GetFrameTree()->root(); | |
| 4820 ASSERT_EQ(1U, root->child_count()); | 4705 ASSERT_EQ(1U, root->child_count()); |
| 4821 | 4706 |
| 4822 GURL frame_url( | 4707 GURL frame_url( |
| 4823 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); | 4708 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); |
| 4824 NavigateFrameToURL(root->child_at(0), frame_url); | 4709 NavigateFrameToURL(root->child_at(0), frame_url); |
| 4825 auto child_frame_host = root->child_at(0)->current_frame_host(); | 4710 auto child_frame_host = root->child_at(0)->current_frame_host(); |
| 4826 | 4711 |
| 4827 // Synchronize with the child and parent renderers to guarantee that the | 4712 // Synchronize with the child and parent renderers to guarantee that the |
| 4828 // surface information required for event hit testing is ready. | 4713 // surface information required for event hit testing is ready. |
| 4829 auto rwhv_child = | 4714 auto rwhv_child = |
| 4830 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView()); | 4715 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView()); |
| 4831 SurfaceHitTestReadyNotifier notifier( | 4716 SurfaceHitTestReadyNotifier notifier( |
| 4832 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); | 4717 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 4833 notifier.WaitForSurfaceReady(); | 4718 notifier.WaitForSurfaceReady(); |
| 4834 | 4719 |
| 4835 // All touches & gestures are sent to the main frame's view, and should be | 4720 // All touches & gestures are sent to the main frame's view, and should be |
| 4836 // routed appropriately from there. | 4721 // routed appropriately from there. |
| 4837 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( | 4722 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( |
| 4838 web_contents->GetRenderWidgetHostView()); | 4723 contents->GetRenderWidgetHostView()); |
| 4839 | 4724 |
| 4840 RenderWidgetHostInputEventRouter* router = | 4725 RenderWidgetHostInputEventRouter* router = contents->GetInputEventRouter(); |
| 4841 web_contents->GetInputEventRouter(); | |
| 4842 EXPECT_TRUE(router->gesture_target_queue_.empty()); | 4726 EXPECT_TRUE(router->gesture_target_queue_.empty()); |
| 4843 EXPECT_EQ(nullptr, router->gesture_target_); | 4727 EXPECT_EQ(nullptr, router->gesture_target_); |
| 4844 | 4728 |
| 4845 // Send touch sequence to main-frame. | 4729 // Send touch sequence to main-frame. |
| 4846 gfx::Point main_frame_point(25, 25); | 4730 gfx::Point main_frame_point(25, 25); |
| 4847 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, | 4731 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, |
| 4848 router->touch_target_, rwhv_parent); | 4732 router->touch_target_, rwhv_parent); |
| 4849 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); | 4733 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); |
| 4850 EXPECT_EQ(nullptr, router->gesture_target_); | 4734 EXPECT_EQ(nullptr, router->gesture_target_); |
| 4851 | 4735 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4895 #endif // defined(USE_AURA) | 4779 #endif // defined(USE_AURA) |
| 4896 | 4780 |
| 4897 // Ensure that a cross-process subframe can receive keyboard events when in | 4781 // Ensure that a cross-process subframe can receive keyboard events when in |
| 4898 // focus. Flaky: https://crbug.com/596508. | 4782 // focus. Flaky: https://crbug.com/596508. |
| 4899 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 4783 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 4900 DISABLED_SubframeKeyboardEventRouting) { | 4784 DISABLED_SubframeKeyboardEventRouting) { |
| 4901 GURL main_url(embedded_test_server()->GetURL( | 4785 GURL main_url(embedded_test_server()->GetURL( |
| 4902 "a.com", "/frame_tree/page_with_one_frame.html")); | 4786 "a.com", "/frame_tree/page_with_one_frame.html")); |
| 4903 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 4787 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 4904 | 4788 |
| 4905 WebContentsImpl* web_contents = | 4789 WebContentsImpl* contents = web_contents(); |
| 4906 static_cast<WebContentsImpl*>(shell()->web_contents()); | 4790 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 4907 FrameTreeNode* root = web_contents->GetFrameTree()->root(); | |
| 4908 | 4791 |
| 4909 GURL frame_url( | 4792 GURL frame_url( |
| 4910 embedded_test_server()->GetURL("b.com", "/page_with_input_field.html")); | 4793 embedded_test_server()->GetURL("b.com", "/page_with_input_field.html")); |
| 4911 NavigateFrameToURL(root->child_at(0), frame_url); | 4794 NavigateFrameToURL(root->child_at(0), frame_url); |
| 4912 | 4795 |
| 4913 // Focus the subframe and then its input field. The return value | 4796 // Focus the subframe and then its input field. The return value |
| 4914 // "input-focus" will be sent once the input field's focus event fires. | 4797 // "input-focus" will be sent once the input field's focus event fires. |
| 4915 FocusFrame(root->child_at(0)); | 4798 FocusFrame(root->child_at(0)); |
| 4916 std::string result; | 4799 std::string result; |
| 4917 EXPECT_TRUE(ExecuteScriptAndExtractString( | 4800 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 4918 root->child_at(0)->current_frame_host(), "focusInputField()", &result)); | 4801 root->child_at(0)->current_frame_host(), "focusInputField()", &result)); |
| 4919 EXPECT_EQ(result, "input-focus"); | 4802 EXPECT_EQ(result, "input-focus"); |
| 4920 | 4803 |
| 4921 // The subframe should now be focused. | 4804 // The subframe should now be focused. |
| 4922 EXPECT_EQ(root->child_at(0), root->frame_tree()->GetFocusedFrame()); | 4805 EXPECT_EQ(root->child_at(0), root->frame_tree()->GetFocusedFrame()); |
| 4923 | 4806 |
| 4924 // Generate a few keyboard events and route them to currently focused frame. | 4807 // Generate a few keyboard events and route them to currently focused frame. |
| 4925 SimulateKeyPress(web_contents, ui::VKEY_F, false, false, false, false); | 4808 SimulateKeyPress(contents, ui::VKEY_F, false, false, false, false); |
| 4926 SimulateKeyPress(web_contents, ui::VKEY_O, false, false, false, false); | 4809 SimulateKeyPress(contents, ui::VKEY_O, false, false, false, false); |
| 4927 SimulateKeyPress(web_contents, ui::VKEY_O, false, false, false, false); | 4810 SimulateKeyPress(contents, ui::VKEY_O, false, false, false, false); |
| 4928 | 4811 |
| 4929 // Verify that the input field in the subframe received the keystrokes. | 4812 // Verify that the input field in the subframe received the keystrokes. |
| 4930 EXPECT_TRUE(ExecuteScriptAndExtractString( | 4813 EXPECT_TRUE(ExecuteScriptAndExtractString( |
| 4931 root->child_at(0)->current_frame_host(), | 4814 root->child_at(0)->current_frame_host(), |
| 4932 "window.domAutomationController.send(getInputFieldText());", &result)); | 4815 "window.domAutomationController.send(getInputFieldText());", &result)); |
| 4933 EXPECT_EQ("FOO", result); | 4816 EXPECT_EQ("FOO", result); |
| 4934 } | 4817 } |
| 4935 | 4818 |
| 4936 // Ensure that sequential focus navigation (advancing focused elements with | 4819 // Ensure that sequential focus navigation (advancing focused elements with |
| 4937 // <tab> and <shift-tab>) works across cross-process subframes. | 4820 // <tab> and <shift-tab>) works across cross-process subframes. |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5045 private: | 4928 private: |
| 5046 bool context_menu_created_; | 4929 bool context_menu_created_; |
| 5047 ContextMenuParams menu_params_; | 4930 ContextMenuParams menu_params_; |
| 5048 | 4931 |
| 5049 // The MessageLoopRunner used to spin the message loop. | 4932 // The MessageLoopRunner used to spin the message loop. |
| 5050 scoped_refptr<MessageLoopRunner> message_loop_runner_; | 4933 scoped_refptr<MessageLoopRunner> message_loop_runner_; |
| 5051 | 4934 |
| 5052 DISALLOW_COPY_AND_ASSIGN(ContextMenuObserverDelegate); | 4935 DISALLOW_COPY_AND_ASSIGN(ContextMenuObserverDelegate); |
| 5053 }; | 4936 }; |
| 5054 | 4937 |
| 5055 // Test that a mouse right-click to an out-of-process iframe causes a context | 4938 // Helper function to run the CreateContextMenuTest in either normal |
|
Charlie Reis
2016/04/01 21:24:09
Why is this in your CL? This seems unrelated. Is
EhsanK
2016/04/02 03:14:02
I guess it is. Sorry about that. I reverted the re
| |
| 5056 // menu to be generated with the correct screen position. | 4939 // or high DPI mode. |
| 5057 #if defined(OS_ANDROID) | 4940 void CreateContextMenuTestHelper( |
| 5058 // Browser process hit testing is not implemented on Android. | 4941 Shell* shell, |
| 5059 // https://crbug.com/491334 | 4942 net::test_server::EmbeddedTestServer* embedded_test_server) { |
| 5060 #define MAYBE_CreateContextMenuTest DISABLED_CreateContextMenuTest | 4943 GURL main_url(embedded_test_server->GetURL( |
| 5061 #else | |
| 5062 #define MAYBE_CreateContextMenuTest CreateContextMenuTest | |
| 5063 #endif | |
| 5064 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CreateContextMenuTest) { | |
| 5065 GURL main_url(embedded_test_server()->GetURL( | |
| 5066 "/frame_tree/page_with_positioned_frame.html")); | 4944 "/frame_tree/page_with_positioned_frame.html")); |
| 5067 NavigateToURL(shell(), main_url); | 4945 EXPECT_TRUE(NavigateToURL(shell, main_url)); |
| 5068 | 4946 |
| 5069 // It is safe to obtain the root frame tree node here, as it doesn't change. | 4947 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 5070 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 4948 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell->web_contents()) |
| 5071 ->GetFrameTree() | 4949 ->GetFrameTree() |
| 5072 ->root(); | 4950 ->root(); |
| 5073 ASSERT_EQ(1U, root->child_count()); | 4951 ASSERT_EQ(1U, root->child_count()); |
| 5074 | 4952 |
| 5075 FrameTreeNode* child_node = root->child_at(0); | 4953 FrameTreeNode* child_node = root->child_at(0); |
| 5076 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); | 4954 GURL site_url(embedded_test_server->GetURL("baz.com", "/title1.html")); |
| 5077 EXPECT_EQ(site_url, child_node->current_url()); | 4955 EXPECT_EQ(site_url, child_node->current_url()); |
| 5078 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | 4956 EXPECT_NE(shell->web_contents()->GetSiteInstance(), |
| 5079 child_node->current_frame_host()->GetSiteInstance()); | 4957 child_node->current_frame_host()->GetSiteInstance()); |
| 5080 | 4958 |
| 5081 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( | 4959 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( |
| 5082 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 4960 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 5083 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( | 4961 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( |
| 5084 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 4962 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 5085 | 4963 |
| 5086 // Ensure that the child process renderer is ready to have input events | 4964 // Ensure that the child process renderer is ready to have input events |
| 5087 // routed to it. This happens when the browser process has received | 4965 // routed to it. This happens when the browser process has received |
| 5088 // updated compositor surfaces from both renderer processes. | 4966 // updated compositor surfaces from both renderer processes. |
| 5089 gfx::Point point(75, 75); | 4967 SurfaceHitTestReadyNotifier notifier( |
| 5090 gfx::Point transformed_point; | 4968 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); |
| 5091 while (root_view->SurfaceIdNamespaceAtPoint(nullptr, point, | 4969 notifier.WaitForSurfaceReady(); |
| 5092 &transformed_point) != | |
| 5093 rwhv_child->GetSurfaceIdNamespace()) { | |
| 5094 base::RunLoop run_loop; | |
| 5095 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | |
| 5096 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout()); | |
| 5097 run_loop.Run(); | |
| 5098 } | |
| 5099 | 4970 |
| 5100 // A WebContentsDelegate to listen for the ShowContextMenu message. | 4971 // A WebContentsDelegate to listen for the ShowContextMenu message. |
| 5101 ContextMenuObserverDelegate context_menu_delegate; | 4972 ContextMenuObserverDelegate context_menu_delegate; |
| 5102 shell()->web_contents()->SetDelegate(&context_menu_delegate); | 4973 shell->web_contents()->SetDelegate(&context_menu_delegate); |
| 5103 | 4974 |
| 5104 RenderWidgetHostInputEventRouter* router = | 4975 RenderWidgetHostInputEventRouter* router = |
| 5105 static_cast<WebContentsImpl*>(shell()->web_contents()) | 4976 static_cast<WebContentsImpl*>(shell->web_contents()) |
| 5106 ->GetInputEventRouter(); | 4977 ->GetInputEventRouter(); |
| 5107 | 4978 |
| 4979 gfx::Point point(75, 75); | |
| 4980 | |
| 5108 // Target right-click event to child frame. | 4981 // Target right-click event to child frame. |
| 5109 blink::WebMouseEvent click_event; | 4982 blink::WebMouseEvent click_event; |
| 5110 click_event.type = blink::WebInputEvent::MouseDown; | 4983 click_event.type = blink::WebInputEvent::MouseDown; |
| 5111 click_event.button = blink::WebPointerProperties::ButtonRight; | 4984 click_event.button = blink::WebPointerProperties::ButtonRight; |
| 5112 click_event.x = 75; | 4985 click_event.x = point.x(); |
| 5113 click_event.y = 75; | 4986 click_event.y = point.y(); |
| 5114 click_event.clickCount = 1; | 4987 click_event.clickCount = 1; |
| 5115 router->RouteMouseEvent(root_view, &click_event); | 4988 router->RouteMouseEvent(root_view, &click_event); |
| 5116 | 4989 |
| 5117 // We also need a MouseUp event, needed by Windows. | 4990 // We also need a MouseUp event, needed by Windows. |
| 5118 click_event.type = blink::WebInputEvent::MouseUp; | 4991 click_event.type = blink::WebInputEvent::MouseUp; |
| 5119 click_event.x = 75; | 4992 click_event.x = point.x(); |
| 5120 click_event.y = 75; | 4993 click_event.y = point.y(); |
| 5121 router->RouteMouseEvent(root_view, &click_event); | 4994 router->RouteMouseEvent(root_view, &click_event); |
| 5122 | 4995 |
| 5123 context_menu_delegate.Wait(); | 4996 context_menu_delegate.Wait(); |
| 5124 | 4997 |
| 5125 ContextMenuParams params = context_menu_delegate.getParams(); | 4998 ContextMenuParams params = context_menu_delegate.getParams(); |
| 5126 | 4999 |
| 5127 EXPECT_EQ(point.x(), params.x); | 5000 EXPECT_EQ(point.x(), params.x); |
| 5128 EXPECT_EQ(point.y(), params.y); | 5001 EXPECT_EQ(point.y(), params.y); |
| 5129 } | 5002 } |
| 5130 | 5003 |
| 5004 // Test that a mouse right-click to an out-of-process iframe causes a context | |
| 5005 // menu to be generated with the correct screen position. | |
| 5006 #if defined(OS_ANDROID) | |
| 5007 // Browser process hit testing is not implemented on Android. | |
| 5008 // https://crbug.com/491334 | |
| 5009 #define MAYBE_CreateContextMenuTest DISABLED_CreateContextMenuTest | |
| 5010 #else | |
| 5011 #define MAYBE_CreateContextMenuTest CreateContextMenuTest | |
| 5012 #endif | |
| 5013 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CreateContextMenuTest) { | |
| 5014 CreateContextMenuTestHelper(shell(), embedded_test_server()); | |
| 5015 } | |
| 5016 | |
| 5017 // Test that a mouse right-click to an out-of-process iframe causes a context | |
| 5018 // menu to be generated with the correct screen position on a screen with | |
| 5019 // non-default scale factor. | |
| 5020 #if defined(OS_ANDROID) || defined(OS_WIN) | |
| 5021 // Browser process hit testing is not implemented on Android. | |
| 5022 // https://crbug.com/491334 | |
| 5023 // Windows is disabled because of https://crbug.com/545547. | |
| 5024 #define MAYBE_HighDPICreateContextMenuTest DISABLED_HighDPICreateContextMenuTest | |
| 5025 #else | |
| 5026 #define MAYBE_HighDPICreateContextMenuTest HighDPICreateContextMenuTest | |
| 5027 #endif | |
| 5028 IN_PROC_BROWSER_TEST_F(SitePerProcessHighDPIBrowserTest, | |
| 5029 MAYBE_HighDPICreateContextMenuTest) { | |
| 5030 CreateContextMenuTestHelper(shell(), embedded_test_server()); | |
| 5031 } | |
| 5032 | |
| 5131 class ShowWidgetMessageFilter : public content::BrowserMessageFilter { | 5033 class ShowWidgetMessageFilter : public content::BrowserMessageFilter { |
| 5132 public: | 5034 public: |
| 5133 ShowWidgetMessageFilter() | 5035 ShowWidgetMessageFilter() |
| 5134 #if defined(OS_MACOSX) || defined(OS_ANDROID) | 5036 #if defined(OS_MACOSX) || defined(OS_ANDROID) |
| 5135 : content::BrowserMessageFilter(FrameMsgStart), | 5037 : content::BrowserMessageFilter(FrameMsgStart), |
| 5136 #else | 5038 #else |
| 5137 : content::BrowserMessageFilter(ViewMsgStart), | 5039 : content::BrowserMessageFilter(ViewMsgStart), |
| 5138 #endif | 5040 #endif |
| 5139 message_loop_runner_(new content::MessageLoopRunner) { | 5041 message_loop_runner_(new content::MessageLoopRunner) { |
| 5140 } | 5042 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5199 // on Android. | 5101 // on Android. |
| 5200 #define MAYBE_PopupMenuTest DISABLED_PopupMenuTest | 5102 #define MAYBE_PopupMenuTest DISABLED_PopupMenuTest |
| 5201 #else | 5103 #else |
| 5202 #define MAYBE_PopupMenuTest PopupMenuTest | 5104 #define MAYBE_PopupMenuTest PopupMenuTest |
| 5203 #endif | 5105 #endif |
| 5204 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_PopupMenuTest) { | 5106 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_PopupMenuTest) { |
| 5205 GURL main_url( | 5107 GURL main_url( |
| 5206 embedded_test_server()->GetURL("/cross_site_iframe_factory.html?a(a)")); | 5108 embedded_test_server()->GetURL("/cross_site_iframe_factory.html?a(a)")); |
| 5207 NavigateToURL(shell(), main_url); | 5109 NavigateToURL(shell(), main_url); |
| 5208 | 5110 |
| 5209 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5111 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5210 ->GetFrameTree() | |
| 5211 ->root(); | |
| 5212 | 5112 |
| 5213 #if !defined(OS_MACOSX) | 5113 #if !defined(OS_MACOSX) |
| 5214 // Unused variable on Mac. | 5114 // Unused variable on Mac. |
| 5215 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( | 5115 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( |
| 5216 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 5116 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 5217 #endif | 5117 #endif |
| 5218 static_cast<WebContentsImpl*>(shell()->web_contents())->SendScreenRects(); | 5118 web_contents()->SendScreenRects(); |
| 5219 | 5119 |
| 5220 content::TestNavigationObserver navigation_observer(shell()->web_contents()); | 5120 content::TestNavigationObserver navigation_observer(shell()->web_contents()); |
| 5221 FrameTreeNode* child_node = root->child_at(0); | 5121 FrameTreeNode* child_node = root->child_at(0); |
| 5222 GURL site_url(embedded_test_server()->GetURL( | 5122 GURL site_url(embedded_test_server()->GetURL( |
| 5223 "baz.com", "/site_isolation/page-with-select.html")); | 5123 "baz.com", "/site_isolation/page-with-select.html")); |
| 5224 NavigateFrameToURL(child_node, site_url); | 5124 NavigateFrameToURL(child_node, site_url); |
| 5225 navigation_observer.Wait(); | 5125 navigation_observer.Wait(); |
| 5226 | 5126 |
| 5227 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( | 5127 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( |
| 5228 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); | 5128 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5269 // Android. | 5169 // Android. |
| 5270 #define MAYBE_NestedPopupMenuTest DISABLED_NestedPopupMenuTest | 5170 #define MAYBE_NestedPopupMenuTest DISABLED_NestedPopupMenuTest |
| 5271 #else | 5171 #else |
| 5272 #define MAYBE_NestedPopupMenuTest NestedPopupMenuTest | 5172 #define MAYBE_NestedPopupMenuTest NestedPopupMenuTest |
| 5273 #endif | 5173 #endif |
| 5274 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_NestedPopupMenuTest) { | 5174 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_NestedPopupMenuTest) { |
| 5275 GURL main_url(embedded_test_server()->GetURL( | 5175 GURL main_url(embedded_test_server()->GetURL( |
| 5276 "/cross_site_iframe_factory.html?a(b(c))")); | 5176 "/cross_site_iframe_factory.html?a(b(c))")); |
| 5277 NavigateToURL(shell(), main_url); | 5177 NavigateToURL(shell(), main_url); |
| 5278 | 5178 |
| 5279 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5179 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5280 ->GetFrameTree() | |
| 5281 ->root(); | |
| 5282 | 5180 |
| 5283 #if !defined(OS_MACOSX) | 5181 #if !defined(OS_MACOSX) |
| 5284 // Undefined variable on Mac. | 5182 // Undefined variable on Mac. |
| 5285 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( | 5183 RenderWidgetHostViewBase* rwhv_root = static_cast<RenderWidgetHostViewBase*>( |
| 5286 root->current_frame_host()->GetRenderWidgetHost()->GetView()); | 5184 root->current_frame_host()->GetRenderWidgetHost()->GetView()); |
| 5287 #endif | 5185 #endif |
| 5288 static_cast<WebContentsImpl*>(shell()->web_contents())->SendScreenRects(); | 5186 web_contents()->SendScreenRects(); |
| 5289 | 5187 |
| 5290 // For clarity, we are labeling the frame tree nodes as: | 5188 // For clarity, we are labeling the frame tree nodes as: |
| 5291 // - root_node | 5189 // - root_node |
| 5292 // \-> b_node (out-of-process from root and c_node) | 5190 // \-> b_node (out-of-process from root and c_node) |
| 5293 // \-> c_node (out-of-process from root and b_node) | 5191 // \-> c_node (out-of-process from root and b_node) |
| 5294 | 5192 |
| 5295 content::TestNavigationObserver navigation_observer(shell()->web_contents()); | 5193 content::TestNavigationObserver navigation_observer(shell()->web_contents()); |
| 5296 FrameTreeNode* b_node = root->child_at(0); | 5194 FrameTreeNode* b_node = root->child_at(0); |
| 5297 FrameTreeNode* c_node = b_node->child_at(0); | 5195 FrameTreeNode* c_node = b_node->child_at(0); |
| 5298 GURL site_url(embedded_test_server()->GetURL( | 5196 GURL site_url(embedded_test_server()->GetURL( |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5555 // if a pending cross-process navigation is cancelled. The test works by trying | 5453 // if a pending cross-process navigation is cancelled. The test works by trying |
| 5556 // to create a new RenderFrame with the same routing id. If there is an | 5454 // to create a new RenderFrame with the same routing id. If there is an |
| 5557 // entry with the same routing ID, a CHECK is hit and the process crashes. | 5455 // entry with the same routing ID, a CHECK is hit and the process crashes. |
| 5558 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5456 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5559 SubframePendingAndBackToSameSiteInstance) { | 5457 SubframePendingAndBackToSameSiteInstance) { |
| 5560 GURL main_url(embedded_test_server()->GetURL( | 5458 GURL main_url(embedded_test_server()->GetURL( |
| 5561 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 5459 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 5562 NavigateToURL(shell(), main_url); | 5460 NavigateToURL(shell(), main_url); |
| 5563 | 5461 |
| 5564 // Capture the FrameTreeNode this test will be navigating. | 5462 // Capture the FrameTreeNode this test will be navigating. |
| 5565 FrameTreeNode* node = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5463 FrameTreeNode* node = web_contents()->GetFrameTree()->root()->child_at(0); |
| 5566 ->GetFrameTree() | |
| 5567 ->root() | |
| 5568 ->child_at(0); | |
| 5569 EXPECT_TRUE(node); | 5464 EXPECT_TRUE(node); |
| 5570 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), | 5465 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), |
| 5571 node->parent()->current_frame_host()->GetSiteInstance()); | 5466 node->parent()->current_frame_host()->GetSiteInstance()); |
| 5572 | 5467 |
| 5573 // Navigate to the site of the parent, but to a page that will not commit. | 5468 // Navigate to the site of the parent, but to a page that will not commit. |
| 5574 GURL same_site_url(embedded_test_server()->GetURL("a.com", "/title1.html")); | 5469 GURL same_site_url(embedded_test_server()->GetURL("a.com", "/title1.html")); |
| 5575 NavigationStallDelegate stall_delegate(same_site_url); | 5470 NavigationStallDelegate stall_delegate(same_site_url); |
| 5576 ResourceDispatcherHost::Get()->SetDelegate(&stall_delegate); | 5471 ResourceDispatcherHost::Get()->SetDelegate(&stall_delegate); |
| 5577 { | 5472 { |
| 5578 NavigationController::LoadURLParams params(same_site_url); | 5473 NavigationController::LoadURLParams params(same_site_url); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5632 | 5527 |
| 5633 // This test ensures that the RenderFrame isn't leaked in the renderer process | 5528 // This test ensures that the RenderFrame isn't leaked in the renderer process |
| 5634 // when a remote parent detaches a child frame. The test works by trying | 5529 // when a remote parent detaches a child frame. The test works by trying |
| 5635 // to create a new RenderFrame with the same routing id. If there is an | 5530 // to create a new RenderFrame with the same routing id. If there is an |
| 5636 // entry with the same routing ID, a CHECK is hit and the process crashes. | 5531 // entry with the same routing ID, a CHECK is hit and the process crashes. |
| 5637 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ParentDetachRemoteChild) { | 5532 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ParentDetachRemoteChild) { |
| 5638 GURL main_url(embedded_test_server()->GetURL( | 5533 GURL main_url(embedded_test_server()->GetURL( |
| 5639 "a.com", "/cross_site_iframe_factory.html?a(b,b)")); | 5534 "a.com", "/cross_site_iframe_factory.html?a(b,b)")); |
| 5640 NavigateToURL(shell(), main_url); | 5535 NavigateToURL(shell(), main_url); |
| 5641 | 5536 |
| 5642 WebContentsImpl* web_contents = | 5537 WebContentsImpl* contents = web_contents(); |
| 5643 static_cast<WebContentsImpl*>(shell()->web_contents()); | 5538 EXPECT_EQ(2U, contents->GetFrameTree()->root()->child_count()); |
| 5644 EXPECT_EQ(2U, web_contents->GetFrameTree()->root()->child_count()); | |
| 5645 | 5539 |
| 5646 // Capture the FrameTreeNode this test will be navigating. | 5540 // Capture the FrameTreeNode this test will be navigating. |
| 5647 FrameTreeNode* node = web_contents->GetFrameTree()->root()->child_at(0); | 5541 FrameTreeNode* node = contents->GetFrameTree()->root()->child_at(0); |
| 5648 EXPECT_TRUE(node); | 5542 EXPECT_TRUE(node); |
| 5649 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), | 5543 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), |
| 5650 node->parent()->current_frame_host()->GetSiteInstance()); | 5544 node->parent()->current_frame_host()->GetSiteInstance()); |
| 5651 | 5545 |
| 5652 // Grab the routing id of the first child RenderFrameHost and set up a process | 5546 // Grab the routing id of the first child RenderFrameHost and set up a process |
| 5653 // observer to ensure there is no crash when a new RenderFrame creation is | 5547 // observer to ensure there is no crash when a new RenderFrame creation is |
| 5654 // attempted. | 5548 // attempted. |
| 5655 RenderProcessHost* process = node->current_frame_host()->GetProcess(); | 5549 RenderProcessHost* process = node->current_frame_host()->GetProcess(); |
| 5656 RenderProcessHostWatcher watcher( | 5550 RenderProcessHostWatcher watcher( |
| 5657 process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); | 5551 process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); |
| 5658 int frame_routing_id = node->current_frame_host()->GetRoutingID(); | 5552 int frame_routing_id = node->current_frame_host()->GetRoutingID(); |
| 5659 int widget_routing_id = | 5553 int widget_routing_id = |
| 5660 node->current_frame_host()->GetRenderWidgetHost()->GetRoutingID(); | 5554 node->current_frame_host()->GetRenderWidgetHost()->GetRoutingID(); |
| 5661 int parent_routing_id = | 5555 int parent_routing_id = |
| 5662 node->parent()->render_manager()->GetRoutingIdForSiteInstance( | 5556 node->parent()->render_manager()->GetRoutingIdForSiteInstance( |
| 5663 node->current_frame_host()->GetSiteInstance()); | 5557 node->current_frame_host()->GetSiteInstance()); |
| 5664 | 5558 |
| 5665 // Have the parent frame remove the child frame from its DOM. This should | 5559 // Have the parent frame remove the child frame from its DOM. This should |
| 5666 // result in the child RenderFrame being deleted in the remote process. | 5560 // result in the child RenderFrame being deleted in the remote process. |
| 5667 EXPECT_TRUE(ExecuteScript(web_contents, | 5561 EXPECT_TRUE(ExecuteScript(contents, |
| 5668 "document.body.removeChild(" | 5562 "document.body.removeChild(" |
| 5669 "document.querySelectorAll('iframe')[0])")); | 5563 "document.querySelectorAll('iframe')[0])")); |
| 5670 EXPECT_EQ(1U, web_contents->GetFrameTree()->root()->child_count()); | 5564 EXPECT_EQ(1U, contents->GetFrameTree()->root()->child_count()); |
| 5671 | 5565 |
| 5672 { | 5566 { |
| 5673 FrameMsg_NewFrame_Params params; | 5567 FrameMsg_NewFrame_Params params; |
| 5674 params.routing_id = frame_routing_id; | 5568 params.routing_id = frame_routing_id; |
| 5675 params.proxy_routing_id = MSG_ROUTING_NONE; | 5569 params.proxy_routing_id = MSG_ROUTING_NONE; |
| 5676 params.opener_routing_id = MSG_ROUTING_NONE; | 5570 params.opener_routing_id = MSG_ROUTING_NONE; |
| 5677 params.parent_routing_id = parent_routing_id; | 5571 params.parent_routing_id = parent_routing_id; |
| 5678 params.previous_sibling_routing_id = MSG_ROUTING_NONE; | 5572 params.previous_sibling_routing_id = MSG_ROUTING_NONE; |
| 5679 params.widget_params.routing_id = widget_routing_id; | 5573 params.widget_params.routing_id = widget_routing_id; |
| 5680 params.widget_params.hidden = true; | 5574 params.widget_params.hidden = true; |
| 5681 params.replication_state.name = "name"; | 5575 params.replication_state.name = "name"; |
| 5682 params.replication_state.unique_name = "name"; | 5576 params.replication_state.unique_name = "name"; |
| 5683 | 5577 |
| 5684 process->Send(new FrameMsg_NewFrame(params)); | 5578 process->Send(new FrameMsg_NewFrame(params)); |
| 5685 } | 5579 } |
| 5686 | 5580 |
| 5687 // The test must wait for the process to exit, but if there is no leak, the | 5581 // The test must wait for the process to exit, but if there is no leak, the |
| 5688 // RenderFrame will be properly created and there will be no crash. | 5582 // RenderFrame will be properly created and there will be no crash. |
| 5689 // Therefore, navigate the remaining subframe to completely different site, | 5583 // Therefore, navigate the remaining subframe to completely different site, |
| 5690 // which will cause the original process to exit cleanly. | 5584 // which will cause the original process to exit cleanly. |
| 5691 NavigateFrameToURL( | 5585 NavigateFrameToURL(contents->GetFrameTree()->root()->child_at(0), |
| 5692 web_contents->GetFrameTree()->root()->child_at(0), | 5586 embedded_test_server()->GetURL("d.com", "/title3.html")); |
| 5693 embedded_test_server()->GetURL("d.com", "/title3.html")); | |
| 5694 watcher.Wait(); | 5587 watcher.Wait(); |
| 5695 EXPECT_TRUE(watcher.did_exit_normally()); | 5588 EXPECT_TRUE(watcher.did_exit_normally()); |
| 5696 } | 5589 } |
| 5697 | 5590 |
| 5698 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, VisibilityChanged) { | 5591 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, VisibilityChanged) { |
| 5699 GURL main_url( | 5592 GURL main_url( |
| 5700 embedded_test_server()->GetURL("a.com", "/page_with_iframe.html")); | 5593 embedded_test_server()->GetURL("a.com", "/page_with_iframe.html")); |
| 5701 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 5594 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 5702 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), main_url); | 5595 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), main_url); |
| 5703 | 5596 |
| 5704 GURL cross_site_url = | 5597 GURL cross_site_url = |
| 5705 embedded_test_server()->GetURL("oopif.com", "/title1.html"); | 5598 embedded_test_server()->GetURL("oopif.com", "/title1.html"); |
| 5706 | 5599 |
| 5707 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5600 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5708 ->GetFrameTree() | |
| 5709 ->root(); | |
| 5710 | 5601 |
| 5711 TestNavigationObserver observer(shell()->web_contents()); | 5602 TestNavigationObserver observer(shell()->web_contents()); |
| 5712 | 5603 |
| 5713 NavigateFrameToURL(root->child_at(0), cross_site_url); | 5604 NavigateFrameToURL(root->child_at(0), cross_site_url); |
| 5714 EXPECT_EQ(cross_site_url, observer.last_navigation_url()); | 5605 EXPECT_EQ(cross_site_url, observer.last_navigation_url()); |
| 5715 EXPECT_TRUE(observer.last_navigation_succeeded()); | 5606 EXPECT_TRUE(observer.last_navigation_succeeded()); |
| 5716 | 5607 |
| 5717 RenderWidgetHostImpl* render_widget_host = | 5608 RenderWidgetHostImpl* render_widget_host = |
| 5718 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); | 5609 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); |
| 5719 EXPECT_FALSE(render_widget_host->is_hidden()); | 5610 EXPECT_FALSE(render_widget_host->is_hidden()); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 5737 } | 5628 } |
| 5738 | 5629 |
| 5739 // Verify that sandbox flags inheritance works across multiple levels of | 5630 // Verify that sandbox flags inheritance works across multiple levels of |
| 5740 // frames. See https://crbug.com/576845. | 5631 // frames. See https://crbug.com/576845. |
| 5741 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsInheritance) { | 5632 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsInheritance) { |
| 5742 GURL main_url(embedded_test_server()->GetURL( | 5633 GURL main_url(embedded_test_server()->GetURL( |
| 5743 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 5634 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 5744 NavigateToURL(shell(), main_url); | 5635 NavigateToURL(shell(), main_url); |
| 5745 | 5636 |
| 5746 // It is safe to obtain the root frame tree node here, as it doesn't change. | 5637 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 5747 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5638 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5748 ->GetFrameTree() | |
| 5749 ->root(); | |
| 5750 | 5639 |
| 5751 // Set sandbox flags for child frame. | 5640 // Set sandbox flags for child frame. |
| 5752 EXPECT_TRUE(ExecuteScript( | 5641 EXPECT_TRUE(ExecuteScript( |
| 5753 root->current_frame_host(), | 5642 root->current_frame_host(), |
| 5754 "document.querySelector('iframe').sandbox = 'allow-scripts';")); | 5643 "document.querySelector('iframe').sandbox = 'allow-scripts';")); |
| 5755 | 5644 |
| 5756 // Calculate expected flags. Note that "allow-scripts" resets both | 5645 // Calculate expected flags. Note that "allow-scripts" resets both |
| 5757 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per | 5646 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per |
| 5758 // blink::parseSandboxPolicy(). | 5647 // blink::parseSandboxPolicy(). |
| 5759 blink::WebSandboxFlags expected_flags = | 5648 blink::WebSandboxFlags expected_flags = |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5792 // a child frame, update its sandbox flags but don't navigate the frame, and | 5681 // a child frame, update its sandbox flags but don't navigate the frame, and |
| 5793 // ensure that a new cross-site grandchild frame doesn't inherit the new flags | 5682 // ensure that a new cross-site grandchild frame doesn't inherit the new flags |
| 5794 // (which shouldn't have taken effect). | 5683 // (which shouldn't have taken effect). |
| 5795 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5684 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5796 SandboxFlagsNotInheritedBeforeNavigation) { | 5685 SandboxFlagsNotInheritedBeforeNavigation) { |
| 5797 GURL main_url(embedded_test_server()->GetURL( | 5686 GURL main_url(embedded_test_server()->GetURL( |
| 5798 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 5687 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 5799 NavigateToURL(shell(), main_url); | 5688 NavigateToURL(shell(), main_url); |
| 5800 | 5689 |
| 5801 // It is safe to obtain the root frame tree node here, as it doesn't change. | 5690 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 5802 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5691 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5803 ->GetFrameTree() | |
| 5804 ->root(); | |
| 5805 | 5692 |
| 5806 // Set sandbox flags for child frame. | 5693 // Set sandbox flags for child frame. |
| 5807 EXPECT_TRUE(ExecuteScript( | 5694 EXPECT_TRUE(ExecuteScript( |
| 5808 root->current_frame_host(), | 5695 root->current_frame_host(), |
| 5809 "document.querySelector('iframe').sandbox = 'allow-scripts';")); | 5696 "document.querySelector('iframe').sandbox = 'allow-scripts';")); |
| 5810 | 5697 |
| 5811 // These flags should be pending but not take effect, since there's been no | 5698 // These flags should be pending but not take effect, since there's been no |
| 5812 // navigation. | 5699 // navigation. |
| 5813 blink::WebSandboxFlags expected_flags = | 5700 blink::WebSandboxFlags expected_flags = |
| 5814 blink::WebSandboxFlags::All & ~blink::WebSandboxFlags::Scripts & | 5701 blink::WebSandboxFlags::All & ~blink::WebSandboxFlags::Scripts & |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 5844 // Verify that popups opened from sandboxed frames inherit sandbox flags from | 5731 // Verify that popups opened from sandboxed frames inherit sandbox flags from |
| 5845 // their opener, and that they keep these inherited flags after being navigated | 5732 // their opener, and that they keep these inherited flags after being navigated |
| 5846 // cross-site. See https://crbug.com/483584. | 5733 // cross-site. See https://crbug.com/483584. |
| 5847 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5734 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5848 NewPopupInheritsSandboxFlagsFromOpener) { | 5735 NewPopupInheritsSandboxFlagsFromOpener) { |
| 5849 GURL main_url(embedded_test_server()->GetURL( | 5736 GURL main_url(embedded_test_server()->GetURL( |
| 5850 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 5737 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 5851 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 5738 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 5852 | 5739 |
| 5853 // It is safe to obtain the root frame tree node here, as it doesn't change. | 5740 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 5854 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5741 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5855 ->GetFrameTree() | |
| 5856 ->root(); | |
| 5857 | 5742 |
| 5858 // Set sandbox flags for child frame. | 5743 // Set sandbox flags for child frame. |
| 5859 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), | 5744 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), |
| 5860 "document.querySelector('iframe').sandbox = " | 5745 "document.querySelector('iframe').sandbox = " |
| 5861 " 'allow-scripts allow-popups';")); | 5746 " 'allow-scripts allow-popups';")); |
| 5862 | 5747 |
| 5863 // Calculate expected flags. Note that "allow-scripts" resets both | 5748 // Calculate expected flags. Note that "allow-scripts" resets both |
| 5864 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per | 5749 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per |
| 5865 // blink::parseSandboxPolicy(). | 5750 // blink::parseSandboxPolicy(). |
| 5866 blink::WebSandboxFlags expected_flags = | 5751 blink::WebSandboxFlags expected_flags = |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5915 // Verify that popups opened from frames sandboxed with the | 5800 // Verify that popups opened from frames sandboxed with the |
| 5916 // "allow-popups-to-escape-sandbox" directive do *not* inherit sandbox flags | 5801 // "allow-popups-to-escape-sandbox" directive do *not* inherit sandbox flags |
| 5917 // from their opener. | 5802 // from their opener. |
| 5918 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5803 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 5919 OpenUnsandboxedPopupFromSandboxedFrame) { | 5804 OpenUnsandboxedPopupFromSandboxedFrame) { |
| 5920 GURL main_url(embedded_test_server()->GetURL( | 5805 GURL main_url(embedded_test_server()->GetURL( |
| 5921 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 5806 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 5922 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 5807 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 5923 | 5808 |
| 5924 // It is safe to obtain the root frame tree node here, as it doesn't change. | 5809 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 5925 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5810 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5926 ->GetFrameTree() | |
| 5927 ->root(); | |
| 5928 | 5811 |
| 5929 // Set sandbox flags for child frame, specifying that popups opened from it | 5812 // Set sandbox flags for child frame, specifying that popups opened from it |
| 5930 // should not be sandboxed. | 5813 // should not be sandboxed. |
| 5931 EXPECT_TRUE(ExecuteScript( | 5814 EXPECT_TRUE(ExecuteScript( |
| 5932 root->current_frame_host(), | 5815 root->current_frame_host(), |
| 5933 "document.querySelector('iframe').sandbox = " | 5816 "document.querySelector('iframe').sandbox = " |
| 5934 " 'allow-scripts allow-popups allow-popups-to-escape-sandbox';")); | 5817 " 'allow-scripts allow-popups allow-popups-to-escape-sandbox';")); |
| 5935 | 5818 |
| 5936 // Set expected flags for the child frame. Note that "allow-scripts" resets | 5819 // Set expected flags for the child frame. Note that "allow-scripts" resets |
| 5937 // both WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits | 5820 // both WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5986 SetupCrossSiteRedirector(&https_server); | 5869 SetupCrossSiteRedirector(&https_server); |
| 5987 | 5870 |
| 5988 GURL iframe_url( | 5871 GURL iframe_url( |
| 5989 https_server.GetURL("/mixed-content/basic-passive-in-iframe.html")); | 5872 https_server.GetURL("/mixed-content/basic-passive-in-iframe.html")); |
| 5990 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); | 5873 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); |
| 5991 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); | 5874 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); |
| 5992 | 5875 |
| 5993 // When the subframe navigates, the WebContents should still be marked | 5876 // When the subframe navigates, the WebContents should still be marked |
| 5994 // as having displayed insecure content. | 5877 // as having displayed insecure content. |
| 5995 GURL navigate_url(https_server.GetURL("/title1.html")); | 5878 GURL navigate_url(https_server.GetURL("/title1.html")); |
| 5996 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5879 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 5997 ->GetFrameTree() | |
| 5998 ->root(); | |
| 5999 NavigateFrameToURL(root->child_at(0), navigate_url); | 5880 NavigateFrameToURL(root->child_at(0), navigate_url); |
| 6000 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); | 5881 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); |
| 6001 | 5882 |
| 6002 // When the main frame navigates, it should no longer be marked as | 5883 // When the main frame navigates, it should no longer be marked as |
| 6003 // displaying insecure content. | 5884 // displaying insecure content. |
| 6004 EXPECT_TRUE( | 5885 EXPECT_TRUE( |
| 6005 NavigateToURL(shell(), https_server.GetURL("b.com", "/title1.html"))); | 5886 NavigateToURL(shell(), https_server.GetURL("b.com", "/title1.html"))); |
| 6006 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); | 5887 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); |
| 6007 } | 5888 } |
| 6008 | 5889 |
| 6009 // Tests that, when a parent frame is set to strictly block mixed | 5890 // Tests that, when a parent frame is set to strictly block mixed |
| 6010 // content via Content Security Policy, child OOPIFs cannot display | 5891 // content via Content Security Policy, child OOPIFs cannot display |
| 6011 // mixed content. | 5892 // mixed content. |
| 6012 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, | 5893 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, |
| 6013 PassiveMixedContentInIframeWithStrictBlocking) { | 5894 PassiveMixedContentInIframeWithStrictBlocking) { |
| 6014 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 5895 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 6015 https_server.ServeFilesFromSourceDirectory("content/test/data"); | 5896 https_server.ServeFilesFromSourceDirectory("content/test/data"); |
| 6016 ASSERT_TRUE(https_server.Start()); | 5897 ASSERT_TRUE(https_server.Start()); |
| 6017 SetupCrossSiteRedirector(&https_server); | 5898 SetupCrossSiteRedirector(&https_server); |
| 6018 | 5899 |
| 6019 GURL iframe_url_with_strict_blocking(https_server.GetURL( | 5900 GURL iframe_url_with_strict_blocking(https_server.GetURL( |
| 6020 "/mixed-content/basic-passive-in-iframe-with-strict-blocking.html")); | 5901 "/mixed-content/basic-passive-in-iframe-with-strict-blocking.html")); |
| 6021 EXPECT_TRUE(NavigateToURL(shell(), iframe_url_with_strict_blocking)); | 5902 EXPECT_TRUE(NavigateToURL(shell(), iframe_url_with_strict_blocking)); |
| 6022 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); | 5903 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); |
| 6023 | 5904 |
| 6024 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5905 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6025 ->GetFrameTree() | |
| 6026 ->root(); | |
| 6027 EXPECT_TRUE(root->current_replication_state() | 5906 EXPECT_TRUE(root->current_replication_state() |
| 6028 .should_enforce_strict_mixed_content_checking); | 5907 .should_enforce_strict_mixed_content_checking); |
| 6029 EXPECT_TRUE(root->child_at(0) | 5908 EXPECT_TRUE(root->child_at(0) |
| 6030 ->current_replication_state() | 5909 ->current_replication_state() |
| 6031 .should_enforce_strict_mixed_content_checking); | 5910 .should_enforce_strict_mixed_content_checking); |
| 6032 | 5911 |
| 6033 // When the subframe navigates, it should still be marked as enforcing | 5912 // When the subframe navigates, it should still be marked as enforcing |
| 6034 // strict mixed content. | 5913 // strict mixed content. |
| 6035 GURL navigate_url(https_server.GetURL("/title1.html")); | 5914 GURL navigate_url(https_server.GetURL("/title1.html")); |
| 6036 NavigateFrameToURL(root->child_at(0), navigate_url); | 5915 NavigateFrameToURL(root->child_at(0), navigate_url); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 6055 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, | 5934 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, |
| 6056 ActiveMixedContentInIframe) { | 5935 ActiveMixedContentInIframe) { |
| 6057 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 5936 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 6058 https_server.ServeFilesFromSourceDirectory("content/test/data"); | 5937 https_server.ServeFilesFromSourceDirectory("content/test/data"); |
| 6059 ASSERT_TRUE(https_server.Start()); | 5938 ASSERT_TRUE(https_server.Start()); |
| 6060 SetupCrossSiteRedirector(&https_server); | 5939 SetupCrossSiteRedirector(&https_server); |
| 6061 | 5940 |
| 6062 GURL iframe_url( | 5941 GURL iframe_url( |
| 6063 https_server.GetURL("/mixed-content/basic-active-in-iframe.html")); | 5942 https_server.GetURL("/mixed-content/basic-active-in-iframe.html")); |
| 6064 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); | 5943 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); |
| 6065 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5944 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6066 ->GetFrameTree() | |
| 6067 ->root(); | |
| 6068 ASSERT_EQ(1U, root->child_count()); | 5945 ASSERT_EQ(1U, root->child_count()); |
| 6069 FrameTreeNode* mixed_child = root->child_at(0)->child_at(0); | 5946 FrameTreeNode* mixed_child = root->child_at(0)->child_at(0); |
| 6070 ASSERT_TRUE(mixed_child); | 5947 ASSERT_TRUE(mixed_child); |
| 6071 // The child iframe attempted to create a mixed iframe; this should | 5948 // The child iframe attempted to create a mixed iframe; this should |
| 6072 // have been blocked, so the mixed iframe should not have committed a | 5949 // have been blocked, so the mixed iframe should not have committed a |
| 6073 // load. | 5950 // load. |
| 6074 EXPECT_FALSE(mixed_child->has_committed_real_load()); | 5951 EXPECT_FALSE(mixed_child->has_committed_real_load()); |
| 6075 } | 5952 } |
| 6076 | 5953 |
| 6077 // Test setting a cross-origin iframe to display: none. | 5954 // Test setting a cross-origin iframe to display: none. |
| 6078 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframeDisplayNone) { | 5955 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframeDisplayNone) { |
| 6079 GURL main_url(embedded_test_server()->GetURL( | 5956 GURL main_url(embedded_test_server()->GetURL( |
| 6080 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 5957 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 6081 NavigateToURL(shell(), main_url); | 5958 NavigateToURL(shell(), main_url); |
| 6082 | 5959 |
| 6083 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5960 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6084 ->GetFrameTree() | |
| 6085 ->root(); | |
| 6086 RenderWidgetHost* root_render_widget_host = | 5961 RenderWidgetHost* root_render_widget_host = |
| 6087 root->current_frame_host()->GetRenderWidgetHost(); | 5962 root->current_frame_host()->GetRenderWidgetHost(); |
| 6088 | 5963 |
| 6089 // Set the iframe to display: none. | 5964 // Set the iframe to display: none. |
| 6090 EXPECT_TRUE( | 5965 EXPECT_TRUE( |
| 6091 ExecuteScript(shell()->web_contents(), | 5966 ExecuteScript(shell()->web_contents(), |
| 6092 "document.querySelector('iframe').style.display = 'none'")); | 5967 "document.querySelector('iframe').style.display = 'none'")); |
| 6093 | 5968 |
| 6094 // Waits until pending frames are done. | 5969 // Waits until pending frames are done. |
| 6095 scoped_ptr<MainThreadFrameObserver> observer( | 5970 scoped_ptr<MainThreadFrameObserver> observer( |
| 6096 new MainThreadFrameObserver(root_render_widget_host)); | 5971 new MainThreadFrameObserver(root_render_widget_host)); |
| 6097 observer->Wait(); | 5972 observer->Wait(); |
| 6098 | 5973 |
| 6099 // Force the renderer to generate a new frame. | 5974 // Force the renderer to generate a new frame. |
| 6100 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), | 5975 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| 6101 "document.body.style.background = 'black'")); | 5976 "document.body.style.background = 'black'")); |
| 6102 | 5977 |
| 6103 // Waits for the next frame. | 5978 // Waits for the next frame. |
| 6104 observer->Wait(); | 5979 observer->Wait(); |
| 6105 } | 5980 } |
| 6106 | 5981 |
| 6107 // Test that a cross-origin iframe can be blocked by X-Frame-Options and CSP | 5982 // Test that a cross-origin iframe can be blocked by X-Frame-Options and CSP |
| 6108 // frame-ancestors. | 5983 // frame-ancestors. |
| 6109 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 5984 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 6110 CrossSiteIframeBlockedByXFrameOptionsOrCSP) { | 5985 CrossSiteIframeBlockedByXFrameOptionsOrCSP) { |
| 6111 GURL main_url(embedded_test_server()->GetURL( | 5986 GURL main_url(embedded_test_server()->GetURL( |
| 6112 "a.com", "/cross_site_iframe_factory.html?a(a)")); | 5987 "a.com", "/cross_site_iframe_factory.html?a(a)")); |
| 6113 NavigateToURL(shell(), main_url); | 5988 NavigateToURL(shell(), main_url); |
| 6114 | 5989 |
| 6115 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 5990 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6116 ->GetFrameTree() | |
| 6117 ->root(); | |
| 6118 | 5991 |
| 6119 // Add a load event handler for the iframe element. | 5992 // Add a load event handler for the iframe element. |
| 6120 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), | 5993 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| 6121 "document.querySelector('iframe').onload = " | 5994 "document.querySelector('iframe').onload = " |
| 6122 " function() { document.title = 'loaded'; };")); | 5995 " function() { document.title = 'loaded'; };")); |
| 6123 | 5996 |
| 6124 GURL blocked_urls[] = { | 5997 GURL blocked_urls[] = { |
| 6125 embedded_test_server()->GetURL("b.com", "/frame-ancestors-none.html"), | 5998 embedded_test_server()->GetURL("b.com", "/frame-ancestors-none.html"), |
| 6126 embedded_test_server()->GetURL("b.com", "/x-frame-options-deny.html") | 5999 embedded_test_server()->GetURL("b.com", "/x-frame-options-deny.html") |
| 6127 }; | 6000 }; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6175 EXPECT_EQ(blink::WebSandboxFlags::None, | 6048 EXPECT_EQ(blink::WebSandboxFlags::None, |
| 6176 root->child_at(0)->effective_sandbox_flags()); | 6049 root->child_at(0)->effective_sandbox_flags()); |
| 6177 } | 6050 } |
| 6178 } | 6051 } |
| 6179 | 6052 |
| 6180 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ScreenCoordinates) { | 6053 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ScreenCoordinates) { |
| 6181 GURL main_url(embedded_test_server()->GetURL( | 6054 GURL main_url(embedded_test_server()->GetURL( |
| 6182 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 6055 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 6183 NavigateToURL(shell(), main_url); | 6056 NavigateToURL(shell(), main_url); |
| 6184 | 6057 |
| 6185 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | 6058 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); |
| 6186 ->GetFrameTree() | |
| 6187 ->root(); | |
| 6188 FrameTreeNode* child = root->child_at(0); | 6059 FrameTreeNode* child = root->child_at(0); |
| 6189 | 6060 |
| 6190 const char* properties[] = {"screenX", "screenY", "outerWidth", | 6061 const char* properties[] = {"screenX", "screenY", "outerWidth", |
| 6191 "outerHeight"}; | 6062 "outerHeight"}; |
| 6192 | 6063 |
| 6193 for (const char* property : properties) { | 6064 for (const char* property : properties) { |
| 6194 std::string script = "window.domAutomationController.send(window."; | 6065 std::string script = "window.domAutomationController.send(window."; |
| 6195 script += property; | 6066 script += property; |
| 6196 script += ");"; | 6067 script += ");"; |
| 6197 int root_value = 1; | 6068 int root_value = 1; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6261 | 6132 |
| 6262 // Tests that the swapped out state on RenderViewHost is properly reset when | 6133 // Tests that the swapped out state on RenderViewHost is properly reset when |
| 6263 // the main frame is navigated to the same SiteInstance as one of its child | 6134 // the main frame is navigated to the same SiteInstance as one of its child |
| 6264 // frames. | 6135 // frames. |
| 6265 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | 6136 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, |
| 6266 NavigateMainFrameToChildSite) { | 6137 NavigateMainFrameToChildSite) { |
| 6267 GURL main_url(embedded_test_server()->GetURL( | 6138 GURL main_url(embedded_test_server()->GetURL( |
| 6268 "a.com", "/cross_site_iframe_factory.html?a(b)")); | 6139 "a.com", "/cross_site_iframe_factory.html?a(b)")); |
| 6269 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | 6140 EXPECT_TRUE(NavigateToURL(shell(), main_url)); |
| 6270 | 6141 |
| 6271 WebContentsImpl* contents = | 6142 WebContentsImpl* contents = web_contents(); |
| 6272 static_cast<WebContentsImpl*>(shell()->web_contents()); | |
| 6273 FrameTreeNode* root = contents->GetFrameTree()->root(); | 6143 FrameTreeNode* root = contents->GetFrameTree()->root(); |
| 6274 EXPECT_EQ(1U, root->child_count()); | 6144 EXPECT_EQ(1U, root->child_count()); |
| 6275 | 6145 |
| 6276 // Ensure the RenderViewHost for the SiteInstance of the child is considered | 6146 // Ensure the RenderViewHost for the SiteInstance of the child is considered |
| 6277 // in swapped out state. | 6147 // in swapped out state. |
| 6278 RenderViewHostImpl* rvh = contents->GetFrameTree()->GetRenderViewHost( | 6148 RenderViewHostImpl* rvh = contents->GetFrameTree()->GetRenderViewHost( |
| 6279 root->child_at(0)->current_frame_host()->GetSiteInstance()); | 6149 root->child_at(0)->current_frame_host()->GetSiteInstance()); |
| 6280 EXPECT_TRUE(rvh->is_swapped_out_); | 6150 EXPECT_TRUE(rvh->is_swapped_out_); |
| 6281 | 6151 |
| 6282 // Have the child frame navigate its parent to its SiteInstance. | 6152 // Have the child frame navigate its parent to its SiteInstance. |
| 6283 GURL b_url(embedded_test_server()->GetURL("b.com", "/title1.html")); | 6153 GURL b_url(embedded_test_server()->GetURL("b.com", "/title1.html")); |
| 6284 std::string script = base::StringPrintf( | 6154 std::string script = base::StringPrintf( |
| 6285 "window.domAutomationController.send(" | 6155 "window.domAutomationController.send(" |
| 6286 "parent.location = '%s');", | 6156 "parent.location = '%s');", |
| 6287 b_url.spec().c_str()); | 6157 b_url.spec().c_str()); |
| 6288 | 6158 |
| 6289 TestFrameNavigationObserver frame_observer(root); | 6159 TestFrameNavigationObserver frame_observer(root); |
| 6290 EXPECT_TRUE(ExecuteScript(root->child_at(0)->current_frame_host(), script)); | 6160 EXPECT_TRUE(ExecuteScript(root->child_at(0)->current_frame_host(), script)); |
| 6291 frame_observer.Wait(); | 6161 frame_observer.Wait(); |
| 6292 EXPECT_EQ(b_url, root->current_url()); | 6162 EXPECT_EQ(b_url, root->current_url()); |
| 6293 | 6163 |
| 6294 // Verify that the same RenderViewHost is preserved and that it is no longer | 6164 // Verify that the same RenderViewHost is preserved and that it is no longer |
| 6295 // in swapped out state. | 6165 // in swapped out state. |
| 6296 EXPECT_EQ(rvh, contents->GetFrameTree()->GetRenderViewHost( | 6166 EXPECT_EQ(rvh, contents->GetFrameTree()->GetRenderViewHost( |
| 6297 root->current_frame_host()->GetSiteInstance())); | 6167 root->current_frame_host()->GetSiteInstance())); |
| 6298 EXPECT_FALSE(rvh->is_swapped_out_); | 6168 EXPECT_FALSE(rvh->is_swapped_out_); |
| 6299 } | 6169 } |
| 6300 | 6170 |
| 6171 // This class will sniff incoming IPC for ViewHostMsg_TextInputStateChanged. | |
| 6172 class TextInputStateChangedMessageFilter : public BrowserMessageFilter { | |
| 6173 public: | |
| 6174 explicit TextInputStateChangedMessageFilter( | |
| 6175 RenderWidgetHostImpl* render_widget_host) | |
| 6176 : BrowserMessageFilter(ViewMsgStart), text_input_state_changed_(false) { | |
| 6177 if (!render_widget_host || !render_widget_host->GetProcess()) | |
| 6178 text_input_state_changed_ = true; | |
| 6179 old_state = *render_widget_host->GetView()->text_input_state(); | |
| 6180 render_widget_host->GetProcess()->AddFilter(this); | |
| 6181 } | |
| 6182 | |
| 6183 void WaitUntilTextInputStateChanges() { | |
| 6184 if (!text_input_state_changed_) { | |
| 6185 message_loop_runner_ = new MessageLoopRunner; | |
| 6186 message_loop_runner_->Run(); | |
| 6187 } | |
| 6188 } | |
| 6189 | |
| 6190 private: | |
| 6191 ~TextInputStateChangedMessageFilter() override {} | |
| 6192 | |
| 6193 bool OnMessageReceived(const IPC::Message& msg) override { | |
| 6194 IPC_BEGIN_MESSAGE_MAP(TextInputStateChangedMessageFilter, msg) | |
| 6195 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged, | |
| 6196 OnTextInputStateChangedMessageReceived) | |
| 6197 IPC_END_MESSAGE_MAP() | |
| 6198 return false; | |
| 6199 } | |
| 6200 | |
| 6201 void OnTextInputStateChangedMessageReceived(const TextInputState& new_state) { | |
| 6202 if (new_state.type != old_state.type || new_state.mode != old_state.mode || | |
| 6203 new_state.value != old_state.value) { | |
| 6204 text_input_state_changed_ = true; | |
| 6205 if (message_loop_runner_) | |
| 6206 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | |
| 6207 message_loop_runner_->QuitClosure()); | |
| 6208 } | |
| 6209 } | |
| 6210 | |
| 6211 bool text_input_state_changed_; | |
| 6212 scoped_refptr<MessageLoopRunner> message_loop_runner_; | |
| 6213 TextInputState old_state; | |
| 6214 | |
| 6215 DISALLOW_COPY_AND_ASSIGN(TextInputStateChangedMessageFilter); | |
| 6216 }; | |
| 6217 | |
| 6218 // Verify that when moving the focus between different frames, the WebContents | |
| 6219 // properly keeps track of the text input state. | |
| 6220 // The test loads a page with one input field, two out of process frames, and a | |
| 6221 // second input field positioned after the last <iframe>. Then a sequence of TAB | |
| 6222 // inputs are faked to navigate focus in between the different <input> elements. | |
| 6223 // After each change, we check with the RWHV of the frame as well as the | |
| 6224 // WebContents to make sure the text input state is as expected. | |
| 6225 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, TextInputStateChanged) { | |
| 6226 GURL main_page_url(embedded_test_server()->GetURL( | |
| 6227 "a.com", "/textinput/page_with_input_iframeX2_input.html")); | |
| 6228 NavigateToURL(shell(), main_page_url); | |
| 6229 | |
| 6230 WebContents* contents = shell()->web_contents(); | |
| 6231 | |
| 6232 FrameTreeNode* root = web_contents()->GetFrameTree()->root(); | |
| 6233 | |
| 6234 FrameTreeNode* child_b = root->child_at(0); | |
| 6235 GURL child_b_url(embedded_test_server()->GetURL( | |
| 6236 "b.com", "/textinput/page_with_input.html")); | |
| 6237 NavigateFrameToURL(child_b, child_b_url); | |
| 6238 EXPECT_TRUE(WaitForRenderFrameReady(child_b->current_frame_host())); | |
| 6239 | |
| 6240 FrameTreeNode* child_c = root->child_at(1); | |
| 6241 GURL child_c_url(embedded_test_server()->GetURL( | |
| 6242 "c.com", "/textinput/page_with_input.html")); | |
| 6243 NavigateFrameToURL(child_c, child_c_url); | |
| 6244 EXPECT_TRUE(WaitForRenderFrameReady(child_c->current_frame_host())); | |
| 6245 | |
| 6246 RenderWidgetHostImpl* root_rwh = | |
| 6247 root->current_frame_host()->GetRenderWidgetHost(); | |
| 6248 RenderWidgetHostViewBase* root_rwhv = root_rwh->GetView(); | |
| 6249 | |
| 6250 RenderWidgetHostImpl* child_b_rwh = | |
| 6251 child_b->current_frame_host()->GetRenderWidgetHost(); | |
| 6252 RenderWidgetHostViewBase* child_b_rwhv = child_b_rwh->GetView(); | |
| 6253 | |
| 6254 RenderWidgetHostImpl* child_c_rwh = | |
| 6255 child_c->current_frame_host()->GetRenderWidgetHost(); | |
| 6256 RenderWidgetHostViewBase* child_c_rwhv = child_c_rwh->GetView(); | |
| 6257 | |
| 6258 // Change the text value in <input> field of either frame so that we can | |
| 6259 // later track the changes. | |
| 6260 EXPECT_TRUE( | |
| 6261 ExecuteScript(child_b->current_frame_host(), | |
| 6262 "document.querySelector('input').value = 'second';")); | |
| 6263 EXPECT_TRUE( | |
| 6264 ExecuteScript(child_c->current_frame_host(), | |
| 6265 "document.querySelector('input').value = 'third';")); | |
| 6266 | |
| 6267 // Verfy the input type is none in the begning. | |
|
Charlie Reis
2016/04/01 21:24:10
nit: beginning
EhsanK
2016/04/02 03:14:02
Done. Thanks!
| |
| 6268 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, root_rwhv->text_input_state()->type); | |
| 6269 | |
| 6270 // A helper function to send a tab key to the frame and wait for a state | |
| 6271 // changed message. | |
| 6272 auto press_tab_and_wait_for_text_input_state_change = | |
| 6273 [contents](RenderWidgetHostImpl* rwh) { | |
| 6274 scoped_refptr<TextInputStateChangedMessageFilter> filter = | |
| 6275 new TextInputStateChangedMessageFilter(rwh); | |
| 6276 SimulateKeyPress(contents, ui::VKEY_TAB, false, false, false, false); | |
| 6277 filter->WaitUntilTextInputStateChanges(); | |
| 6278 }; | |
| 6279 | |
| 6280 // Send focus to the first input field | |
|
Charlie Reis
2016/04/01 21:24:09
nit: End with period.
EhsanK
2016/04/02 03:14:02
Done. Thanks!
| |
| 6281 press_tab_and_wait_for_text_input_state_change(root_rwh); | |
| 6282 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, root_rwhv->text_input_state()->type); | |
| 6283 EXPECT_EQ("first", root_rwhv->text_input_state()->value); | |
| 6284 | |
| 6285 // Verify the top-level state is changed. | |
| 6286 EXPECT_EQ("first", web_contents()->GetTextInputState().value); | |
| 6287 | |
| 6288 // Send focus to the input field in frame b. | |
| 6289 press_tab_and_wait_for_text_input_state_change(child_b_rwh); | |
| 6290 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, child_b_rwhv->text_input_state()->type); | |
| 6291 EXPECT_EQ("second", child_b_rwhv->text_input_state()->value); | |
| 6292 | |
| 6293 EXPECT_EQ("second", web_contents()->GetTextInputState().value); | |
| 6294 | |
| 6295 // Send focus to the input field in frame c. | |
| 6296 press_tab_and_wait_for_text_input_state_change(child_c_rwh); | |
| 6297 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, child_c_rwhv->text_input_state()->type); | |
| 6298 EXPECT_EQ("third", child_c_rwhv->text_input_state()->value); | |
| 6299 | |
| 6300 EXPECT_EQ("third", web_contents()->GetTextInputState().value); | |
| 6301 | |
| 6302 // Send focus to the last input field in top frame. | |
| 6303 press_tab_and_wait_for_text_input_state_change(root_rwh); | |
| 6304 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, root_rwhv->text_input_state()->type); | |
| 6305 EXPECT_EQ("fourth", root_rwhv->text_input_state()->value); | |
| 6306 | |
| 6307 EXPECT_EQ("fourth", web_contents()->GetTextInputState().value); | |
| 6308 } | |
| 6309 | |
| 6310 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 6311 TextInputStateChangesAfterRendererCrashes) { | |
| 6312 GURL main_url( | |
| 6313 embedded_test_server()->GetURL("a.com", "/page_with_iframe.html")); | |
| 6314 NavigateToURL(shell(), main_url); | |
| 6315 WebContentsImpl* contents = web_contents(); | |
| 6316 | |
| 6317 FrameTreeNode* root = contents->GetFrameTree()->root(); | |
| 6318 | |
| 6319 FrameTreeNode* child = root->child_at(0); | |
| 6320 GURL child_url(embedded_test_server()->GetURL( | |
| 6321 "b.com", "/textinput/page_with_input.html")); | |
| 6322 NavigateFrameToURL(child, child_url); | |
| 6323 EXPECT_TRUE(WaitForRenderFrameReady(child->current_frame_host())); | |
| 6324 | |
| 6325 // Verify that the text input state is initially none. | |
| 6326 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, contents->GetTextInputState().type); | |
| 6327 | |
| 6328 auto press_tab_and_wait_for_state_change = | |
| 6329 [contents](RenderWidgetHostImpl* rwh) { | |
| 6330 scoped_refptr<TextInputStateChangedMessageFilter> filter = | |
| 6331 new TextInputStateChangedMessageFilter(rwh); | |
| 6332 SimulateKeyPress(contents, ui::VKEY_TAB, false, false, false, false); | |
| 6333 filter->WaitUntilTextInputStateChanges(); | |
| 6334 }; | |
| 6335 | |
| 6336 auto crash_renderer_and_wait_for_input_state_none = [contents]( | |
| 6337 RenderProcessHost* host) { | |
| 6338 RenderProcessHostWatcher crash_observer( | |
| 6339 host, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); | |
| 6340 host->Shutdown(0, false); | |
| 6341 crash_observer.Wait(); | |
| 6342 | |
| 6343 // We need to wait until the actual text input state update occurs. | |
| 6344 while (contents->GetTextInputState().type != ui::TEXT_INPUT_TYPE_NONE) { | |
| 6345 scoped_refptr<MessageLoopRunner> loop_runner_ = new MessageLoopRunner(); | |
| 6346 BrowserThread::PostDelayedTask(BrowserThread::UI, FROM_HERE, | |
| 6347 loop_runner_->QuitClosure(), | |
| 6348 base::TimeDelta::FromMilliseconds(0LL)); | |
| 6349 loop_runner_->Run(); | |
| 6350 } | |
| 6351 }; | |
| 6352 | |
| 6353 // Press a tab key to focus the <input> and verify that the top level | |
| 6354 // WebContents sees it. | |
| 6355 RenderWidgetHostImpl* child_rwh = | |
| 6356 child->current_frame_host()->GetRenderWidgetHost(); | |
| 6357 press_tab_and_wait_for_state_change(child_rwh); | |
| 6358 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, contents->GetTextInputState().type); | |
| 6359 | |
| 6360 // Crash the renderer and wait until WebContentsImpl has updates the | |
| 6361 // state. | |
| 6362 RenderProcessHost* child_process = child_rwh->GetProcess(); | |
| 6363 crash_renderer_and_wait_for_input_state_none(child_process); | |
| 6364 | |
| 6365 // Now repeat the same test for the top level RWHV. | |
| 6366 // First remove the <iframe> and append an <input> | |
| 6367 EXPECT_TRUE(ExecuteScript(contents, | |
| 6368 "var f = document.querySelector('iframe'); " | |
| 6369 "f.parentNode.removeChild(f);")); | |
| 6370 EXPECT_TRUE(ExecuteScript( | |
| 6371 contents, "document.body.appendChild(document.createElement('input'));")); | |
| 6372 | |
| 6373 // Press tab to focus the <input> and observe the state change. | |
| 6374 RenderWidgetHostImpl* root_rwh = | |
| 6375 root->current_frame_host()->GetRenderWidgetHost(); | |
| 6376 press_tab_and_wait_for_state_change(root_rwh); | |
| 6377 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, contents->GetTextInputState().type); | |
| 6378 | |
| 6379 // Crash the tab renderer and observer the input state going back to none. | |
| 6380 RenderProcessHost* host_process = root_rwh->GetProcess(); | |
| 6381 crash_renderer_and_wait_for_input_state_none(host_process); | |
| 6382 } | |
| 6383 | |
| 6301 } // namespace content | 6384 } // namespace content |
| OLD | NEW |