Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(664)

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 1652483002: Browser Side Text Input State Tracking for OOPIF. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed a Compile Error Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 }; 595 };
596 596
597 // Ensure that navigating subframes in --site-per-process mode works and the 597 // Ensure that navigating subframes in --site-per-process mode works and the
598 // correct documents are committed. 598 // correct documents are committed.
599 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) { 599 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframe) {
600 GURL main_url(embedded_test_server()->GetURL( 600 GURL main_url(embedded_test_server()->GetURL(
601 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); 601 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))"));
602 NavigateToURL(shell(), main_url); 602 NavigateToURL(shell(), main_url);
603 603
604 // It is safe to obtain the root frame tree node here, as it doesn't change. 604 // It is safe to obtain the root frame tree node here, as it doesn't change.
605 FrameTreeNode* root = 605 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
606 static_cast<WebContentsImpl*>(shell()->web_contents())->
607 GetFrameTree()->root();
608 606
609 TestNavigationObserver observer(shell()->web_contents()); 607 TestNavigationObserver observer(shell()->web_contents());
610 608
611 // Load same-site page into iframe. 609 // Load same-site page into iframe.
612 FrameTreeNode* child = root->child_at(0); 610 FrameTreeNode* child = root->child_at(0);
613 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 611 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
614 NavigateFrameToURL(child, http_url); 612 NavigateFrameToURL(child, http_url);
615 EXPECT_EQ(http_url, observer.last_navigation_url()); 613 EXPECT_EQ(http_url, observer.last_navigation_url());
616 EXPECT_TRUE(observer.last_navigation_succeeded()); 614 EXPECT_TRUE(observer.last_navigation_succeeded());
617 { 615 {
618 // There should be only one RenderWidgetHost when there are no 616 // There should be only one RenderWidgetHost when there are no
619 // cross-process iframes. 617 // cross-process iframes.
620 std::set<RenderWidgetHostView*> views_set = 618 std::set<RenderWidgetHostView*> views_set =
621 static_cast<WebContentsImpl*>(shell()->web_contents()) 619 web_contents()->GetRenderWidgetHostViewsInTree();
622 ->GetRenderWidgetHostViewsInTree();
623 EXPECT_EQ(1U, views_set.size()); 620 EXPECT_EQ(1U, views_set.size());
624 } 621 }
625 622
626 EXPECT_EQ( 623 EXPECT_EQ(
627 " Site A\n" 624 " Site A\n"
628 " |--Site A\n" 625 " |--Site A\n"
629 " +--Site A\n" 626 " +--Site A\n"
630 " |--Site A\n" 627 " |--Site A\n"
631 " +--Site A\n" 628 " +--Site A\n"
632 " +--Site A\n" 629 " +--Site A\n"
(...skipping 12 matching lines...) Expand all
645 SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance(); 642 SiteInstance* site_instance = child->current_frame_host()->GetSiteInstance();
646 RenderViewHost* rvh = child->current_frame_host()->render_view_host(); 643 RenderViewHost* rvh = child->current_frame_host()->render_view_host();
647 RenderProcessHost* rph = child->current_frame_host()->GetProcess(); 644 RenderProcessHost* rph = child->current_frame_host()->GetProcess();
648 EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh); 645 EXPECT_NE(shell()->web_contents()->GetRenderViewHost(), rvh);
649 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance); 646 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), site_instance);
650 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph); 647 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), rph);
651 { 648 {
652 // There should be now two RenderWidgetHosts, one for each process 649 // There should be now two RenderWidgetHosts, one for each process
653 // rendering a frame. 650 // rendering a frame.
654 std::set<RenderWidgetHostView*> views_set = 651 std::set<RenderWidgetHostView*> views_set =
655 static_cast<WebContentsImpl*>(shell()->web_contents()) 652 web_contents()->GetRenderWidgetHostViewsInTree();
656 ->GetRenderWidgetHostViewsInTree();
657 EXPECT_EQ(2U, views_set.size()); 653 EXPECT_EQ(2U, views_set.size());
658 } 654 }
659 RenderFrameProxyHost* proxy_to_parent = 655 RenderFrameProxyHost* proxy_to_parent =
660 child->render_manager()->GetProxyToParent(); 656 child->render_manager()->GetProxyToParent();
661 EXPECT_TRUE(proxy_to_parent); 657 EXPECT_TRUE(proxy_to_parent);
662 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); 658 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector());
663 // The out-of-process iframe should have its own RenderWidgetHost, 659 // The out-of-process iframe should have its own RenderWidgetHost,
664 // independent of any RenderViewHost. 660 // independent of any RenderViewHost.
665 EXPECT_NE( 661 EXPECT_NE(
666 rvh->GetWidget()->GetView(), 662 rvh->GetWidget()->GetView(),
(...skipping 26 matching lines...) Expand all
693 EXPECT_NE(rvh, child->current_frame_host()->render_view_host()); 689 EXPECT_NE(rvh, child->current_frame_host()->render_view_host());
694 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 690 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
695 child->current_frame_host()->GetSiteInstance()); 691 child->current_frame_host()->GetSiteInstance());
696 EXPECT_NE(site_instance, 692 EXPECT_NE(site_instance,
697 child->current_frame_host()->GetSiteInstance()); 693 child->current_frame_host()->GetSiteInstance());
698 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(), 694 EXPECT_NE(shell()->web_contents()->GetRenderProcessHost(),
699 child->current_frame_host()->GetProcess()); 695 child->current_frame_host()->GetProcess());
700 EXPECT_NE(rph, child->current_frame_host()->GetProcess()); 696 EXPECT_NE(rph, child->current_frame_host()->GetProcess());
701 { 697 {
702 std::set<RenderWidgetHostView*> views_set = 698 std::set<RenderWidgetHostView*> views_set =
703 static_cast<WebContentsImpl*>(shell()->web_contents()) 699 web_contents()->GetRenderWidgetHostViewsInTree();
704 ->GetRenderWidgetHostViewsInTree();
705 EXPECT_EQ(2U, views_set.size()); 700 EXPECT_EQ(2U, views_set.size());
706 } 701 }
707 EXPECT_EQ(proxy_to_parent, child->render_manager()->GetProxyToParent()); 702 EXPECT_EQ(proxy_to_parent, child->render_manager()->GetProxyToParent());
708 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector()); 703 EXPECT_TRUE(proxy_to_parent->cross_process_frame_connector());
709 EXPECT_NE( 704 EXPECT_NE(
710 child->current_frame_host()->render_view_host()->GetWidget()->GetView(), 705 child->current_frame_host()->render_view_host()->GetWidget()->GetView(),
711 proxy_to_parent->cross_process_frame_connector()->get_view_for_testing()); 706 proxy_to_parent->cross_process_frame_connector()->get_view_for_testing());
712 EXPECT_TRUE(child->current_frame_host()->GetRenderWidgetHost()); 707 EXPECT_TRUE(child->current_frame_host()->GetRenderWidgetHost());
713 708
714 EXPECT_EQ( 709 EXPECT_EQ(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 #else 756 #else
762 #define MAYBE_NestedSurfaceHitTestTest NestedSurfaceHitTestTest 757 #define MAYBE_NestedSurfaceHitTestTest NestedSurfaceHitTestTest
763 #endif 758 #endif
764 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 759 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
765 MAYBE_NestedSurfaceHitTestTest) { 760 MAYBE_NestedSurfaceHitTestTest) {
766 GURL main_url(embedded_test_server()->GetURL( 761 GURL main_url(embedded_test_server()->GetURL(
767 "/frame_tree/page_with_positioned_nested_frames.html")); 762 "/frame_tree/page_with_positioned_nested_frames.html"));
768 NavigateToURL(shell(), main_url); 763 NavigateToURL(shell(), main_url);
769 764
770 // It is safe to obtain the root frame tree node here, as it doesn't change. 765 // It is safe to obtain the root frame tree node here, as it doesn't change.
771 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 766 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
772 ->GetFrameTree()
773 ->root();
774 ASSERT_EQ(1U, root->child_count()); 767 ASSERT_EQ(1U, root->child_count());
775 768
776 FrameTreeNode* parent_iframe_node = root->child_at(0); 769 FrameTreeNode* parent_iframe_node = root->child_at(0);
777 GURL site_url(embedded_test_server()->GetURL( 770 GURL site_url(embedded_test_server()->GetURL(
778 "a.com", "/frame_tree/page_with_positioned_frame.html")); 771 "a.com", "/frame_tree/page_with_positioned_frame.html"));
779 EXPECT_EQ(site_url, parent_iframe_node->current_url()); 772 EXPECT_EQ(site_url, parent_iframe_node->current_url());
780 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 773 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
781 parent_iframe_node->current_frame_host()->GetSiteInstance()); 774 parent_iframe_node->current_frame_host()->GetSiteInstance());
782 775
783 FrameTreeNode* nested_iframe_node = parent_iframe_node->child_at(0); 776 FrameTreeNode* nested_iframe_node = parent_iframe_node->child_at(0);
784 GURL nested_site_url( 777 GURL nested_site_url(
785 embedded_test_server()->GetURL("baz.com", "/title1.html")); 778 embedded_test_server()->GetURL("baz.com", "/title1.html"));
786 EXPECT_EQ(nested_site_url, nested_iframe_node->current_url()); 779 EXPECT_EQ(nested_site_url, nested_iframe_node->current_url());
787 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 780 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
788 nested_iframe_node->current_frame_host()->GetSiteInstance()); 781 nested_iframe_node->current_frame_host()->GetSiteInstance());
789 EXPECT_NE(parent_iframe_node->current_frame_host()->GetSiteInstance(), 782 EXPECT_NE(parent_iframe_node->current_frame_host()->GetSiteInstance(),
790 nested_iframe_node->current_frame_host()->GetSiteInstance()); 783 nested_iframe_node->current_frame_host()->GetSiteInstance());
791 784
792 // Create listeners for mouse events. 785 // Create listeners for mouse events.
793 RenderWidgetHostMouseEventMonitor main_frame_monitor( 786 RenderWidgetHostMouseEventMonitor main_frame_monitor(
794 root->current_frame_host()->GetRenderWidgetHost()); 787 root->current_frame_host()->GetRenderWidgetHost());
795 RenderWidgetHostMouseEventMonitor nested_frame_monitor( 788 RenderWidgetHostMouseEventMonitor nested_frame_monitor(
796 nested_iframe_node->current_frame_host()->GetRenderWidgetHost()); 789 nested_iframe_node->current_frame_host()->GetRenderWidgetHost());
797 790
798 RenderWidgetHostInputEventRouter* router = 791 RenderWidgetHostInputEventRouter* router =
799 static_cast<WebContentsImpl*>(shell()->web_contents()) 792 web_contents()->GetInputEventRouter();
800 ->GetInputEventRouter();
801 793
802 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 794 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
803 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 795 root->current_frame_host()->GetRenderWidgetHost()->GetView());
804 RenderWidgetHostViewBase* rwhv_nested = 796 RenderWidgetHostViewBase* rwhv_nested =
805 static_cast<RenderWidgetHostViewBase*>( 797 static_cast<RenderWidgetHostViewBase*>(
806 nested_iframe_node->current_frame_host() 798 nested_iframe_node->current_frame_host()
807 ->GetRenderWidgetHost() 799 ->GetRenderWidgetHost()
808 ->GetView()); 800 ->GetView());
809 801
810 SurfaceHitTestReadyNotifier notifier( 802 SurfaceHitTestReadyNotifier notifier(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 #else 834 #else
843 #define MAYBE_SurfaceHitTestPointerEventsNone SurfaceHitTestPointerEventsNone 835 #define MAYBE_SurfaceHitTestPointerEventsNone SurfaceHitTestPointerEventsNone
844 #endif 836 #endif
845 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 837 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
846 MAYBE_SurfaceHitTestPointerEventsNone) { 838 MAYBE_SurfaceHitTestPointerEventsNone) {
847 GURL main_url(embedded_test_server()->GetURL( 839 GURL main_url(embedded_test_server()->GetURL(
848 "/frame_tree/page_with_positioned_frame_pointer-events_none.html")); 840 "/frame_tree/page_with_positioned_frame_pointer-events_none.html"));
849 NavigateToURL(shell(), main_url); 841 NavigateToURL(shell(), main_url);
850 842
851 // It is safe to obtain the root frame tree node here, as it doesn't change. 843 // It is safe to obtain the root frame tree node here, as it doesn't change.
852 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 844 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
853 ->GetFrameTree()
854 ->root();
855 ASSERT_EQ(1U, root->child_count()); 845 ASSERT_EQ(1U, root->child_count());
856 846
857 FrameTreeNode* child_node = root->child_at(0); 847 FrameTreeNode* child_node = root->child_at(0);
858 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); 848 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html"));
859 EXPECT_EQ(site_url, child_node->current_url()); 849 EXPECT_EQ(site_url, child_node->current_url());
860 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 850 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
861 child_node->current_frame_host()->GetSiteInstance()); 851 child_node->current_frame_host()->GetSiteInstance());
862 852
863 // Create listeners for mouse events. 853 // Create listeners for mouse events.
864 RenderWidgetHostMouseEventMonitor main_frame_monitor( 854 RenderWidgetHostMouseEventMonitor main_frame_monitor(
865 root->current_frame_host()->GetRenderWidgetHost()); 855 root->current_frame_host()->GetRenderWidgetHost());
866 RenderWidgetHostMouseEventMonitor child_frame_monitor( 856 RenderWidgetHostMouseEventMonitor child_frame_monitor(
867 child_node->current_frame_host()->GetRenderWidgetHost()); 857 child_node->current_frame_host()->GetRenderWidgetHost());
868 858
869 RenderWidgetHostInputEventRouter* router = 859 RenderWidgetHostInputEventRouter* router =
870 static_cast<WebContentsImpl*>(shell()->web_contents()) 860 web_contents()->GetInputEventRouter();
871 ->GetInputEventRouter();
872 861
873 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 862 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
874 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 863 root->current_frame_host()->GetRenderWidgetHost()->GetView());
875 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( 864 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>(
876 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); 865 child_node->current_frame_host()->GetRenderWidgetHost()->GetView());
877 866
878 SurfaceHitTestReadyNotifier notifier( 867 SurfaceHitTestReadyNotifier notifier(
879 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); 868 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
880 notifier.WaitForSurfaceReady(); 869 notifier.WaitForSurfaceReady();
881 870
(...skipping 22 matching lines...) Expand all
904 #else 893 #else
905 #define MAYBE_CompositorFrameSwapped CompositorFrameSwapped 894 #define MAYBE_CompositorFrameSwapped CompositorFrameSwapped
906 #endif 895 #endif
907 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 896 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
908 MAYBE_CompositorFrameSwapped) { 897 MAYBE_CompositorFrameSwapped) {
909 GURL main_url(embedded_test_server()->GetURL( 898 GURL main_url(embedded_test_server()->GetURL(
910 "a.com", "/cross_site_iframe_factory.html?a(baz)")); 899 "a.com", "/cross_site_iframe_factory.html?a(baz)"));
911 NavigateToURL(shell(), main_url); 900 NavigateToURL(shell(), main_url);
912 901
913 // It is safe to obtain the root frame tree node here, as it doesn't change. 902 // It is safe to obtain the root frame tree node here, as it doesn't change.
914 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 903 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
915 ->GetFrameTree()
916 ->root();
917 ASSERT_EQ(1U, root->child_count()); 904 ASSERT_EQ(1U, root->child_count());
918 905
919 FrameTreeNode* child_node = root->child_at(0); 906 FrameTreeNode* child_node = root->child_at(0);
920 GURL site_url(embedded_test_server()->GetURL( 907 GURL site_url(embedded_test_server()->GetURL(
921 "baz.com", "/cross_site_iframe_factory.html?baz()")); 908 "baz.com", "/cross_site_iframe_factory.html?baz()"));
922 EXPECT_EQ(site_url, child_node->current_url()); 909 EXPECT_EQ(site_url, child_node->current_url());
923 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 910 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
924 child_node->current_frame_host()->GetSiteInstance()); 911 child_node->current_frame_host()->GetSiteInstance());
925 RenderWidgetHostViewBase* rwhv_base = static_cast<RenderWidgetHostViewBase*>( 912 RenderWidgetHostViewBase* rwhv_base = static_cast<RenderWidgetHostViewBase*>(
926 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); 913 child_node->current_frame_host()->GetRenderWidgetHost()->GetView());
(...skipping 10 matching lines...) Expand all
937 } 924 }
938 } 925 }
939 926
940 // Ensure that OOPIFs are deleted after navigating to a new main frame. 927 // Ensure that OOPIFs are deleted after navigating to a new main frame.
941 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CleanupCrossSiteIframe) { 928 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CleanupCrossSiteIframe) {
942 GURL main_url(embedded_test_server()->GetURL( 929 GURL main_url(embedded_test_server()->GetURL(
943 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); 930 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))"));
944 NavigateToURL(shell(), main_url); 931 NavigateToURL(shell(), main_url);
945 932
946 // It is safe to obtain the root frame tree node here, as it doesn't change. 933 // It is safe to obtain the root frame tree node here, as it doesn't change.
947 FrameTreeNode* root = 934 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
948 static_cast<WebContentsImpl*>(shell()->web_contents())->
949 GetFrameTree()->root();
950 935
951 TestNavigationObserver observer(shell()->web_contents()); 936 TestNavigationObserver observer(shell()->web_contents());
952 937
953 // Load a cross-site page into both iframes. 938 // Load a cross-site page into both iframes.
954 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); 939 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html");
955 NavigateFrameToURL(root->child_at(0), foo_url); 940 NavigateFrameToURL(root->child_at(0), foo_url);
956 EXPECT_TRUE(observer.last_navigation_succeeded()); 941 EXPECT_TRUE(observer.last_navigation_succeeded());
957 EXPECT_EQ(foo_url, observer.last_navigation_url()); 942 EXPECT_EQ(foo_url, observer.last_navigation_url());
958 NavigateFrameToURL(root->child_at(1), foo_url); 943 NavigateFrameToURL(root->child_at(1), foo_url);
959 EXPECT_TRUE(observer.last_navigation_succeeded()); 944 EXPECT_TRUE(observer.last_navigation_succeeded());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 EXPECT_FALSE(RenderViewHost::FromID(subframe_process_id, subframe_rvh_id)); 981 EXPECT_FALSE(RenderViewHost::FromID(subframe_process_id, subframe_rvh_id));
997 } 982 }
998 983
999 // Ensure that root frames cannot be detached. 984 // Ensure that root frames cannot be detached.
1000 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RestrictFrameDetach) { 985 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RestrictFrameDetach) {
1001 GURL main_url(embedded_test_server()->GetURL( 986 GURL main_url(embedded_test_server()->GetURL(
1002 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); 987 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))"));
1003 NavigateToURL(shell(), main_url); 988 NavigateToURL(shell(), main_url);
1004 989
1005 // It is safe to obtain the root frame tree node here, as it doesn't change. 990 // It is safe to obtain the root frame tree node here, as it doesn't change.
1006 FrameTreeNode* root = 991 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1007 static_cast<WebContentsImpl*>(shell()->web_contents())->
1008 GetFrameTree()->root();
1009 992
1010 TestNavigationObserver observer(shell()->web_contents()); 993 TestNavigationObserver observer(shell()->web_contents());
1011 994
1012 // Load cross-site pages into both iframes. 995 // Load cross-site pages into both iframes.
1013 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html"); 996 GURL foo_url = embedded_test_server()->GetURL("foo.com", "/title2.html");
1014 NavigateFrameToURL(root->child_at(0), foo_url); 997 NavigateFrameToURL(root->child_at(0), foo_url);
1015 EXPECT_TRUE(observer.last_navigation_succeeded()); 998 EXPECT_TRUE(observer.last_navigation_succeeded());
1016 EXPECT_EQ(foo_url, observer.last_navigation_url()); 999 EXPECT_EQ(foo_url, observer.last_navigation_url());
1017 GURL bar_url = embedded_test_server()->GetURL("bar.com", "/title2.html"); 1000 GURL bar_url = embedded_test_server()->GetURL("bar.com", "/title2.html");
1018 NavigateFrameToURL(root->child_at(1), bar_url); 1001 NavigateFrameToURL(root->child_at(1), bar_url);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 " C = http://bar.com/", 1043 " C = http://bar.com/",
1061 DepictFrameTree(root)); 1044 DepictFrameTree(root));
1062 } 1045 }
1063 1046
1064 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteFrame) { 1047 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteFrame) {
1065 GURL main_url(embedded_test_server()->GetURL( 1048 GURL main_url(embedded_test_server()->GetURL(
1066 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); 1049 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))"));
1067 NavigateToURL(shell(), main_url); 1050 NavigateToURL(shell(), main_url);
1068 1051
1069 // It is safe to obtain the root frame tree node here, as it doesn't change. 1052 // It is safe to obtain the root frame tree node here, as it doesn't change.
1070 FrameTreeNode* root = 1053 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1071 static_cast<WebContentsImpl*>(shell()->web_contents())->
1072 GetFrameTree()->root();
1073 1054
1074 TestNavigationObserver observer(shell()->web_contents()); 1055 TestNavigationObserver observer(shell()->web_contents());
1075 1056
1076 // Load same-site page into iframe. 1057 // Load same-site page into iframe.
1077 FrameTreeNode* child = root->child_at(0); 1058 FrameTreeNode* child = root->child_at(0);
1078 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 1059 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
1079 NavigateFrameToURL(child, http_url); 1060 NavigateFrameToURL(child, http_url);
1080 EXPECT_EQ(http_url, observer.last_navigation_url()); 1061 EXPECT_EQ(http_url, observer.last_navigation_url());
1081 EXPECT_TRUE(observer.last_navigation_succeeded()); 1062 EXPECT_TRUE(observer.last_navigation_succeeded());
1082 1063
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 child->current_frame_host()->GetSiteInstance()); 1110 child->current_frame_host()->GetSiteInstance());
1130 } 1111 }
1131 1112
1132 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1113 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1133 NavigateRemoteFrameToBlankAndDataURLs) { 1114 NavigateRemoteFrameToBlankAndDataURLs) {
1134 GURL main_url(embedded_test_server()->GetURL( 1115 GURL main_url(embedded_test_server()->GetURL(
1135 "a.com", "/cross_site_iframe_factory.html?a(a,a(a))")); 1116 "a.com", "/cross_site_iframe_factory.html?a(a,a(a))"));
1136 NavigateToURL(shell(), main_url); 1117 NavigateToURL(shell(), main_url);
1137 1118
1138 // It is safe to obtain the root frame tree node here, as it doesn't change. 1119 // It is safe to obtain the root frame tree node here, as it doesn't change.
1139 FrameTreeNode* root = 1120 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1140 static_cast<WebContentsImpl*>(shell()->web_contents())->
1141 GetFrameTree()->root();
1142 1121
1143 TestNavigationObserver observer(shell()->web_contents()); 1122 TestNavigationObserver observer(shell()->web_contents());
1144 1123
1145 // Load same-site page into iframe. 1124 // Load same-site page into iframe.
1146 FrameTreeNode* child = root->child_at(0); 1125 FrameTreeNode* child = root->child_at(0);
1147 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 1126 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
1148 NavigateFrameToURL(child, http_url); 1127 NavigateFrameToURL(child, http_url);
1149 EXPECT_EQ(http_url, observer.last_navigation_url()); 1128 EXPECT_EQ(http_url, observer.last_navigation_url());
1150 EXPECT_TRUE(observer.last_navigation_succeeded()); 1129 EXPECT_TRUE(observer.last_navigation_succeeded());
1151 EXPECT_EQ( 1130 EXPECT_EQ(
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 // 1216 //
1238 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to 1217 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to
1239 // site B and stays in not rendered state. 1218 // site B and stays in not rendered state.
1240 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1219 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1241 NavigateRemoteFrameToKilledProcess) { 1220 NavigateRemoteFrameToKilledProcess) {
1242 GURL main_url(embedded_test_server()->GetURL( 1221 GURL main_url(embedded_test_server()->GetURL(
1243 "foo.com", "/cross_site_iframe_factory.html?foo.com(bar.com, foo.com)")); 1222 "foo.com", "/cross_site_iframe_factory.html?foo.com(bar.com, foo.com)"));
1244 NavigateToURL(shell(), main_url); 1223 NavigateToURL(shell(), main_url);
1245 1224
1246 // It is safe to obtain the root frame tree node here, as it doesn't change. 1225 // It is safe to obtain the root frame tree node here, as it doesn't change.
1247 FrameTreeNode* root = 1226 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1248 static_cast<WebContentsImpl*>(shell()->web_contents())->
1249 GetFrameTree()->root();
1250 1227
1251 TestNavigationObserver observer(shell()->web_contents()); 1228 TestNavigationObserver observer(shell()->web_contents());
1252 ASSERT_EQ(2U, root->child_count()); 1229 ASSERT_EQ(2U, root->child_count());
1253 1230
1254 // Make sure node2 points to the correct cross-site page. 1231 // Make sure node2 points to the correct cross-site page.
1255 GURL site_b_url = embedded_test_server()->GetURL( 1232 GURL site_b_url = embedded_test_server()->GetURL(
1256 "bar.com", "/cross_site_iframe_factory.html?bar.com()"); 1233 "bar.com", "/cross_site_iframe_factory.html?bar.com()");
1257 FrameTreeNode* node2 = root->child_at(0); 1234 FrameTreeNode* node2 = root->child_at(0);
1258 EXPECT_EQ(site_b_url, node2->current_url()); 1235 EXPECT_EQ(site_b_url, node2->current_url());
1259 1236
(...skipping 28 matching lines...) Expand all
1288 // 1265 //
1289 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to 1266 // Note that due to http://crbug.com/450681, node2 cannot be re-navigated to
1290 // site B and stays in not rendered state. 1267 // site B and stays in not rendered state.
1291 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1268 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1292 NavigateRemoteFrameToKilledProcessWithSubtree) { 1269 NavigateRemoteFrameToKilledProcessWithSubtree) {
1293 GURL main_url(embedded_test_server()->GetURL( 1270 GURL main_url(embedded_test_server()->GetURL(
1294 "a.com", "/cross_site_iframe_factory.html?a(bar(baz), a)")); 1271 "a.com", "/cross_site_iframe_factory.html?a(bar(baz), a)"));
1295 NavigateToURL(shell(), main_url); 1272 NavigateToURL(shell(), main_url);
1296 1273
1297 // It is safe to obtain the root frame tree node here, as it doesn't change. 1274 // It is safe to obtain the root frame tree node here, as it doesn't change.
1298 FrameTreeNode* root = 1275 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1299 static_cast<WebContentsImpl*>(shell()->web_contents())->
1300 GetFrameTree()->root();
1301 TestNavigationObserver observer(shell()->web_contents()); 1276 TestNavigationObserver observer(shell()->web_contents());
1302 1277
1303 ASSERT_EQ(2U, root->child_count()); 1278 ASSERT_EQ(2U, root->child_count());
1304 1279
1305 GURL site_b_url(embedded_test_server()->GetURL( 1280 GURL site_b_url(embedded_test_server()->GetURL(
1306 "bar.com", "/cross_site_iframe_factory.html?bar(baz())")); 1281 "bar.com", "/cross_site_iframe_factory.html?bar(baz())"));
1307 // We can't use a TestNavigationObserver to verify the URL here, 1282 // We can't use a TestNavigationObserver to verify the URL here,
1308 // since the frame has children that may have clobbered it in the observer. 1283 // since the frame has children that may have clobbered it in the observer.
1309 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); 1284 EXPECT_EQ(site_b_url, root->child_at(0)->current_url());
1310 1285
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 1350
1376 // Ensure that the renderer process doesn't crash when the main frame navigates 1351 // Ensure that the renderer process doesn't crash when the main frame navigates
1377 // a remote child to a page that results in a network error. 1352 // a remote child to a page that results in a network error.
1378 // See https://crbug.com/558016. 1353 // See https://crbug.com/558016.
1379 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteAfterError) { 1354 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateRemoteAfterError) {
1380 GURL main_url(embedded_test_server()->GetURL( 1355 GURL main_url(embedded_test_server()->GetURL(
1381 "a.com", "/cross_site_iframe_factory.html?a(a)")); 1356 "a.com", "/cross_site_iframe_factory.html?a(a)"));
1382 NavigateToURL(shell(), main_url); 1357 NavigateToURL(shell(), main_url);
1383 1358
1384 // It is safe to obtain the root frame tree node here, as it doesn't change. 1359 // It is safe to obtain the root frame tree node here, as it doesn't change.
1385 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1360 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1386 ->GetFrameTree()
1387 ->root();
1388 1361
1389 // Load same-site page into iframe. 1362 // Load same-site page into iframe.
1390 { 1363 {
1391 TestNavigationObserver observer(shell()->web_contents()); 1364 TestNavigationObserver observer(shell()->web_contents());
1392 FrameTreeNode* child = root->child_at(0); 1365 FrameTreeNode* child = root->child_at(0);
1393 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 1366 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
1394 NavigateFrameToURL(child, http_url); 1367 NavigateFrameToURL(child, http_url);
1395 EXPECT_EQ(http_url, observer.last_navigation_url()); 1368 EXPECT_EQ(http_url, observer.last_navigation_url());
1396 EXPECT_TRUE(observer.last_navigation_succeeded()); 1369 EXPECT_TRUE(observer.last_navigation_succeeded());
1397 observer.Wait(); 1370 observer.Wait();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 // successfully loads after earlier encountering a network error for it. 1404 // successfully loads after earlier encountering a network error for it.
1432 // See https://crbug.com/560511. 1405 // See https://crbug.com/560511.
1433 // TODO(creis): Make the net error page show in the correct process as well, 1406 // TODO(creis): Make the net error page show in the correct process as well,
1434 // per https://crbug.com/588314. 1407 // per https://crbug.com/588314.
1435 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) { 1408 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ProcessTransferAfterError) {
1436 GURL main_url(embedded_test_server()->GetURL( 1409 GURL main_url(embedded_test_server()->GetURL(
1437 "a.com", "/cross_site_iframe_factory.html?a(a)")); 1410 "a.com", "/cross_site_iframe_factory.html?a(a)"));
1438 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 1411 EXPECT_TRUE(NavigateToURL(shell(), main_url));
1439 1412
1440 // It is safe to obtain the root frame tree node here, as it doesn't change. 1413 // It is safe to obtain the root frame tree node here, as it doesn't change.
1441 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1414 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1442 ->GetFrameTree()
1443 ->root();
1444 FrameTreeNode* child = root->child_at(0); 1415 FrameTreeNode* child = root->child_at(0);
1445 GURL url_a = child->current_url(); 1416 GURL url_a = child->current_url();
1446 1417
1447 // Disable host resolution in the test server and try to navigate the subframe 1418 // Disable host resolution in the test server and try to navigate the subframe
1448 // cross-site, which will lead to a committed net error (which looks like 1419 // cross-site, which will lead to a committed net error (which looks like
1449 // success to the TestNavigationObserver). 1420 // success to the TestNavigationObserver).
1450 GURL url_b = embedded_test_server()->GetURL("b.com", "/title3.html"); 1421 GURL url_b = embedded_test_server()->GetURL("b.com", "/title3.html");
1451 host_resolver()->ClearRules(); 1422 host_resolver()->ClearRules();
1452 TestNavigationObserver observer(shell()->web_contents()); 1423 TestNavigationObserver observer(shell()->web_contents());
1453 NavigateIframeToURL(shell()->web_contents(), "child-0", url_b); 1424 NavigateIframeToURL(shell()->web_contents(), "child-0", url_b);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 // verifying that a proxy for node 4 has been recreated in process B. This 1506 // verifying that a proxy for node 4 has been recreated in process B. This
1536 // verifies the fix for https://crbug.com/478892. 1507 // verifies the fix for https://crbug.com/478892.
1537 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1508 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1538 NavigatingToKilledProcessRestoresAllProxies) { 1509 NavigatingToKilledProcessRestoresAllProxies) {
1539 // Navigate to a page with three frames: one cross-site and two same-site. 1510 // Navigate to a page with three frames: one cross-site and two same-site.
1540 GURL main_url(embedded_test_server()->GetURL( 1511 GURL main_url(embedded_test_server()->GetURL(
1541 "a.com", "/frame_tree/page_with_three_frames.html")); 1512 "a.com", "/frame_tree/page_with_three_frames.html"));
1542 NavigateToURL(shell(), main_url); 1513 NavigateToURL(shell(), main_url);
1543 1514
1544 // It is safe to obtain the root frame tree node here, as it doesn't change. 1515 // It is safe to obtain the root frame tree node here, as it doesn't change.
1545 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1516 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1546 ->GetFrameTree()
1547 ->root();
1548 TestNavigationObserver observer(shell()->web_contents()); 1517 TestNavigationObserver observer(shell()->web_contents());
1549 1518
1550 EXPECT_EQ( 1519 EXPECT_EQ(
1551 " Site A ------------ proxies for B\n" 1520 " Site A ------------ proxies for B\n"
1552 " |--Site B ------- proxies for A\n" 1521 " |--Site B ------- proxies for A\n"
1553 " |--Site A ------- proxies for B\n" 1522 " |--Site A ------- proxies for B\n"
1554 " +--Site A ------- proxies for B\n" 1523 " +--Site A ------- proxies for B\n"
1555 "Where A = http://a.com/\n" 1524 "Where A = http://a.com/\n"
1556 " B = http://b.com/", 1525 " B = http://b.com/",
1557 DepictFrameTree(root)); 1526 DepictFrameTree(root));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1604 // process A, and then checks that process B isn't resurrected to create a 1573 // process A, and then checks that process B isn't resurrected to create a
1605 // proxy for the new child frame. See https://crbug.com/476846. 1574 // proxy for the new child frame. See https://crbug.com/476846.
1606 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1575 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1607 CreateChildFrameAfterKillingProcess) { 1576 CreateChildFrameAfterKillingProcess) {
1608 // Navigate to a page with three frames: one cross-site and two same-site. 1577 // Navigate to a page with three frames: one cross-site and two same-site.
1609 GURL main_url(embedded_test_server()->GetURL( 1578 GURL main_url(embedded_test_server()->GetURL(
1610 "a.com", "/frame_tree/page_with_three_frames.html")); 1579 "a.com", "/frame_tree/page_with_three_frames.html"));
1611 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 1580 EXPECT_TRUE(NavigateToURL(shell(), main_url));
1612 1581
1613 // It is safe to obtain the root frame tree node here, as it doesn't change. 1582 // It is safe to obtain the root frame tree node here, as it doesn't change.
1614 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1583 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1615 ->GetFrameTree()
1616 ->root();
1617 1584
1618 EXPECT_EQ( 1585 EXPECT_EQ(
1619 " Site A ------------ proxies for B\n" 1586 " Site A ------------ proxies for B\n"
1620 " |--Site B ------- proxies for A\n" 1587 " |--Site B ------- proxies for A\n"
1621 " |--Site A ------- proxies for B\n" 1588 " |--Site A ------- proxies for B\n"
1622 " +--Site A ------- proxies for B\n" 1589 " +--Site A ------- proxies for B\n"
1623 "Where A = http://a.com/\n" 1590 "Where A = http://a.com/\n"
1624 " B = http://b.com/", 1591 " B = http://b.com/",
1625 DepictFrameTree(root)); 1592 DepictFrameTree(root));
1626 SiteInstance* b_site_instance = 1593 SiteInstance* b_site_instance =
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 // for which its parent has proxies. This includes A. However, even though 1648 // for which its parent has proxies. This includes A. However, even though
1682 // process A is live (step 4), the parent proxy in A is not live (which was 1649 // process A is live (step 4), the parent proxy in A is not live (which was
1683 // incorrectly assumed previously). This is because step 4 does not resurrect 1650 // incorrectly assumed previously). This is because step 4 does not resurrect
1684 // proxies for popups opened before the crash. 1651 // proxies for popups opened before the crash.
1685 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1652 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1686 CreateChildFrameAfterKillingOpener) { 1653 CreateChildFrameAfterKillingOpener) {
1687 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 1654 GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
1688 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 1655 EXPECT_TRUE(NavigateToURL(shell(), main_url));
1689 1656
1690 // It is safe to obtain the root frame tree node here, as it doesn't change. 1657 // It is safe to obtain the root frame tree node here, as it doesn't change.
1691 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1658 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1692 ->GetFrameTree()
1693 ->root();
1694 SiteInstance* site_instance_a = root->current_frame_host()->GetSiteInstance(); 1659 SiteInstance* site_instance_a = root->current_frame_host()->GetSiteInstance();
1695 1660
1696 // Open a popup and navigate it cross-process to b.com. 1661 // Open a popup and navigate it cross-process to b.com.
1697 ShellAddedObserver new_shell_observer; 1662 ShellAddedObserver new_shell_observer;
1698 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), 1663 EXPECT_TRUE(ExecuteScript(root->current_frame_host(),
1699 "popup = window.open('about:blank');")); 1664 "popup = window.open('about:blank');"));
1700 Shell* popup = new_shell_observer.GetShell(); 1665 Shell* popup = new_shell_observer.GetShell();
1701 GURL popup_url(embedded_test_server()->GetURL("b.com", "/title2.html")); 1666 GURL popup_url(embedded_test_server()->GetURL("b.com", "/title2.html"));
1702 EXPECT_TRUE(NavigateToURL(popup, popup_url)); 1667 EXPECT_TRUE(NavigateToURL(popup, popup_url));
1703 1668
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 // node1 is the root. 1734 // node1 is the root.
1770 // Initially, both node1.proxy_hosts_ and node3.proxy_hosts_ contain C. 1735 // Initially, both node1.proxy_hosts_ and node3.proxy_hosts_ contain C.
1771 // After we kill B, make sure proxies for C are cleared. 1736 // After we kill B, make sure proxies for C are cleared.
1772 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 1737 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
1773 KillingRendererClearsDescendantProxies) { 1738 KillingRendererClearsDescendantProxies) {
1774 GURL main_url(embedded_test_server()->GetURL( 1739 GURL main_url(embedded_test_server()->GetURL(
1775 "a.com", "/frame_tree/page_with_two_frames_nested.html")); 1740 "a.com", "/frame_tree/page_with_two_frames_nested.html"));
1776 NavigateToURL(shell(), main_url); 1741 NavigateToURL(shell(), main_url);
1777 1742
1778 // It is safe to obtain the root frame tree node here, as it doesn't change. 1743 // It is safe to obtain the root frame tree node here, as it doesn't change.
1779 FrameTreeNode* root = 1744 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1780 static_cast<WebContentsImpl*>(shell()->web_contents())->
1781 GetFrameTree()->root();
1782 ASSERT_EQ(2U, root->child_count()); 1745 ASSERT_EQ(2U, root->child_count());
1783 1746
1784 GURL site_b_url( 1747 GURL site_b_url(
1785 embedded_test_server()->GetURL( 1748 embedded_test_server()->GetURL(
1786 "bar.com", "/frame_tree/page_with_one_frame.html")); 1749 "bar.com", "/frame_tree/page_with_one_frame.html"));
1787 // We can't use a TestNavigationObserver to verify the URL here, 1750 // We can't use a TestNavigationObserver to verify the URL here,
1788 // since the frame has children that may have clobbered it in the observer. 1751 // since the frame has children that may have clobbered it in the observer.
1789 EXPECT_EQ(site_b_url, root->child_at(0)->current_url()); 1752 EXPECT_EQ(site_b_url, root->child_at(0)->current_url());
1790 1753
1791 // Ensure that a new process is created for node2. 1754 // Ensure that a new process is created for node2.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1843 } 1806 }
1844 1807
1845 // Crash a subframe and ensures its children are cleared from the FrameTree. 1808 // Crash a subframe and ensures its children are cleared from the FrameTree.
1846 // See http://crbug.com/338508. 1809 // See http://crbug.com/338508.
1847 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrashSubframe) { 1810 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrashSubframe) {
1848 GURL main_url(embedded_test_server()->GetURL( 1811 GURL main_url(embedded_test_server()->GetURL(
1849 "a.com", "/cross_site_iframe_factory.html?a(b)")); 1812 "a.com", "/cross_site_iframe_factory.html?a(b)"));
1850 NavigateToURL(shell(), main_url); 1813 NavigateToURL(shell(), main_url);
1851 1814
1852 // Check the subframe process. 1815 // Check the subframe process.
1853 FrameTreeNode* root = 1816 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1854 static_cast<WebContentsImpl*>(shell()->web_contents())->
1855 GetFrameTree()->root();
1856 EXPECT_EQ( 1817 EXPECT_EQ(
1857 " Site A ------------ proxies for B\n" 1818 " Site A ------------ proxies for B\n"
1858 " +--Site B ------- proxies for A\n" 1819 " +--Site B ------- proxies for A\n"
1859 "Where A = http://a.com/\n" 1820 "Where A = http://a.com/\n"
1860 " B = http://b.com/", 1821 " B = http://b.com/",
1861 DepictFrameTree(root)); 1822 DepictFrameTree(root));
1862 FrameTreeNode* child = root->child_at(0); 1823 FrameTreeNode* child = root->child_at(0);
1863 EXPECT_TRUE( 1824 EXPECT_TRUE(
1864 child->current_frame_host()->render_view_host()->IsRenderViewLive()); 1825 child->current_frame_host()->render_view_host()->IsRenderViewLive());
1865 EXPECT_TRUE(child->current_frame_host()->IsRenderFrameLive()); 1826 EXPECT_TRUE(child->current_frame_host()->IsRenderFrameLive());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1906 // When a new subframe is added, related SiteInstances that can reach the 1867 // When a new subframe is added, related SiteInstances that can reach the
1907 // subframe should create proxies for it (https://crbug.com/423587). This test 1868 // subframe should create proxies for it (https://crbug.com/423587). This test
1908 // checks that if A embeds B and later adds a new subframe A2, A2 gets a proxy 1869 // checks that if A embeds B and later adds a new subframe A2, A2 gets a proxy
1909 // in B's process. 1870 // in B's process.
1910 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CreateProxiesForNewFrames) { 1871 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CreateProxiesForNewFrames) {
1911 GURL main_url(embedded_test_server()->GetURL( 1872 GURL main_url(embedded_test_server()->GetURL(
1912 "b.com", "/frame_tree/page_with_one_frame.html")); 1873 "b.com", "/frame_tree/page_with_one_frame.html"));
1913 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 1874 EXPECT_TRUE(NavigateToURL(shell(), main_url));
1914 1875
1915 // It is safe to obtain the root frame tree node here, as it doesn't change. 1876 // It is safe to obtain the root frame tree node here, as it doesn't change.
1916 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1877 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
1917 ->GetFrameTree()
1918 ->root();
1919 ASSERT_EQ(1U, root->child_count()); 1878 ASSERT_EQ(1U, root->child_count());
1920 1879
1921 // Make sure the frame starts out at the correct cross-site URL. 1880 // Make sure the frame starts out at the correct cross-site URL.
1922 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), 1881 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"),
1923 root->child_at(0)->current_url()); 1882 root->child_at(0)->current_url());
1924 1883
1925 EXPECT_EQ( 1884 EXPECT_EQ(
1926 " Site A ------------ proxies for B\n" 1885 " Site A ------------ proxies for B\n"
1927 " +--Site B ------- proxies for A\n" 1886 " +--Site B ------- proxies for A\n"
1928 "Where A = http://b.com/\n" 1887 "Where A = http://b.com/\n"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 2110
2152 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are 2111 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are
2153 // created in the FrameTree skipping the subtree of the navigating frame. 2112 // created in the FrameTree skipping the subtree of the navigating frame.
2154 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2113 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2155 ProxyCreationSkipsSubtree) { 2114 ProxyCreationSkipsSubtree) {
2156 GURL main_url(embedded_test_server()->GetURL( 2115 GURL main_url(embedded_test_server()->GetURL(
2157 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))")); 2116 "a.com", "/cross_site_iframe_factory.html?a(a,a(a,a(a)))"));
2158 NavigateToURL(shell(), main_url); 2117 NavigateToURL(shell(), main_url);
2159 2118
2160 // It is safe to obtain the root frame tree node here, as it doesn't change. 2119 // It is safe to obtain the root frame tree node here, as it doesn't change.
2161 FrameTreeNode* root = 2120 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2162 static_cast<WebContentsImpl*>(shell()->web_contents())->
2163 GetFrameTree()->root();
2164 2121
2165 EXPECT_TRUE(root->child_at(1) != NULL); 2122 EXPECT_TRUE(root->child_at(1) != NULL);
2166 EXPECT_EQ(2U, root->child_at(1)->child_count()); 2123 EXPECT_EQ(2U, root->child_at(1)->child_count());
2167 2124
2168 { 2125 {
2169 // Load same-site page into iframe. 2126 // Load same-site page into iframe.
2170 TestNavigationObserver observer(shell()->web_contents()); 2127 TestNavigationObserver observer(shell()->web_contents());
2171 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 2128 GURL http_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
2172 NavigateFrameToURL(root->child_at(0), http_url); 2129 NavigateFrameToURL(root->child_at(0), http_url);
2173 EXPECT_EQ(http_url, observer.last_navigation_url()); 2130 EXPECT_EQ(http_url, observer.last_navigation_url());
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2256 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2300 MAYBE_FrameOwnerPropertiesPropagationScrolling) { 2257 MAYBE_FrameOwnerPropertiesPropagationScrolling) {
2301 #if defined(OS_MACOSX) 2258 #if defined(OS_MACOSX)
2302 ui::test::ScopedPreferredScrollerStyle scroller_style_override(false); 2259 ui::test::ScopedPreferredScrollerStyle scroller_style_override(false);
2303 #endif 2260 #endif
2304 GURL main_url(embedded_test_server()->GetURL( 2261 GURL main_url(embedded_test_server()->GetURL(
2305 "a.com", "/frame_owner_properties_scrolling.html")); 2262 "a.com", "/frame_owner_properties_scrolling.html"));
2306 NavigateToURL(shell(), main_url); 2263 NavigateToURL(shell(), main_url);
2307 2264
2308 // It is safe to obtain the root frame tree node here, as it doesn't change. 2265 // It is safe to obtain the root frame tree node here, as it doesn't change.
2309 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2266 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2310 ->GetFrameTree()
2311 ->root();
2312 ASSERT_EQ(1u, root->child_count()); 2267 ASSERT_EQ(1u, root->child_count());
2313 2268
2314 EXPECT_EQ( 2269 EXPECT_EQ(
2315 " Site A ------------ proxies for B\n" 2270 " Site A ------------ proxies for B\n"
2316 " +--Site B ------- proxies for A\n" 2271 " +--Site B ------- proxies for A\n"
2317 "Where A = http://a.com/\n" 2272 "Where A = http://a.com/\n"
2318 " B = http://b.com/", 2273 " B = http://b.com/",
2319 DepictFrameTree(root)); 2274 DepictFrameTree(root));
2320 2275
2321 FrameTreeNode* child = root->child_at(0); 2276 FrameTreeNode* child = root->child_at(0);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2372 2327
2373 // Verify that "marginwidth" and "marginheight" properties on frame elements 2328 // Verify that "marginwidth" and "marginheight" properties on frame elements
2374 // propagate to child frames correctly. 2329 // propagate to child frames correctly.
2375 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2330 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2376 FrameOwnerPropertiesPropagationMargin) { 2331 FrameOwnerPropertiesPropagationMargin) {
2377 GURL main_url(embedded_test_server()->GetURL( 2332 GURL main_url(embedded_test_server()->GetURL(
2378 "a.com", "/frame_owner_properties_margin.html")); 2333 "a.com", "/frame_owner_properties_margin.html"));
2379 NavigateToURL(shell(), main_url); 2334 NavigateToURL(shell(), main_url);
2380 2335
2381 // It is safe to obtain the root frame tree node here, as it doesn't change. 2336 // It is safe to obtain the root frame tree node here, as it doesn't change.
2382 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2337 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2383 ->GetFrameTree()
2384 ->root();
2385 ASSERT_EQ(1u, root->child_count()); 2338 ASSERT_EQ(1u, root->child_count());
2386 2339
2387 EXPECT_EQ( 2340 EXPECT_EQ(
2388 " Site A ------------ proxies for B\n" 2341 " Site A ------------ proxies for B\n"
2389 " +--Site B ------- proxies for A\n" 2342 " +--Site B ------- proxies for A\n"
2390 "Where A = http://a.com/\n" 2343 "Where A = http://a.com/\n"
2391 " B = http://b.com/", 2344 " B = http://b.com/",
2392 DepictFrameTree(root)); 2345 DepictFrameTree(root));
2393 2346
2394 FrameTreeNode* child = root->child_at(0); 2347 FrameTreeNode* child = root->child_at(0);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2464 } 2417 }
2465 } 2418 }
2466 2419
2467 // Verify origin replication with an A-embed-B-embed-C-embed-A hierarchy. 2420 // Verify origin replication with an A-embed-B-embed-C-embed-A hierarchy.
2468 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginReplication) { 2421 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginReplication) {
2469 GURL main_url(embedded_test_server()->GetURL( 2422 GURL main_url(embedded_test_server()->GetURL(
2470 "a.com", "/cross_site_iframe_factory.html?a(b(c(a),b), a)")); 2423 "a.com", "/cross_site_iframe_factory.html?a(b(c(a),b), a)"));
2471 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2424 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2472 2425
2473 // It is safe to obtain the root frame tree node here, as it doesn't change. 2426 // It is safe to obtain the root frame tree node here, as it doesn't change.
2474 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2427 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2475 ->GetFrameTree()
2476 ->root();
2477 2428
2478 EXPECT_EQ( 2429 EXPECT_EQ(
2479 " Site A ------------ proxies for B C\n" 2430 " Site A ------------ proxies for B C\n"
2480 " |--Site B ------- proxies for A C\n" // tiptop_child 2431 " |--Site B ------- proxies for A C\n" // tiptop_child
2481 " | |--Site C -- proxies for A B\n" // middle_child 2432 " | |--Site C -- proxies for A B\n" // middle_child
2482 " | | +--Site A -- proxies for B C\n" // lowest_child 2433 " | | +--Site A -- proxies for B C\n" // lowest_child
2483 " | +--Site B -- proxies for A C\n" 2434 " | +--Site B -- proxies for A C\n"
2484 " +--Site A ------- proxies for B C\n" 2435 " +--Site A ------- proxies for B C\n"
2485 "Where A = http://a.com/\n" 2436 "Where A = http://a.com/\n"
2486 " B = http://b.com/\n" 2437 " B = http://b.com/\n"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2555 &result)); 2506 &result));
2556 EXPECT_EQ(a_origin, result + "/"); 2507 EXPECT_EQ(a_origin, result + "/");
2557 } 2508 }
2558 2509
2559 // Check that iframe sandbox flags are replicated correctly. 2510 // Check that iframe sandbox flags are replicated correctly.
2560 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsReplication) { 2511 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsReplication) {
2561 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html")); 2512 GURL main_url(embedded_test_server()->GetURL("/sandboxed_frames.html"));
2562 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2513 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2563 2514
2564 // It is safe to obtain the root frame tree node here, as it doesn't change. 2515 // It is safe to obtain the root frame tree node here, as it doesn't change.
2565 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2516 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2566 ->GetFrameTree()
2567 ->root();
2568 2517
2569 TestNavigationObserver observer(shell()->web_contents()); 2518 TestNavigationObserver observer(shell()->web_contents());
2570 2519
2571 // Navigate the second (sandboxed) subframe to a cross-site page with a 2520 // Navigate the second (sandboxed) subframe to a cross-site page with a
2572 // subframe. 2521 // subframe.
2573 GURL foo_url( 2522 GURL foo_url(
2574 embedded_test_server()->GetURL("foo.com", "/frame_tree/1-1.html")); 2523 embedded_test_server()->GetURL("foo.com", "/frame_tree/1-1.html"));
2575 NavigateFrameToURL(root->child_at(1), foo_url); 2524 NavigateFrameToURL(root->child_at(1), foo_url);
2576 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 2525 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
2577 2526
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 EXPECT_EQ(main_url.GetOrigin().spec(), result + "/"); 2604 EXPECT_EQ(main_url.GetOrigin().spec(), result + "/");
2656 } 2605 }
2657 2606
2658 // Check that dynamic updates to iframe sandbox flags are propagated correctly. 2607 // Check that dynamic updates to iframe sandbox flags are propagated correctly.
2659 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicSandboxFlags) { 2608 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicSandboxFlags) {
2660 GURL main_url( 2609 GURL main_url(
2661 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); 2610 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html"));
2662 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2611 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2663 2612
2664 // It is safe to obtain the root frame tree node here, as it doesn't change. 2613 // It is safe to obtain the root frame tree node here, as it doesn't change.
2665 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2614 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2666 ->GetFrameTree()
2667 ->root();
2668 2615
2669 TestNavigationObserver observer(shell()->web_contents()); 2616 TestNavigationObserver observer(shell()->web_contents());
2670 ASSERT_EQ(2U, root->child_count()); 2617 ASSERT_EQ(2U, root->child_count());
2671 2618
2672 // Make sure first frame starts out at the correct cross-site page. 2619 // Make sure first frame starts out at the correct cross-site page.
2673 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), 2620 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"),
2674 root->child_at(0)->current_url()); 2621 root->child_at(0)->current_url());
2675 2622
2676 // Navigate second frame to another cross-site page. 2623 // Navigate second frame to another cross-site page.
2677 GURL baz_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); 2624 GURL baz_url(embedded_test_server()->GetURL("baz.com", "/title1.html"));
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 } 2726 }
2780 2727
2781 // Check that dynamic updates to iframe sandbox flags are propagated correctly. 2728 // Check that dynamic updates to iframe sandbox flags are propagated correctly.
2782 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2729 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2783 DynamicSandboxFlagsRemoteToLocal) { 2730 DynamicSandboxFlagsRemoteToLocal) {
2784 GURL main_url( 2731 GURL main_url(
2785 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); 2732 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html"));
2786 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2733 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2787 2734
2788 // It is safe to obtain the root frame tree node here, as it doesn't change. 2735 // It is safe to obtain the root frame tree node here, as it doesn't change.
2789 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2736 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2790 ->GetFrameTree()
2791 ->root();
2792 2737
2793 TestNavigationObserver observer(shell()->web_contents()); 2738 TestNavigationObserver observer(shell()->web_contents());
2794 ASSERT_EQ(2U, root->child_count()); 2739 ASSERT_EQ(2U, root->child_count());
2795 2740
2796 // Make sure the two frames starts out at correct URLs. 2741 // Make sure the two frames starts out at correct URLs.
2797 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"), 2742 EXPECT_EQ(embedded_test_server()->GetURL("bar.com", "/title1.html"),
2798 root->child_at(0)->current_url()); 2743 root->child_at(0)->current_url());
2799 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html"), 2744 EXPECT_EQ(embedded_test_server()->GetURL("/title1.html"),
2800 root->child_at(1)->current_url()); 2745 root->child_at(1)->current_url());
2801 2746
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2853 } 2798 }
2854 2799
2855 // Check that dynamic updates to iframe sandbox flags are propagated correctly. 2800 // Check that dynamic updates to iframe sandbox flags are propagated correctly.
2856 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2801 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2857 DynamicSandboxFlagsRendererInitiatedNavigation) { 2802 DynamicSandboxFlagsRendererInitiatedNavigation) {
2858 GURL main_url( 2803 GURL main_url(
2859 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); 2804 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html"));
2860 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2805 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2861 2806
2862 // It is safe to obtain the root frame tree node here, as it doesn't change. 2807 // It is safe to obtain the root frame tree node here, as it doesn't change.
2863 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2808 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2864 ->GetFrameTree()
2865 ->root();
2866 2809
2867 TestNavigationObserver observer(shell()->web_contents()); 2810 TestNavigationObserver observer(shell()->web_contents());
2868 ASSERT_EQ(1U, root->child_count()); 2811 ASSERT_EQ(1U, root->child_count());
2869 2812
2870 // Make sure the frame starts out at the correct cross-site page. 2813 // Make sure the frame starts out at the correct cross-site page.
2871 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"), 2814 EXPECT_EQ(embedded_test_server()->GetURL("baz.com", "/title1.html"),
2872 root->child_at(0)->current_url()); 2815 root->child_at(0)->current_url());
2873 2816
2874 // The frame should not be sandboxed to start with. 2817 // The frame should not be sandboxed to start with.
2875 EXPECT_EQ(blink::WebSandboxFlags::None, 2818 EXPECT_EQ(blink::WebSandboxFlags::None,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2934 // checking whether the grandchild frame added in step 3 sees proper sandbox 2877 // checking whether the grandchild frame added in step 3 sees proper sandbox
2935 // flags and origin for its (remote) parent. This wasn't addressed when 2878 // flags and origin for its (remote) parent. This wasn't addressed when
2936 // https://crbug.com/423587 was fixed. 2879 // https://crbug.com/423587 was fixed.
2937 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 2880 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
2938 ProxiesForNewChildFramesHaveCorrectReplicationState) { 2881 ProxiesForNewChildFramesHaveCorrectReplicationState) {
2939 GURL main_url( 2882 GURL main_url(
2940 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); 2883 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html"));
2941 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2884 EXPECT_TRUE(NavigateToURL(shell(), main_url));
2942 2885
2943 // It is safe to obtain the root frame tree node here, as it doesn't change. 2886 // It is safe to obtain the root frame tree node here, as it doesn't change.
2944 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2887 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
2945 ->GetFrameTree()
2946 ->root();
2947 TestNavigationObserver observer(shell()->web_contents()); 2888 TestNavigationObserver observer(shell()->web_contents());
2948 2889
2949 EXPECT_EQ( 2890 EXPECT_EQ(
2950 " Site A ------------ proxies for B\n" 2891 " Site A ------------ proxies for B\n"
2951 " +--Site B ------- proxies for A\n" 2892 " +--Site B ------- proxies for A\n"
2952 "Where A = http://127.0.0.1/\n" 2893 "Where A = http://127.0.0.1/\n"
2953 " B = http://baz.com/", 2894 " B = http://baz.com/",
2954 DepictFrameTree(root)); 2895 DepictFrameTree(root));
2955 2896
2956 // In the root frame, add a new sandboxed local frame, which itself has a 2897 // 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
3015 EXPECT_TRUE(success); 2956 EXPECT_TRUE(success);
3016 EXPECT_EQ(1u, Shell::windows().size()); 2957 EXPECT_EQ(1u, Shell::windows().size());
3017 } 2958 }
3018 2959
3019 // Verify that a child frame can retrieve the name property set by its parent. 2960 // Verify that a child frame can retrieve the name property set by its parent.
3020 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, WindowNameReplication) { 2961 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, WindowNameReplication) {
3021 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); 2962 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html"));
3022 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2963 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3023 2964
3024 // It is safe to obtain the root frame tree node here, as it doesn't change. 2965 // It is safe to obtain the root frame tree node here, as it doesn't change.
3025 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2966 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3026 ->GetFrameTree()
3027 ->root();
3028 2967
3029 TestNavigationObserver observer(shell()->web_contents()); 2968 TestNavigationObserver observer(shell()->web_contents());
3030 2969
3031 // Load cross-site page into iframe. 2970 // Load cross-site page into iframe.
3032 GURL frame_url = 2971 GURL frame_url =
3033 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); 2972 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html");
3034 NavigateFrameToURL(root->child_at(0), frame_url); 2973 NavigateFrameToURL(root->child_at(0), frame_url);
3035 EXPECT_TRUE(observer.last_navigation_succeeded()); 2974 EXPECT_TRUE(observer.last_navigation_succeeded());
3036 EXPECT_EQ(frame_url, observer.last_navigation_url()); 2975 EXPECT_EQ(frame_url, observer.last_navigation_url());
3037 2976
(...skipping 10 matching lines...) Expand all
3048 EXPECT_EQ("3-1-name", result); 2987 EXPECT_EQ("3-1-name", result);
3049 } 2988 }
3050 2989
3051 // Verify that dynamic updates to a frame's window.name propagate to the 2990 // Verify that dynamic updates to a frame's window.name propagate to the
3052 // frame's proxies, so that the latest frame names can be used in navigations. 2991 // frame's proxies, so that the latest frame names can be used in navigations.
3053 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicWindowName) { 2992 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DynamicWindowName) {
3054 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html")); 2993 GURL main_url(embedded_test_server()->GetURL("/frame_tree/2-4.html"));
3055 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 2994 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3056 2995
3057 // It is safe to obtain the root frame tree node here, as it doesn't change. 2996 // It is safe to obtain the root frame tree node here, as it doesn't change.
3058 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 2997 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3059 ->GetFrameTree()
3060 ->root();
3061 TestNavigationObserver observer(shell()->web_contents()); 2998 TestNavigationObserver observer(shell()->web_contents());
3062 2999
3063 // Load cross-site page into iframe. 3000 // Load cross-site page into iframe.
3064 GURL frame_url = 3001 GURL frame_url =
3065 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html"); 3002 embedded_test_server()->GetURL("foo.com", "/frame_tree/3-1.html");
3066 NavigateFrameToURL(root->child_at(0), frame_url); 3003 NavigateFrameToURL(root->child_at(0), frame_url);
3067 EXPECT_TRUE(observer.last_navigation_succeeded()); 3004 EXPECT_TRUE(observer.last_navigation_succeeded());
3068 EXPECT_EQ(frame_url, observer.last_navigation_url()); 3005 EXPECT_EQ(frame_url, observer.last_navigation_url());
3069 3006
3070 // Browser process should know the child frame's original window.name 3007 // Browser process should know the child frame's original window.name
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3107 } 3044 }
3108 3045
3109 // Verify that when a frame is navigated to a new origin, the origin update 3046 // Verify that when a frame is navigated to a new origin, the origin update
3110 // propagates to the frame's proxies. 3047 // propagates to the frame's proxies.
3111 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginUpdatesReachProxies) { 3048 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OriginUpdatesReachProxies) {
3112 GURL main_url( 3049 GURL main_url(
3113 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); 3050 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html"));
3114 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3051 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3115 3052
3116 // It is safe to obtain the root frame tree node here, as it doesn't change. 3053 // It is safe to obtain the root frame tree node here, as it doesn't change.
3117 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3054 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3118 ->GetFrameTree()
3119 ->root();
3120 TestNavigationObserver observer(shell()->web_contents()); 3055 TestNavigationObserver observer(shell()->web_contents());
3121 3056
3122 EXPECT_EQ( 3057 EXPECT_EQ(
3123 " Site A ------------ proxies for B\n" 3058 " Site A ------------ proxies for B\n"
3124 " |--Site B ------- proxies for A\n" 3059 " |--Site B ------- proxies for A\n"
3125 " +--Site A ------- proxies for B\n" 3060 " +--Site A ------- proxies for B\n"
3126 "Where A = http://127.0.0.1/\n" 3061 "Where A = http://127.0.0.1/\n"
3127 " B = http://bar.com/", 3062 " B = http://bar.com/",
3128 DepictFrameTree(root)); 3063 DepictFrameTree(root));
3129 3064
(...skipping 30 matching lines...) Expand all
3160 << frame_origin << ")"; 3095 << frame_origin << ")";
3161 } 3096 }
3162 3097
3163 // Ensure that navigating subframes in --site-per-process mode properly fires 3098 // Ensure that navigating subframes in --site-per-process mode properly fires
3164 // the DidStopLoading event on WebContentsObserver. 3099 // the DidStopLoading event on WebContentsObserver.
3165 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteDidStopLoading) { 3100 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteDidStopLoading) {
3166 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); 3101 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html"));
3167 NavigateToURL(shell(), main_url); 3102 NavigateToURL(shell(), main_url);
3168 3103
3169 // It is safe to obtain the root frame tree node here, as it doesn't change. 3104 // It is safe to obtain the root frame tree node here, as it doesn't change.
3170 FrameTreeNode* root = 3105 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3171 static_cast<WebContentsImpl*>(shell()->web_contents())->
3172 GetFrameTree()->root();
3173 3106
3174 TestNavigationObserver observer(shell()->web_contents()); 3107 TestNavigationObserver observer(shell()->web_contents());
3175 3108
3176 // Load same-site page into iframe. 3109 // Load same-site page into iframe.
3177 FrameTreeNode* child = root->child_at(0); 3110 FrameTreeNode* child = root->child_at(0);
3178 GURL http_url(embedded_test_server()->GetURL("/title1.html")); 3111 GURL http_url(embedded_test_server()->GetURL("/title1.html"));
3179 NavigateFrameToURL(child, http_url); 3112 NavigateFrameToURL(child, http_url);
3180 EXPECT_EQ(http_url, observer.last_navigation_url()); 3113 EXPECT_EQ(http_url, observer.last_navigation_url());
3181 EXPECT_TRUE(observer.last_navigation_succeeded()); 3114 EXPECT_TRUE(observer.last_navigation_succeeded());
3182 3115
(...skipping 13 matching lines...) Expand all
3196 3129
3197 // Ensure that the renderer does not crash when navigating a frame that has a 3130 // Ensure that the renderer does not crash when navigating a frame that has a
3198 // sibling RemoteFrame. See https://crbug.com/426953. 3131 // sibling RemoteFrame. See https://crbug.com/426953.
3199 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3132 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3200 NavigateWithSiblingRemoteFrame) { 3133 NavigateWithSiblingRemoteFrame) {
3201 GURL main_url( 3134 GURL main_url(
3202 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); 3135 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html"));
3203 NavigateToURL(shell(), main_url); 3136 NavigateToURL(shell(), main_url);
3204 3137
3205 // It is safe to obtain the root frame tree node here, as it doesn't change. 3138 // It is safe to obtain the root frame tree node here, as it doesn't change.
3206 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3139 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3207 ->GetFrameTree()
3208 ->root();
3209 TestNavigationObserver observer(shell()->web_contents()); 3140 TestNavigationObserver observer(shell()->web_contents());
3210 3141
3211 // Make sure the first frame is out of process. 3142 // Make sure the first frame is out of process.
3212 ASSERT_EQ(2U, root->child_count()); 3143 ASSERT_EQ(2U, root->child_count());
3213 FrameTreeNode* node2 = root->child_at(0); 3144 FrameTreeNode* node2 = root->child_at(0);
3214 EXPECT_NE(root->current_frame_host()->GetSiteInstance(), 3145 EXPECT_NE(root->current_frame_host()->GetSiteInstance(),
3215 node2->current_frame_host()->GetSiteInstance()); 3146 node2->current_frame_host()->GetSiteInstance());
3216 3147
3217 // Make sure the second frame is in the parent's process. 3148 // Make sure the second frame is in the parent's process.
3218 FrameTreeNode* node3 = root->child_at(1); 3149 FrameTreeNode* node3 = root->child_at(1);
(...skipping 13 matching lines...) Expand all
3232 // Ensure that the renderer does not crash when a local frame with a remote 3163 // Ensure that the renderer does not crash when a local frame with a remote
3233 // parent frame is swapped from local to remote, then back to local again. 3164 // parent frame is swapped from local to remote, then back to local again.
3234 // See https://crbug.com/585654. 3165 // See https://crbug.com/585654.
3235 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3166 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3236 NavigateSiblingsToSameProcess) { 3167 NavigateSiblingsToSameProcess) {
3237 GURL main_url( 3168 GURL main_url(
3238 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html")); 3169 embedded_test_server()->GetURL("/frame_tree/page_with_two_frames.html"));
3239 NavigateToURL(shell(), main_url); 3170 NavigateToURL(shell(), main_url);
3240 3171
3241 // It is safe to obtain the root frame tree node here, as it doesn't change. 3172 // It is safe to obtain the root frame tree node here, as it doesn't change.
3242 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3173 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3243 ->GetFrameTree()
3244 ->root();
3245 3174
3246 FrameTreeNode* node2 = root->child_at(0); 3175 FrameTreeNode* node2 = root->child_at(0);
3247 FrameTreeNode* node3 = root->child_at(1); 3176 FrameTreeNode* node3 = root->child_at(1);
3248 3177
3249 // Navigate the second iframe to the same process as the first. 3178 // Navigate the second iframe to the same process as the first.
3250 GURL frame_url = embedded_test_server()->GetURL("bar.com", "/title1.html"); 3179 GURL frame_url = embedded_test_server()->GetURL("bar.com", "/title1.html");
3251 NavigateFrameToURL(node3, frame_url); 3180 NavigateFrameToURL(node3, frame_url);
3252 3181
3253 // Verify that they are in the same process. 3182 // Verify that they are in the same process.
3254 EXPECT_EQ(node2->current_frame_host()->GetSiteInstance(), 3183 EXPECT_EQ(node2->current_frame_host()->GetSiteInstance(),
(...skipping 24 matching lines...) Expand all
3279 { 3208 {
3280 GURL main_url( 3209 GURL main_url(
3281 embedded_test_server()->GetURL("/frame_with_load_event.html")); 3210 embedded_test_server()->GetURL("/frame_with_load_event.html"));
3282 base::string16 expected_title(base::UTF8ToUTF16("LOADED")); 3211 base::string16 expected_title(base::UTF8ToUTF16("LOADED"));
3283 TitleWatcher title_watcher(shell()->web_contents(), expected_title); 3212 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
3284 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3213 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3285 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); 3214 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title);
3286 } 3215 }
3287 3216
3288 // It is safe to obtain the root frame tree node here, as it doesn't change. 3217 // It is safe to obtain the root frame tree node here, as it doesn't change.
3289 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3218 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3290 ->GetFrameTree()
3291 ->root();
3292 3219
3293 // Load another cross-site page into the iframe and check that the load event 3220 // Load another cross-site page into the iframe and check that the load event
3294 // is fired. 3221 // is fired.
3295 { 3222 {
3296 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); 3223 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title1.html"));
3297 base::string16 expected_title(base::UTF8ToUTF16("LOADEDLOADED")); 3224 base::string16 expected_title(base::UTF8ToUTF16("LOADEDLOADED"));
3298 TitleWatcher title_watcher(shell()->web_contents(), expected_title); 3225 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
3299 TestNavigationObserver observer(shell()->web_contents()); 3226 TestNavigationObserver observer(shell()->web_contents());
3300 NavigateFrameToURL(root->child_at(0), foo_url); 3227 NavigateFrameToURL(root->child_at(0), foo_url);
3301 EXPECT_TRUE(observer.last_navigation_succeeded()); 3228 EXPECT_TRUE(observer.last_navigation_succeeded());
3302 EXPECT_EQ(foo_url, observer.last_navigation_url()); 3229 EXPECT_EQ(foo_url, observer.last_navigation_url());
3303 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title); 3230 EXPECT_EQ(title_watcher.WaitAndGetTitle(), expected_title);
3304 } 3231 }
3305 } 3232 }
3306 3233
3307 // Check that postMessage can be routed between cross-site iframes. 3234 // Check that postMessage can be routed between cross-site iframes.
3308 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframePostMessage) { 3235 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframePostMessage) {
3309 GURL main_url(embedded_test_server()->GetURL( 3236 GURL main_url(embedded_test_server()->GetURL(
3310 "/frame_tree/page_with_post_message_frames.html")); 3237 "/frame_tree/page_with_post_message_frames.html"));
3311 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3238 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3312 3239
3313 // It is safe to obtain the root frame tree node here, as it doesn't change. 3240 // It is safe to obtain the root frame tree node here, as it doesn't change.
3314 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3241 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3315 ->GetFrameTree()
3316 ->root();
3317 3242
3318 ASSERT_EQ(2U, root->child_count()); 3243 ASSERT_EQ(2U, root->child_count());
3319 3244
3320 // Verify the frames start at correct URLs. First frame should be 3245 // Verify the frames start at correct URLs. First frame should be
3321 // same-site; second frame should be cross-site. 3246 // same-site; second frame should be cross-site.
3322 GURL same_site_url(embedded_test_server()->GetURL("/post_message.html")); 3247 GURL same_site_url(embedded_test_server()->GetURL("/post_message.html"));
3323 EXPECT_EQ(same_site_url, root->child_at(0)->current_url()); 3248 EXPECT_EQ(same_site_url, root->child_at(0)->current_url());
3324 GURL foo_url(embedded_test_server()->GetURL("foo.com", 3249 GURL foo_url(embedded_test_server()->GetURL("foo.com",
3325 "/post_message.html")); 3250 "/post_message.html"));
3326 EXPECT_EQ(foo_url, root->child_at(1)->current_url()); 3251 EXPECT_EQ(foo_url, root->child_at(1)->current_url());
(...skipping 25 matching lines...) Expand all
3352 3277
3353 // Check that postMessage can be sent from a subframe on a cross-process opener 3278 // Check that postMessage can be sent from a subframe on a cross-process opener
3354 // tab, and that its event.source points to a valid proxy. 3279 // tab, and that its event.source points to a valid proxy.
3355 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3280 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3356 PostMessageWithSubframeOnOpenerChain) { 3281 PostMessageWithSubframeOnOpenerChain) {
3357 GURL main_url(embedded_test_server()->GetURL( 3282 GURL main_url(embedded_test_server()->GetURL(
3358 "a.com", "/frame_tree/page_with_post_message_frames.html")); 3283 "a.com", "/frame_tree/page_with_post_message_frames.html"));
3359 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3284 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3360 3285
3361 // It is safe to obtain the root frame tree node here, as it doesn't change. 3286 // It is safe to obtain the root frame tree node here, as it doesn't change.
3362 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3287 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3363 ->GetFrameTree()
3364 ->root();
3365 3288
3366 ASSERT_EQ(2U, root->child_count()); 3289 ASSERT_EQ(2U, root->child_count());
3367 3290
3368 // Verify the initial state of the world. First frame should be same-site; 3291 // Verify the initial state of the world. First frame should be same-site;
3369 // second frame should be cross-site. 3292 // second frame should be cross-site.
3370 EXPECT_EQ( 3293 EXPECT_EQ(
3371 " Site A ------------ proxies for B\n" 3294 " Site A ------------ proxies for B\n"
3372 " |--Site A ------- proxies for B\n" 3295 " |--Site A ------- proxies for B\n"
3373 " +--Site B ------- proxies for A\n" 3296 " +--Site B ------- proxies for A\n"
3374 "Where A = http://a.com/\n" 3297 "Where A = http://a.com/\n"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
3463 3386
3464 // Check that parent.frames[num] references correct sibling frames when the 3387 // Check that parent.frames[num] references correct sibling frames when the
3465 // parent is remote. See https://crbug.com/478792. 3388 // parent is remote. See https://crbug.com/478792.
3466 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, IndexedFrameAccess) { 3389 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, IndexedFrameAccess) {
3467 // Start on a page with three same-site subframes. 3390 // Start on a page with three same-site subframes.
3468 GURL main_url( 3391 GURL main_url(
3469 embedded_test_server()->GetURL("a.com", "/frame_tree/top.html")); 3392 embedded_test_server()->GetURL("a.com", "/frame_tree/top.html"));
3470 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3393 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3471 3394
3472 // It is safe to obtain the root frame tree node here, as it doesn't change. 3395 // It is safe to obtain the root frame tree node here, as it doesn't change.
3473 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3396 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3474 ->GetFrameTree()
3475 ->root();
3476 ASSERT_EQ(3U, root->child_count()); 3397 ASSERT_EQ(3U, root->child_count());
3477 FrameTreeNode* child0 = root->child_at(0); 3398 FrameTreeNode* child0 = root->child_at(0);
3478 FrameTreeNode* child1 = root->child_at(1); 3399 FrameTreeNode* child1 = root->child_at(1);
3479 FrameTreeNode* child2 = root->child_at(2); 3400 FrameTreeNode* child2 = root->child_at(2);
3480 3401
3481 // Send each of the frames to a different site. Each new renderer will first 3402 // Send each of the frames to a different site. Each new renderer will first
3482 // create proxies for the parent and two sibling subframes and then create 3403 // create proxies for the parent and two sibling subframes and then create
3483 // and insert the new RenderFrame into the frame tree. 3404 // and insert the new RenderFrame into the frame tree.
3484 GURL b_url(embedded_test_server()->GetURL("b.com", "/post_message.html")); 3405 GURL b_url(embedded_test_server()->GetURL("b.com", "/post_message.html"));
3485 GURL c_url(embedded_test_server()->GetURL("c.com", "/post_message.html")); 3406 GURL c_url(embedded_test_server()->GetURL("c.com", "/post_message.html"));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
3540 EXPECT_EQ(1, GetReceivedMessages(child0)); 3461 EXPECT_EQ(1, GetReceivedMessages(child0));
3541 EXPECT_EQ(2, GetReceivedMessages(child1)); 3462 EXPECT_EQ(2, GetReceivedMessages(child1));
3542 EXPECT_EQ(1, GetReceivedMessages(child2)); 3463 EXPECT_EQ(1, GetReceivedMessages(child2));
3543 } 3464 }
3544 3465
3545 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RFPHDestruction) { 3466 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, RFPHDestruction) {
3546 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); 3467 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html"));
3547 NavigateToURL(shell(), main_url); 3468 NavigateToURL(shell(), main_url);
3548 3469
3549 // It is safe to obtain the root frame tree node here, as it doesn't change. 3470 // It is safe to obtain the root frame tree node here, as it doesn't change.
3550 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3471 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3551 ->GetFrameTree()
3552 ->root();
3553 3472
3554 TestNavigationObserver observer(shell()->web_contents()); 3473 TestNavigationObserver observer(shell()->web_contents());
3555 3474
3556 // Load cross-site page into iframe. 3475 // Load cross-site page into iframe.
3557 FrameTreeNode* child = root->child_at(0); 3476 FrameTreeNode* child = root->child_at(0);
3558 GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html"); 3477 GURL url = embedded_test_server()->GetURL("foo.com", "/title2.html");
3559 NavigateFrameToURL(root->child_at(0), url); 3478 NavigateFrameToURL(root->child_at(0), url);
3560 EXPECT_TRUE(observer.last_navigation_succeeded()); 3479 EXPECT_TRUE(observer.last_navigation_succeeded());
3561 EXPECT_EQ(url, observer.last_navigation_url()); 3480 EXPECT_EQ(url, observer.last_navigation_url());
3562 EXPECT_EQ( 3481 EXPECT_EQ(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3601 "Where A = http://127.0.0.1/", 3520 "Where A = http://127.0.0.1/",
3602 DepictFrameTree(root)); 3521 DepictFrameTree(root));
3603 } 3522 }
3604 3523
3605 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OpenPopupWithRemoteParent) { 3524 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, OpenPopupWithRemoteParent) {
3606 GURL main_url( 3525 GURL main_url(
3607 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); 3526 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html"));
3608 NavigateToURL(shell(), main_url); 3527 NavigateToURL(shell(), main_url);
3609 3528
3610 // It is safe to obtain the root frame tree node here, as it doesn't change. 3529 // It is safe to obtain the root frame tree node here, as it doesn't change.
3611 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3530 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3612 ->GetFrameTree()
3613 ->root();
3614 3531
3615 // Navigate first child cross-site. 3532 // Navigate first child cross-site.
3616 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); 3533 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
3617 NavigateFrameToURL(root->child_at(0), frame_url); 3534 NavigateFrameToURL(root->child_at(0), frame_url);
3618 3535
3619 // Open a popup from the first child. 3536 // Open a popup from the first child.
3620 Shell* new_shell = OpenPopup(root->child_at(0)->current_frame_host(), 3537 Shell* new_shell = OpenPopup(root->child_at(0)->current_frame_host(),
3621 GURL(url::kAboutBlankURL), ""); 3538 GURL(url::kAboutBlankURL), "");
3622 EXPECT_TRUE(new_shell); 3539 EXPECT_TRUE(new_shell);
3623 3540
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
3669 3586
3670 // Verify that named frames are discoverable from their opener's ancestors. 3587 // Verify that named frames are discoverable from their opener's ancestors.
3671 // See https://crbug.com/511474. 3588 // See https://crbug.com/511474.
3672 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3589 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3673 DiscoverNamedFrameFromAncestorOfOpener) { 3590 DiscoverNamedFrameFromAncestorOfOpener) {
3674 GURL main_url( 3591 GURL main_url(
3675 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); 3592 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html"));
3676 NavigateToURL(shell(), main_url); 3593 NavigateToURL(shell(), main_url);
3677 3594
3678 // It is safe to obtain the root frame tree node here, as it doesn't change. 3595 // It is safe to obtain the root frame tree node here, as it doesn't change.
3679 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3596 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3680 ->GetFrameTree()
3681 ->root();
3682 3597
3683 // Navigate first child cross-site. 3598 // Navigate first child cross-site.
3684 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); 3599 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
3685 NavigateFrameToURL(root->child_at(0), frame_url); 3600 NavigateFrameToURL(root->child_at(0), frame_url);
3686 3601
3687 // Open a popup named "foo" from the first child. 3602 // Open a popup named "foo" from the first child.
3688 Shell* foo_shell = OpenPopup(root->child_at(0)->current_frame_host(), 3603 Shell* foo_shell = OpenPopup(root->child_at(0)->current_frame_host(),
3689 GURL(url::kAboutBlankURL), "foo"); 3604 GURL(url::kAboutBlankURL), "foo");
3690 EXPECT_TRUE(foo_shell); 3605 EXPECT_TRUE(foo_shell);
3691 3606
(...skipping 30 matching lines...) Expand all
3722 // still be discoverable from its opener's ancestors. Also, instead of using 3637 // still be discoverable from its opener's ancestors. Also, instead of using
3723 // an opener's ancestor, this test uses a popup with same origin as that 3638 // an opener's ancestor, this test uses a popup with same origin as that
3724 // ancestor. See https://crbug.com/511474. 3639 // ancestor. See https://crbug.com/511474.
3725 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3640 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3726 DiscoverFrameAfterSettingWindowName) { 3641 DiscoverFrameAfterSettingWindowName) {
3727 GURL main_url( 3642 GURL main_url(
3728 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html")); 3643 embedded_test_server()->GetURL("a.com", "/site_per_process_main.html"));
3729 NavigateToURL(shell(), main_url); 3644 NavigateToURL(shell(), main_url);
3730 3645
3731 // It is safe to obtain the root frame tree node here, as it doesn't change. 3646 // It is safe to obtain the root frame tree node here, as it doesn't change.
3732 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3647 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3733 ->GetFrameTree()
3734 ->root();
3735 3648
3736 // Open a same-site popup from the main frame. 3649 // Open a same-site popup from the main frame.
3737 GURL a_com_url(embedded_test_server()->GetURL("a.com", "/title3.html")); 3650 GURL a_com_url(embedded_test_server()->GetURL("a.com", "/title3.html"));
3738 Shell* a_com_shell = 3651 Shell* a_com_shell =
3739 OpenPopup(root->child_at(0)->current_frame_host(), a_com_url, ""); 3652 OpenPopup(root->child_at(0)->current_frame_host(), a_com_url, "");
3740 EXPECT_TRUE(a_com_shell); 3653 EXPECT_TRUE(a_com_shell);
3741 3654
3742 // Navigate first child on main frame cross-site. 3655 // Navigate first child on main frame cross-site.
3743 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html")); 3656 GURL frame_url(embedded_test_server()->GetURL("b.com", "/title1.html"));
3744 NavigateFrameToURL(root->child_at(0), frame_url); 3657 NavigateFrameToURL(root->child_at(0), frame_url);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3782 // ^ | 3695 // ^ |
3783 // +--------------------+ 3696 // +--------------------+
3784 // 3697 //
3785 // The sites are carefully set up so that both opener updates are cross-process 3698 // The sites are carefully set up so that both opener updates are cross-process
3786 // but still allowed by Blink's navigation checks. 3699 // but still allowed by Blink's navigation checks.
3787 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, UpdateSubframeOpener) { 3700 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, UpdateSubframeOpener) {
3788 GURL main_url = embedded_test_server()->GetURL( 3701 GURL main_url = embedded_test_server()->GetURL(
3789 "foo.com", "/frame_tree/page_with_two_frames.html"); 3702 "foo.com", "/frame_tree/page_with_two_frames.html");
3790 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3703 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3791 3704
3792 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3705 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3793 ->GetFrameTree()
3794 ->root();
3795 EXPECT_EQ(2U, root->child_count()); 3706 EXPECT_EQ(2U, root->child_count());
3796 3707
3797 // From the top frame, open a popup and navigate it to a cross-site page with 3708 // From the top frame, open a popup and navigate it to a cross-site page with
3798 // two subframes. 3709 // two subframes.
3799 Shell* popup_shell = 3710 Shell* popup_shell =
3800 OpenPopup(shell()->web_contents(), GURL(url::kAboutBlankURL), "popup"); 3711 OpenPopup(shell()->web_contents(), GURL(url::kAboutBlankURL), "popup");
3801 EXPECT_TRUE(popup_shell); 3712 EXPECT_TRUE(popup_shell);
3802 GURL popup_url(embedded_test_server()->GetURL( 3713 GURL popup_url(embedded_test_server()->GetURL(
3803 "bar.com", "/frame_tree/page_with_post_message_frames.html")); 3714 "bar.com", "/frame_tree/page_with_post_message_frames.html"));
3804 NavigateToURL(popup_shell, popup_url); 3715 NavigateToURL(popup_shell, popup_url);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
3857 3768
3858 // Check that when a subframe navigates to a new SiteInstance, the new 3769 // Check that when a subframe navigates to a new SiteInstance, the new
3859 // SiteInstance will get a proxy for the opener of subframe's parent. I.e., 3770 // SiteInstance will get a proxy for the opener of subframe's parent. I.e.,
3860 // accessing parent.opener from the subframe should still work after a 3771 // accessing parent.opener from the subframe should still work after a
3861 // cross-process navigation. 3772 // cross-process navigation.
3862 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3773 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3863 NavigatingSubframePreservesOpenerInParent) { 3774 NavigatingSubframePreservesOpenerInParent) {
3864 GURL main_url = embedded_test_server()->GetURL("a.com", "/post_message.html"); 3775 GURL main_url = embedded_test_server()->GetURL("a.com", "/post_message.html");
3865 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3776 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3866 3777
3867 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3778 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3868 ->GetFrameTree()
3869 ->root();
3870 3779
3871 // Open a popup with a cross-site page that has a subframe. 3780 // Open a popup with a cross-site page that has a subframe.
3872 GURL popup_url(embedded_test_server()->GetURL( 3781 GURL popup_url(embedded_test_server()->GetURL(
3873 "b.com", "/cross_site_iframe_factory.html?b(b)")); 3782 "b.com", "/cross_site_iframe_factory.html?b(b)"));
3874 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); 3783 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup");
3875 EXPECT_TRUE(popup_shell); 3784 EXPECT_TRUE(popup_shell);
3876 FrameTreeNode* popup_root = 3785 FrameTreeNode* popup_root =
3877 static_cast<WebContentsImpl*>(popup_shell->web_contents()) 3786 static_cast<WebContentsImpl*>(popup_shell->web_contents())
3878 ->GetFrameTree() 3787 ->GetFrameTree()
3879 ->root(); 3788 ->root();
(...skipping 26 matching lines...) Expand all
3906 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); 3815 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
3907 } 3816 }
3908 3817
3909 // Check that if a subframe has an opener, that opener is preserved when the 3818 // Check that if a subframe has an opener, that opener is preserved when the
3910 // subframe navigates cross-site. 3819 // subframe navigates cross-site.
3911 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateSubframeWithOpener) { 3820 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, NavigateSubframeWithOpener) {
3912 GURL main_url(embedded_test_server()->GetURL( 3821 GURL main_url(embedded_test_server()->GetURL(
3913 "foo.com", "/frame_tree/page_with_two_frames.html")); 3822 "foo.com", "/frame_tree/page_with_two_frames.html"));
3914 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3823 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3915 3824
3916 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3825 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3917 ->GetFrameTree()
3918 ->root();
3919 EXPECT_EQ( 3826 EXPECT_EQ(
3920 " Site A ------------ proxies for B\n" 3827 " Site A ------------ proxies for B\n"
3921 " |--Site B ------- proxies for A\n" 3828 " |--Site B ------- proxies for A\n"
3922 " +--Site A ------- proxies for B\n" 3829 " +--Site A ------- proxies for B\n"
3923 "Where A = http://foo.com/\n" 3830 "Where A = http://foo.com/\n"
3924 " B = http://bar.com/", 3831 " B = http://bar.com/",
3925 DepictFrameTree(root)); 3832 DepictFrameTree(root));
3926 3833
3927 // Update the first (cross-site) subframe's opener to root frame. 3834 // Update the first (cross-site) subframe's opener to root frame.
3928 bool success = false; 3835 bool success = false;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3973 // RenderFrameProxy is created for that subframe in another renderer process. 3880 // RenderFrameProxy is created for that subframe in another renderer process.
3974 // Similar to NavigateSubframeWithOpener, but this test verifies the subframe 3881 // Similar to NavigateSubframeWithOpener, but this test verifies the subframe
3975 // opener plumbing for FrameMsg_NewFrameProxy, whereas 3882 // opener plumbing for FrameMsg_NewFrameProxy, whereas
3976 // NavigateSubframeWithOpener targets FrameMsg_NewFrame. 3883 // NavigateSubframeWithOpener targets FrameMsg_NewFrame.
3977 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3884 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3978 NewRenderFrameProxyPreservesOpener) { 3885 NewRenderFrameProxyPreservesOpener) {
3979 GURL main_url( 3886 GURL main_url(
3980 embedded_test_server()->GetURL("foo.com", "/post_message.html")); 3887 embedded_test_server()->GetURL("foo.com", "/post_message.html"));
3981 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 3888 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3982 3889
3983 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3890 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
3984 ->GetFrameTree()
3985 ->root();
3986 3891
3987 // Open a popup with a cross-site page that has two subframes. 3892 // Open a popup with a cross-site page that has two subframes.
3988 GURL popup_url(embedded_test_server()->GetURL( 3893 GURL popup_url(embedded_test_server()->GetURL(
3989 "bar.com", "/frame_tree/page_with_post_message_frames.html")); 3894 "bar.com", "/frame_tree/page_with_post_message_frames.html"));
3990 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup"); 3895 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup");
3991 EXPECT_TRUE(popup_shell); 3896 EXPECT_TRUE(popup_shell);
3992 FrameTreeNode* popup_root = 3897 FrameTreeNode* popup_root =
3993 static_cast<WebContentsImpl*>(popup_shell->web_contents()) 3898 static_cast<WebContentsImpl*>(popup_shell->web_contents())
3994 ->GetFrameTree() 3899 ->GetFrameTree()
3995 ->root(); 3900 ->root();
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
4062 DISABLED_RenderViewHostPendingDeletionIsNotReused 3967 DISABLED_RenderViewHostPendingDeletionIsNotReused
4063 #else 3968 #else
4064 #define MAYBE_RenderViewHostPendingDeletionIsNotReused \ 3969 #define MAYBE_RenderViewHostPendingDeletionIsNotReused \
4065 RenderViewHostPendingDeletionIsNotReused 3970 RenderViewHostPendingDeletionIsNotReused
4066 #endif 3971 #endif
4067 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 3972 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4068 MAYBE_RenderViewHostPendingDeletionIsNotReused) { 3973 MAYBE_RenderViewHostPendingDeletionIsNotReused) {
4069 GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 3974 GURL a_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
4070 NavigateToURL(shell(), a_url); 3975 NavigateToURL(shell(), a_url);
4071 3976
4072 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 3977 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4073 ->GetFrameTree()
4074 ->root();
4075 RenderFrameHostImpl* rfh = root->current_frame_host(); 3978 RenderFrameHostImpl* rfh = root->current_frame_host();
4076 RenderViewHostImpl* rvh = rfh->render_view_host(); 3979 RenderViewHostImpl* rvh = rfh->render_view_host();
4077 RenderFrameDeletedObserver deleted_observer(rfh); 3980 RenderFrameDeletedObserver deleted_observer(rfh);
4078 3981
4079 // Install a BrowserMessageFilter to drop SwapOut ACK messages in A's 3982 // Install a BrowserMessageFilter to drop SwapOut ACK messages in A's
4080 // process. 3983 // process.
4081 scoped_refptr<SwapoutACKMessageFilter> filter = new SwapoutACKMessageFilter(); 3984 scoped_refptr<SwapoutACKMessageFilter> filter = new SwapoutACKMessageFilter();
4082 rfh->GetProcess()->AddFilter(filter.get()); 3985 rfh->GetProcess()->AddFilter(filter.get());
4083 3986
4084 // Navigate to B. This must wait for DidCommitProvisionalLoad, as opposed to 3987 // Navigate to B. This must wait for DidCommitProvisionalLoad, as opposed to
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
4125 // Check that when a cross-process frame acquires focus, the old focused frame 4028 // Check that when a cross-process frame acquires focus, the old focused frame
4126 // loses focus and fires blur events. Starting on a page with a cross-site 4029 // loses focus and fires blur events. Starting on a page with a cross-site
4127 // subframe, simulate mouse clicks to switch focus from root frame to subframe 4030 // subframe, simulate mouse clicks to switch focus from root frame to subframe
4128 // and then back to root frame. 4031 // and then back to root frame.
4129 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4032 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4130 CrossProcessFocusChangeFiresBlurEvents) { 4033 CrossProcessFocusChangeFiresBlurEvents) {
4131 GURL main_url( 4034 GURL main_url(
4132 embedded_test_server()->GetURL("a.com", "/page_with_input_field.html")); 4035 embedded_test_server()->GetURL("a.com", "/page_with_input_field.html"));
4133 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4036 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4134 4037
4135 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4038 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4136 ->GetFrameTree()
4137 ->root();
4138 4039
4139 EXPECT_EQ( 4040 EXPECT_EQ(
4140 " Site A ------------ proxies for B\n" 4041 " Site A ------------ proxies for B\n"
4141 " +--Site B ------- proxies for A\n" 4042 " +--Site B ------- proxies for A\n"
4142 "Where A = http://a.com/\n" 4043 "Where A = http://a.com/\n"
4143 " B = http://b.com/", 4044 " B = http://b.com/",
4144 DepictFrameTree(root)); 4045 DepictFrameTree(root));
4145 4046
4146 // Focus the main frame's text field. The return value "input-focus" 4047 // Focus the main frame's text field. The return value "input-focus"
4147 // indicates that the focus event was fired correctly. 4048 // indicates that the focus event was fired correctly.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
4187 4088
4188 // Check that when a cross-process subframe is focused, its parent's 4089 // Check that when a cross-process subframe is focused, its parent's
4189 // document.activeElement correctly returns the corresponding <iframe> element. 4090 // document.activeElement correctly returns the corresponding <iframe> element.
4190 // The test sets up an A-embed-B-embed-C page and shifts focus A->B->A->C, 4091 // The test sets up an A-embed-B-embed-C page and shifts focus A->B->A->C,
4191 // checking document.activeElement after each change. 4092 // checking document.activeElement after each change.
4192 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DocumentActiveElement) { 4093 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DocumentActiveElement) {
4193 GURL main_url(embedded_test_server()->GetURL( 4094 GURL main_url(embedded_test_server()->GetURL(
4194 "a.com", "/cross_site_iframe_factory.html?a(b(c))")); 4095 "a.com", "/cross_site_iframe_factory.html?a(b(c))"));
4195 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4096 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4196 4097
4197 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4098 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4198 ->GetFrameTree()
4199 ->root();
4200 4099
4201 EXPECT_EQ( 4100 EXPECT_EQ(
4202 " Site A ------------ proxies for B C\n" 4101 " Site A ------------ proxies for B C\n"
4203 " +--Site B ------- proxies for A C\n" 4102 " +--Site B ------- proxies for A C\n"
4204 " +--Site C -- proxies for A B\n" 4103 " +--Site C -- proxies for A B\n"
4205 "Where A = http://a.com/\n" 4104 "Where A = http://a.com/\n"
4206 " B = http://b.com/\n" 4105 " B = http://b.com/\n"
4207 " C = http://c.com/", 4106 " C = http://c.com/",
4208 DepictFrameTree(root)); 4107 DepictFrameTree(root));
4209 4108
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
4266 // The test builds a page with four cross-site frames and then focuses them one 4165 // The test builds a page with four cross-site frames and then focuses them one
4267 // by one, checking the value of document.hasFocus() in all frames. For any 4166 // by one, checking the value of document.hasFocus() in all frames. For any
4268 // given focused frame, document.hasFocus() should return true for that frame 4167 // given focused frame, document.hasFocus() should return true for that frame
4269 // and all its ancestor frames. 4168 // and all its ancestor frames.
4270 // Disabled due to flakes; see https://crbug.com/559273. 4169 // Disabled due to flakes; see https://crbug.com/559273.
4271 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DISABLED_DocumentHasFocus) { 4170 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, DISABLED_DocumentHasFocus) {
4272 GURL main_url(embedded_test_server()->GetURL( 4171 GURL main_url(embedded_test_server()->GetURL(
4273 "a.com", "/cross_site_iframe_factory.html?a(b(c),d)")); 4172 "a.com", "/cross_site_iframe_factory.html?a(b(c),d)"));
4274 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4173 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4275 4174
4276 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4175 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4277 ->GetFrameTree()
4278 ->root();
4279 4176
4280 EXPECT_EQ( 4177 EXPECT_EQ(
4281 " Site A ------------ proxies for B C D\n" 4178 " Site A ------------ proxies for B C D\n"
4282 " |--Site B ------- proxies for A C D\n" 4179 " |--Site B ------- proxies for A C D\n"
4283 " | +--Site C -- proxies for A B D\n" 4180 " | +--Site C -- proxies for A B D\n"
4284 " +--Site D ------- proxies for A B C\n" 4181 " +--Site D ------- proxies for A B C\n"
4285 "Where A = http://a.com/\n" 4182 "Where A = http://a.com/\n"
4286 " B = http://b.com/\n" 4183 " B = http://b.com/\n"
4287 " C = http://c.com/\n" 4184 " C = http://c.com/\n"
4288 " D = http://d.com/", 4185 " D = http://d.com/",
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4334 EXPECT_FALSE(document_has_focus(grandchild)); 4231 EXPECT_FALSE(document_has_focus(grandchild));
4335 EXPECT_TRUE(document_has_focus(child2)); 4232 EXPECT_TRUE(document_has_focus(child2));
4336 } 4233 }
4337 4234
4338 // Check that window.focus works for cross-process subframes. 4235 // Check that window.focus works for cross-process subframes.
4339 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframeWindowFocus) { 4236 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SubframeWindowFocus) {
4340 GURL main_url(embedded_test_server()->GetURL( 4237 GURL main_url(embedded_test_server()->GetURL(
4341 "a.com", "/cross_site_iframe_factory.html?a(b,c)")); 4238 "a.com", "/cross_site_iframe_factory.html?a(b,c)"));
4342 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4239 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4343 4240
4344 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4241 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4345 ->GetFrameTree()
4346 ->root();
4347 4242
4348 EXPECT_EQ( 4243 EXPECT_EQ(
4349 " Site A ------------ proxies for B C\n" 4244 " Site A ------------ proxies for B C\n"
4350 " |--Site B ------- proxies for A C\n" 4245 " |--Site B ------- proxies for A C\n"
4351 " +--Site C ------- proxies for A B\n" 4246 " +--Site C ------- proxies for A B\n"
4352 "Where A = http://a.com/\n" 4247 "Where A = http://a.com/\n"
4353 " B = http://b.com/\n" 4248 " B = http://b.com/\n"
4354 " C = http://c.com/", 4249 " C = http://c.com/",
4355 DepictFrameTree(root)); 4250 DepictFrameTree(root));
4356 4251
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4473 4368
4474 // Verify that we receive a mouse cursor update message when we mouse over 4369 // Verify that we receive a mouse cursor update message when we mouse over
4475 // a text field contained in an out-of-process iframe. 4370 // a text field contained in an out-of-process iframe.
4476 // Fails under TSan. http://crbug.com/545237 4371 // Fails under TSan. http://crbug.com/545237
4477 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4372 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4478 DISABLED_CursorUpdateFromReceivedFromCrossSiteIframe) { 4373 DISABLED_CursorUpdateFromReceivedFromCrossSiteIframe) {
4479 GURL main_url(embedded_test_server()->GetURL( 4374 GURL main_url(embedded_test_server()->GetURL(
4480 "/frame_tree/page_with_positioned_frame.html")); 4375 "/frame_tree/page_with_positioned_frame.html"));
4481 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4376 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4482 4377
4483 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4378 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4484 ->GetFrameTree()
4485 ->root();
4486 4379
4487 FrameTreeNode* child_node = root->child_at(0); 4380 FrameTreeNode* child_node = root->child_at(0);
4488 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 4381 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
4489 child_node->current_frame_host()->GetSiteInstance()); 4382 child_node->current_frame_host()->GetSiteInstance());
4490 4383
4491 scoped_refptr<CursorMessageFilter> filter = new CursorMessageFilter(); 4384 scoped_refptr<CursorMessageFilter> filter = new CursorMessageFilter();
4492 child_node->current_frame_host()->GetProcess()->AddFilter(filter.get()); 4385 child_node->current_frame_host()->GetProcess()->AddFilter(filter.get());
4493 4386
4494 // Send a MouseMove to the subframe. The frame contains text, and moving the 4387 // Send a MouseMove to the subframe. The frame contains text, and moving the
4495 // mouse over it should cause the renderer to send a mouse cursor update. 4388 // mouse over it should cause the renderer to send a mouse cursor update.
4496 blink::WebMouseEvent mouse_event; 4389 blink::WebMouseEvent mouse_event;
4497 mouse_event.type = blink::WebInputEvent::MouseMove; 4390 mouse_event.type = blink::WebInputEvent::MouseMove;
4498 mouse_event.x = 60; 4391 mouse_event.x = 60;
4499 mouse_event.y = 60; 4392 mouse_event.y = 60;
4500 RenderWidgetHost* rwh_child = 4393 RenderWidgetHost* rwh_child =
4501 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); 4394 root->child_at(0)->current_frame_host()->GetRenderWidgetHost();
4502 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 4395 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
4503 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 4396 root->current_frame_host()->GetRenderWidgetHost()->GetView());
4504 static_cast<WebContentsImpl*>(shell()->web_contents()) 4397 web_contents()->GetInputEventRouter()->RouteMouseEvent(root_view,
4505 ->GetInputEventRouter() 4398 &mouse_event);
4506 ->RouteMouseEvent(root_view, &mouse_event);
4507 4399
4508 // CursorMessageFilter::Wait() implicitly tests whether we receive a 4400 // CursorMessageFilter::Wait() implicitly tests whether we receive a
4509 // ViewHostMsg_SetCursor message from the renderer process, because it does 4401 // ViewHostMsg_SetCursor message from the renderer process, because it does
4510 // does not return otherwise. 4402 // does not return otherwise.
4511 filter->Wait(); 4403 filter->Wait();
4512 EXPECT_EQ(filter->last_set_cursor_routing_id(), rwh_child->GetRoutingID()); 4404 EXPECT_EQ(filter->last_set_cursor_routing_id(), rwh_child->GetRoutingID());
4513 } 4405 }
4514 #endif 4406 #endif
4515 4407
4516 // Tests that we are using the correct RenderFrameProxy when navigating an 4408 // Tests that we are using the correct RenderFrameProxy when navigating an
(...skipping 22 matching lines...) Expand all
4539 #if defined(USE_AURA) 4431 #if defined(USE_AURA)
4540 // Browser process hit testing is not implemented on Android, and this test 4432 // Browser process hit testing is not implemented on Android, and this test
4541 // requires Aura for RenderWidgetHostViewAura::OnTouchEvent(). 4433 // requires Aura for RenderWidgetHostViewAura::OnTouchEvent().
4542 // https://crbug.com/491334 4434 // https://crbug.com/491334
4543 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4435 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4544 SubframeTouchEventRouting) { 4436 SubframeTouchEventRouting) {
4545 GURL main_url(embedded_test_server()->GetURL( 4437 GURL main_url(embedded_test_server()->GetURL(
4546 "/frame_tree/page_with_positioned_nested_frames.html")); 4438 "/frame_tree/page_with_positioned_nested_frames.html"));
4547 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4439 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4548 4440
4549 WebContentsImpl* web_contents = 4441 WebContentsImpl* contents = web_contents();
4550 static_cast<WebContentsImpl*>(shell()->web_contents()); 4442 FrameTreeNode* root = contents->GetFrameTree()->root();
4551 FrameTreeNode* root = web_contents->GetFrameTree()->root();
4552 ASSERT_EQ(1U, root->child_count()); 4443 ASSERT_EQ(1U, root->child_count());
4553 4444
4554 GURL frame_url( 4445 GURL frame_url(
4555 embedded_test_server()->GetURL("b.com", "/page_with_touch_handler.html")); 4446 embedded_test_server()->GetURL("b.com", "/page_with_touch_handler.html"));
4556 NavigateFrameToURL(root->child_at(0), frame_url); 4447 NavigateFrameToURL(root->child_at(0), frame_url);
4557 EXPECT_TRUE(WaitForRenderFrameReady(root->child_at(0)->current_frame_host())); 4448 EXPECT_TRUE(WaitForRenderFrameReady(root->child_at(0)->current_frame_host()));
4558 4449
4559 // Synchronize with the child and parent renderers to guarantee that the 4450 // Synchronize with the child and parent renderers to guarantee that the
4560 // surface information required for event hit testing is ready. 4451 // surface information required for event hit testing is ready.
4561 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>( 4452 RenderWidgetHostViewBase* child_rwhv = static_cast<RenderWidgetHostViewBase*>(
4562 root->child_at(0)->current_frame_host()->GetView()); 4453 root->child_at(0)->current_frame_host()->GetView());
4563 SurfaceHitTestReadyNotifier notifier( 4454 SurfaceHitTestReadyNotifier notifier(
4564 static_cast<RenderWidgetHostViewChildFrame*>(child_rwhv)); 4455 static_cast<RenderWidgetHostViewChildFrame*>(child_rwhv));
4565 notifier.WaitForSurfaceReady(); 4456 notifier.WaitForSurfaceReady();
4566 4457
4567 // Simulate touch event to sub-frame. 4458 // Simulate touch event to sub-frame.
4568 gfx::Point child_center(150, 150); 4459 gfx::Point child_center(150, 150);
4569 auto rwhv = static_cast<RenderWidgetHostViewAura*>( 4460 auto rwhv = static_cast<RenderWidgetHostViewAura*>(
4570 web_contents->GetRenderWidgetHostView()); 4461 contents->GetRenderWidgetHostView());
4571 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0, 4462 ui::TouchEvent touch_event(ui::ET_TOUCH_PRESSED, child_center, 0, 0,
4572 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f); 4463 ui::EventTimeForNow(), 30.f, 30.f, 0.f, 0.f);
4573 rwhv->OnTouchEvent(&touch_event); 4464 rwhv->OnTouchEvent(&touch_event);
4574 4465
4575 // Verify touch handler in subframe was invoked 4466 // Verify touch handler in subframe was invoked
4576 std::string result; 4467 std::string result;
4577 EXPECT_TRUE(ExecuteScriptAndExtractString( 4468 EXPECT_TRUE(ExecuteScriptAndExtractString(
4578 root->child_at(0)->current_frame_host(), 4469 root->child_at(0)->current_frame_host(),
4579 "window.domAutomationController.send(getLastTouchEvent());", &result)); 4470 "window.domAutomationController.send(getLastTouchEvent());", &result));
4580 EXPECT_EQ("touchstart", result); 4471 EXPECT_EQ("touchstart", result);
(...skipping 15 matching lines...) Expand all
4596 #define MAYBE_SubframeGestureEventRouting DISABLED_SubframeGestureEventRouting 4487 #define MAYBE_SubframeGestureEventRouting DISABLED_SubframeGestureEventRouting
4597 #else 4488 #else
4598 #define MAYBE_SubframeGestureEventRouting SubframeGestureEventRouting 4489 #define MAYBE_SubframeGestureEventRouting SubframeGestureEventRouting
4599 #endif 4490 #endif
4600 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4491 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4601 MAYBE_SubframeGestureEventRouting) { 4492 MAYBE_SubframeGestureEventRouting) {
4602 GURL main_url(embedded_test_server()->GetURL( 4493 GURL main_url(embedded_test_server()->GetURL(
4603 "/frame_tree/page_with_positioned_nested_frames.html")); 4494 "/frame_tree/page_with_positioned_nested_frames.html"));
4604 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4495 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4605 4496
4606 WebContentsImpl* web_contents = 4497 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4607 static_cast<WebContentsImpl*>(shell()->web_contents());
4608 FrameTreeNode* root = web_contents->GetFrameTree()->root();
4609 ASSERT_EQ(1U, root->child_count()); 4498 ASSERT_EQ(1U, root->child_count());
4610 4499
4611 GURL frame_url( 4500 GURL frame_url(
4612 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); 4501 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html"));
4613 NavigateFrameToURL(root->child_at(0), frame_url); 4502 NavigateFrameToURL(root->child_at(0), frame_url);
4614 auto child_frame_host = root->child_at(0)->current_frame_host(); 4503 auto child_frame_host = root->child_at(0)->current_frame_host();
4615 EXPECT_TRUE(WaitForRenderFrameReady(child_frame_host)); 4504 EXPECT_TRUE(WaitForRenderFrameReady(child_frame_host));
4616 4505
4617 // Synchronize with the child and parent renderers to guarantee that the 4506 // Synchronize with the child and parent renderers to guarantee that the
4618 // surface information required for event hit testing is ready. 4507 // surface information required for event hit testing is ready.
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
4732 } 4621 }
4733 4622
4734 } // namespace anonymous 4623 } // namespace anonymous
4735 4624
4736 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4625 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4737 InputEventRouterGestureTargetQueueTest) { 4626 InputEventRouterGestureTargetQueueTest) {
4738 GURL main_url(embedded_test_server()->GetURL( 4627 GURL main_url(embedded_test_server()->GetURL(
4739 "/frame_tree/page_with_positioned_nested_frames.html")); 4628 "/frame_tree/page_with_positioned_nested_frames.html"));
4740 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4629 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4741 4630
4742 WebContentsImpl* web_contents = 4631 WebContentsImpl* contents = web_contents();
4743 static_cast<WebContentsImpl*>(shell()->web_contents()); 4632 FrameTreeNode* root = contents->GetFrameTree()->root();
4744 FrameTreeNode* root = web_contents->GetFrameTree()->root();
4745 ASSERT_EQ(1U, root->child_count()); 4633 ASSERT_EQ(1U, root->child_count());
4746 4634
4747 GURL frame_url( 4635 GURL frame_url(
4748 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html")); 4636 embedded_test_server()->GetURL("b.com", "/page_with_click_handler.html"));
4749 NavigateFrameToURL(root->child_at(0), frame_url); 4637 NavigateFrameToURL(root->child_at(0), frame_url);
4750 auto child_frame_host = root->child_at(0)->current_frame_host(); 4638 auto child_frame_host = root->child_at(0)->current_frame_host();
4751 EXPECT_TRUE(WaitForRenderFrameReady(child_frame_host)); 4639 EXPECT_TRUE(WaitForRenderFrameReady(child_frame_host));
4752 4640
4753 // Synchronize with the child and parent renderers to guarantee that the 4641 // Synchronize with the child and parent renderers to guarantee that the
4754 // surface information required for event hit testing is ready. 4642 // surface information required for event hit testing is ready.
4755 auto rwhv_child = 4643 auto rwhv_child =
4756 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView()); 4644 static_cast<RenderWidgetHostViewBase*>(child_frame_host->GetView());
4757 SurfaceHitTestReadyNotifier notifier( 4645 SurfaceHitTestReadyNotifier notifier(
4758 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child)); 4646 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
4759 notifier.WaitForSurfaceReady(); 4647 notifier.WaitForSurfaceReady();
4760 4648
4761 // All touches & gestures are sent to the main frame's view, and should be 4649 // All touches & gestures are sent to the main frame's view, and should be
4762 // routed appropriately from there. 4650 // routed appropriately from there.
4763 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>( 4651 auto rwhv_parent = static_cast<RenderWidgetHostViewBase*>(
4764 web_contents->GetRenderWidgetHostView()); 4652 contents->GetRenderWidgetHostView());
4765 4653
4766 RenderWidgetHostInputEventRouter* router = 4654 RenderWidgetHostInputEventRouter* router =
4767 web_contents->GetInputEventRouter(); 4655 contents->GetInputEventRouter();
4768 EXPECT_TRUE(router->gesture_target_queue_.empty()); 4656 EXPECT_TRUE(router->gesture_target_queue_.empty());
4769 EXPECT_EQ(nullptr, router->gesture_target_); 4657 EXPECT_EQ(nullptr, router->gesture_target_);
4770 4658
4771 // Send touch sequence to main-frame. 4659 // Send touch sequence to main-frame.
4772 gfx::Point main_frame_point(25, 25); 4660 gfx::Point main_frame_point(25, 25);
4773 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point, 4661 SendTouchTapWithExpectedTarget(rwhv_parent, main_frame_point,
4774 router->touch_target_, rwhv_parent); 4662 router->touch_target_, rwhv_parent);
4775 EXPECT_EQ(1LU, router->gesture_target_queue_.size()); 4663 EXPECT_EQ(1LU, router->gesture_target_queue_.size());
4776 EXPECT_EQ(nullptr, router->gesture_target_); 4664 EXPECT_EQ(nullptr, router->gesture_target_);
4777 4665
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
4821 #endif // defined(USE_AURA) 4709 #endif // defined(USE_AURA)
4822 4710
4823 // Ensure that a cross-process subframe can receive keyboard events when in 4711 // Ensure that a cross-process subframe can receive keyboard events when in
4824 // focus. 4712 // focus.
4825 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 4713 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
4826 SubframeKeyboardEventRouting) { 4714 SubframeKeyboardEventRouting) {
4827 GURL main_url(embedded_test_server()->GetURL( 4715 GURL main_url(embedded_test_server()->GetURL(
4828 "a.com", "/frame_tree/page_with_one_frame.html")); 4716 "a.com", "/frame_tree/page_with_one_frame.html"));
4829 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 4717 EXPECT_TRUE(NavigateToURL(shell(), main_url));
4830 4718
4831 WebContentsImpl* web_contents = 4719 WebContentsImpl* contents = web_contents();
4832 static_cast<WebContentsImpl*>(shell()->web_contents()); 4720 FrameTreeNode* root = contents->GetFrameTree()->root();
4833 FrameTreeNode* root = web_contents->GetFrameTree()->root();
4834 4721
4835 GURL frame_url( 4722 GURL frame_url(
4836 embedded_test_server()->GetURL("b.com", "/page_with_input_field.html")); 4723 embedded_test_server()->GetURL("b.com", "/page_with_input_field.html"));
4837 NavigateFrameToURL(root->child_at(0), frame_url); 4724 NavigateFrameToURL(root->child_at(0), frame_url);
4838 EXPECT_TRUE(WaitForRenderFrameReady(root->child_at(0)->current_frame_host())); 4725 EXPECT_TRUE(WaitForRenderFrameReady(root->child_at(0)->current_frame_host()));
4839 4726
4840 // Focus the subframe and then its input field. The return value 4727 // Focus the subframe and then its input field. The return value
4841 // "input-focus" will be sent once the input field's focus event fires. 4728 // "input-focus" will be sent once the input field's focus event fires.
4842 FocusFrame(root->child_at(0)); 4729 FocusFrame(root->child_at(0));
4843 std::string result; 4730 std::string result;
4844 EXPECT_TRUE(ExecuteScriptAndExtractString( 4731 EXPECT_TRUE(ExecuteScriptAndExtractString(
4845 root->child_at(0)->current_frame_host(), "focusInputField()", &result)); 4732 root->child_at(0)->current_frame_host(), "focusInputField()", &result));
4846 EXPECT_EQ(result, "input-focus"); 4733 EXPECT_EQ(result, "input-focus");
4847 4734
4848 // The subframe should now be focused. 4735 // The subframe should now be focused.
4849 EXPECT_EQ(root->child_at(0), root->frame_tree()->GetFocusedFrame()); 4736 EXPECT_EQ(root->child_at(0), root->frame_tree()->GetFocusedFrame());
4850 4737
4851 // Generate a few keyboard events and route them to currently focused frame. 4738 // Generate a few keyboard events and route them to currently focused frame.
4852 SimulateKeyPress(web_contents, ui::VKEY_F, false, false, false, false); 4739 SimulateKeyPress(contents, ui::VKEY_F, false, false, false, false);
4853 SimulateKeyPress(web_contents, ui::VKEY_O, false, false, false, false); 4740 SimulateKeyPress(contents, ui::VKEY_O, false, false, false, false);
4854 SimulateKeyPress(web_contents, ui::VKEY_O, false, false, false, false); 4741 SimulateKeyPress(contents, ui::VKEY_O, false, false, false, false);
4855 4742
4856 // Verify that the input field in the subframe received the keystrokes. 4743 // Verify that the input field in the subframe received the keystrokes.
4857 EXPECT_TRUE(ExecuteScriptAndExtractString( 4744 EXPECT_TRUE(ExecuteScriptAndExtractString(
4858 root->child_at(0)->current_frame_host(), 4745 root->child_at(0)->current_frame_host(),
4859 "window.domAutomationController.send(getInputFieldText());", &result)); 4746 "window.domAutomationController.send(getInputFieldText());", &result));
4860 EXPECT_EQ("FOO", result); 4747 EXPECT_EQ("FOO", result);
4861 } 4748 }
4862 4749
4863 // Ensure that sequential focus navigation (advancing focused elements with 4750 // Ensure that sequential focus navigation (advancing focused elements with
4864 // <tab> and <shift-tab>) works across cross-process subframes. 4751 // <tab> and <shift-tab>) works across cross-process subframes.
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
4987 #define MAYBE_CreateContextMenuTest DISABLED_CreateContextMenuTest 4874 #define MAYBE_CreateContextMenuTest DISABLED_CreateContextMenuTest
4988 #else 4875 #else
4989 #define MAYBE_CreateContextMenuTest CreateContextMenuTest 4876 #define MAYBE_CreateContextMenuTest CreateContextMenuTest
4990 #endif 4877 #endif
4991 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CreateContextMenuTest) { 4878 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, MAYBE_CreateContextMenuTest) {
4992 GURL main_url(embedded_test_server()->GetURL( 4879 GURL main_url(embedded_test_server()->GetURL(
4993 "/frame_tree/page_with_positioned_frame.html")); 4880 "/frame_tree/page_with_positioned_frame.html"));
4994 NavigateToURL(shell(), main_url); 4881 NavigateToURL(shell(), main_url);
4995 4882
4996 // It is safe to obtain the root frame tree node here, as it doesn't change. 4883 // It is safe to obtain the root frame tree node here, as it doesn't change.
4997 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 4884 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
4998 ->GetFrameTree()
4999 ->root();
5000 ASSERT_EQ(1U, root->child_count()); 4885 ASSERT_EQ(1U, root->child_count());
5001 4886
5002 FrameTreeNode* child_node = root->child_at(0); 4887 FrameTreeNode* child_node = root->child_at(0);
5003 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html")); 4888 GURL site_url(embedded_test_server()->GetURL("baz.com", "/title1.html"));
5004 EXPECT_EQ(site_url, child_node->current_url()); 4889 EXPECT_EQ(site_url, child_node->current_url());
5005 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), 4890 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
5006 child_node->current_frame_host()->GetSiteInstance()); 4891 child_node->current_frame_host()->GetSiteInstance());
5007 4892
5008 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 4893 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
5009 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 4894 root->current_frame_host()->GetRenderWidgetHost()->GetView());
(...skipping 12 matching lines...) Expand all
5022 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 4907 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
5023 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout()); 4908 FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout());
5024 run_loop.Run(); 4909 run_loop.Run();
5025 } 4910 }
5026 4911
5027 // A WebContentsDelegate to listen for the ShowContextMenu message. 4912 // A WebContentsDelegate to listen for the ShowContextMenu message.
5028 ContextMenuObserverDelegate context_menu_delegate; 4913 ContextMenuObserverDelegate context_menu_delegate;
5029 shell()->web_contents()->SetDelegate(&context_menu_delegate); 4914 shell()->web_contents()->SetDelegate(&context_menu_delegate);
5030 4915
5031 RenderWidgetHostInputEventRouter* router = 4916 RenderWidgetHostInputEventRouter* router =
5032 static_cast<WebContentsImpl*>(shell()->web_contents()) 4917 web_contents()->GetInputEventRouter();
5033 ->GetInputEventRouter();
5034 4918
5035 // Target right-click event to child frame. 4919 // Target right-click event to child frame.
5036 blink::WebMouseEvent click_event; 4920 blink::WebMouseEvent click_event;
5037 click_event.type = blink::WebInputEvent::MouseDown; 4921 click_event.type = blink::WebInputEvent::MouseDown;
5038 click_event.button = blink::WebPointerProperties::ButtonRight; 4922 click_event.button = blink::WebPointerProperties::ButtonRight;
5039 click_event.x = 75; 4923 click_event.x = 75;
5040 click_event.y = 75; 4924 click_event.y = 75;
5041 click_event.clickCount = 1; 4925 click_event.clickCount = 1;
5042 router->RouteMouseEvent(root_view, &click_event); 4926 router->RouteMouseEvent(root_view, &click_event);
5043 4927
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
5225 // if a pending cross-process navigation is cancelled. The test works by trying 5109 // if a pending cross-process navigation is cancelled. The test works by trying
5226 // to create a new RenderFrame with the same routing id. If there is an 5110 // to create a new RenderFrame with the same routing id. If there is an
5227 // entry with the same routing ID, a CHECK is hit and the process crashes. 5111 // entry with the same routing ID, a CHECK is hit and the process crashes.
5228 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5112 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5229 SubframePendingAndBackToSameSiteInstance) { 5113 SubframePendingAndBackToSameSiteInstance) {
5230 GURL main_url(embedded_test_server()->GetURL( 5114 GURL main_url(embedded_test_server()->GetURL(
5231 "a.com", "/cross_site_iframe_factory.html?a(b)")); 5115 "a.com", "/cross_site_iframe_factory.html?a(b)"));
5232 NavigateToURL(shell(), main_url); 5116 NavigateToURL(shell(), main_url);
5233 5117
5234 // Capture the FrameTreeNode this test will be navigating. 5118 // Capture the FrameTreeNode this test will be navigating.
5235 FrameTreeNode* node = static_cast<WebContentsImpl*>(shell()->web_contents()) 5119 FrameTreeNode* node = web_contents()->GetFrameTree()->root()->child_at(0);
5236 ->GetFrameTree()
5237 ->root()
5238 ->child_at(0);
5239 EXPECT_TRUE(node); 5120 EXPECT_TRUE(node);
5240 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), 5121 EXPECT_NE(node->current_frame_host()->GetSiteInstance(),
5241 node->parent()->current_frame_host()->GetSiteInstance()); 5122 node->parent()->current_frame_host()->GetSiteInstance());
5242 5123
5243 // Navigate to the site of the parent, but to a page that will not commit. 5124 // Navigate to the site of the parent, but to a page that will not commit.
5244 GURL same_site_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 5125 GURL same_site_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
5245 NavigationStallDelegate stall_delegate(same_site_url); 5126 NavigationStallDelegate stall_delegate(same_site_url);
5246 ResourceDispatcherHost::Get()->SetDelegate(&stall_delegate); 5127 ResourceDispatcherHost::Get()->SetDelegate(&stall_delegate);
5247 { 5128 {
5248 NavigationController::LoadURLParams params(same_site_url); 5129 NavigationController::LoadURLParams params(same_site_url);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
5302 5183
5303 // This test ensures that the RenderFrame isn't leaked in the renderer process 5184 // This test ensures that the RenderFrame isn't leaked in the renderer process
5304 // when a remote parent detaches a child frame. The test works by trying 5185 // when a remote parent detaches a child frame. The test works by trying
5305 // to create a new RenderFrame with the same routing id. If there is an 5186 // to create a new RenderFrame with the same routing id. If there is an
5306 // entry with the same routing ID, a CHECK is hit and the process crashes. 5187 // entry with the same routing ID, a CHECK is hit and the process crashes.
5307 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ParentDetachRemoteChild) { 5188 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ParentDetachRemoteChild) {
5308 GURL main_url(embedded_test_server()->GetURL( 5189 GURL main_url(embedded_test_server()->GetURL(
5309 "a.com", "/cross_site_iframe_factory.html?a(b,b)")); 5190 "a.com", "/cross_site_iframe_factory.html?a(b,b)"));
5310 NavigateToURL(shell(), main_url); 5191 NavigateToURL(shell(), main_url);
5311 5192
5312 WebContentsImpl* web_contents = 5193 WebContentsImpl* contents = web_contents();
5313 static_cast<WebContentsImpl*>(shell()->web_contents()); 5194 EXPECT_EQ(2U, contents->GetFrameTree()->root()->child_count());
5314 EXPECT_EQ(2U, web_contents->GetFrameTree()->root()->child_count());
5315 5195
5316 // Capture the FrameTreeNode this test will be navigating. 5196 // Capture the FrameTreeNode this test will be navigating.
5317 FrameTreeNode* node = web_contents->GetFrameTree()->root()->child_at(0); 5197 FrameTreeNode* node = contents->GetFrameTree()->root()->child_at(0);
5318 EXPECT_TRUE(node); 5198 EXPECT_TRUE(node);
5319 EXPECT_NE(node->current_frame_host()->GetSiteInstance(), 5199 EXPECT_NE(node->current_frame_host()->GetSiteInstance(),
5320 node->parent()->current_frame_host()->GetSiteInstance()); 5200 node->parent()->current_frame_host()->GetSiteInstance());
5321 5201
5322 // Grab the routing id of the first child RenderFrameHost and set up a process 5202 // Grab the routing id of the first child RenderFrameHost and set up a process
5323 // observer to ensure there is no crash when a new RenderFrame creation is 5203 // observer to ensure there is no crash when a new RenderFrame creation is
5324 // attempted. 5204 // attempted.
5325 RenderProcessHost* process = node->current_frame_host()->GetProcess(); 5205 RenderProcessHost* process = node->current_frame_host()->GetProcess();
5326 RenderProcessHostWatcher watcher( 5206 RenderProcessHostWatcher watcher(
5327 process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT); 5207 process, RenderProcessHostWatcher::WATCH_FOR_PROCESS_EXIT);
5328 int frame_routing_id = node->current_frame_host()->GetRoutingID(); 5208 int frame_routing_id = node->current_frame_host()->GetRoutingID();
5329 int widget_routing_id = 5209 int widget_routing_id =
5330 node->current_frame_host()->GetRenderWidgetHost()->GetRoutingID(); 5210 node->current_frame_host()->GetRenderWidgetHost()->GetRoutingID();
5331 int parent_routing_id = 5211 int parent_routing_id =
5332 node->parent()->render_manager()->GetRoutingIdForSiteInstance( 5212 node->parent()->render_manager()->GetRoutingIdForSiteInstance(
5333 node->current_frame_host()->GetSiteInstance()); 5213 node->current_frame_host()->GetSiteInstance());
5334 5214
5335 // Have the parent frame remove the child frame from its DOM. This should 5215 // Have the parent frame remove the child frame from its DOM. This should
5336 // result in the child RenderFrame being deleted in the remote process. 5216 // result in the child RenderFrame being deleted in the remote process.
5337 EXPECT_TRUE(ExecuteScript(web_contents, 5217 EXPECT_TRUE(ExecuteScript(contents,
5338 "document.body.removeChild(" 5218 "document.body.removeChild("
5339 "document.querySelectorAll('iframe')[0])")); 5219 "document.querySelectorAll('iframe')[0])"));
5340 EXPECT_EQ(1U, web_contents->GetFrameTree()->root()->child_count()); 5220 EXPECT_EQ(1U, contents->GetFrameTree()->root()->child_count());
5341 5221
5342 { 5222 {
5343 FrameMsg_NewFrame_Params params; 5223 FrameMsg_NewFrame_Params params;
5344 params.routing_id = frame_routing_id; 5224 params.routing_id = frame_routing_id;
5345 params.proxy_routing_id = MSG_ROUTING_NONE; 5225 params.proxy_routing_id = MSG_ROUTING_NONE;
5346 params.opener_routing_id = MSG_ROUTING_NONE; 5226 params.opener_routing_id = MSG_ROUTING_NONE;
5347 params.parent_routing_id = parent_routing_id; 5227 params.parent_routing_id = parent_routing_id;
5348 params.previous_sibling_routing_id = MSG_ROUTING_NONE; 5228 params.previous_sibling_routing_id = MSG_ROUTING_NONE;
5349 params.widget_params.routing_id = widget_routing_id; 5229 params.widget_params.routing_id = widget_routing_id;
5350 params.widget_params.hidden = true; 5230 params.widget_params.hidden = true;
5351 params.replication_state.name = "name"; 5231 params.replication_state.name = "name";
5352 params.replication_state.unique_name = "name"; 5232 params.replication_state.unique_name = "name";
5353 5233
5354 process->Send(new FrameMsg_NewFrame(params)); 5234 process->Send(new FrameMsg_NewFrame(params));
5355 } 5235 }
5356 5236
5357 // The test must wait for the process to exit, but if there is no leak, the 5237 // The test must wait for the process to exit, but if there is no leak, the
5358 // RenderFrame will be properly created and there will be no crash. 5238 // RenderFrame will be properly created and there will be no crash.
5359 // Therefore, navigate the remaining subframe to completely different site, 5239 // Therefore, navigate the remaining subframe to completely different site,
5360 // which will cause the original process to exit cleanly. 5240 // which will cause the original process to exit cleanly.
5361 NavigateFrameToURL( 5241 NavigateFrameToURL(
5362 web_contents->GetFrameTree()->root()->child_at(0), 5242 contents->GetFrameTree()->root()->child_at(0),
5363 embedded_test_server()->GetURL("d.com", "/title3.html")); 5243 embedded_test_server()->GetURL("d.com", "/title3.html"));
5364 watcher.Wait(); 5244 watcher.Wait();
5365 EXPECT_TRUE(watcher.did_exit_normally()); 5245 EXPECT_TRUE(watcher.did_exit_normally());
5366 } 5246 }
5367 5247
5368 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, VisibilityChanged) { 5248 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, VisibilityChanged) {
5369 GURL main_url( 5249 GURL main_url(
5370 embedded_test_server()->GetURL("a.com", "/page_with_iframe.html")); 5250 embedded_test_server()->GetURL("a.com", "/page_with_iframe.html"));
5371 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 5251 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5372 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), main_url); 5252 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), main_url);
5373 5253
5374 GURL cross_site_url = 5254 GURL cross_site_url =
5375 embedded_test_server()->GetURL("oopif.com", "/title1.html"); 5255 embedded_test_server()->GetURL("oopif.com", "/title1.html");
5376 5256
5377 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5257 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5378 ->GetFrameTree()
5379 ->root();
5380 5258
5381 TestNavigationObserver observer(shell()->web_contents()); 5259 TestNavigationObserver observer(shell()->web_contents());
5382 5260
5383 NavigateFrameToURL(root->child_at(0), cross_site_url); 5261 NavigateFrameToURL(root->child_at(0), cross_site_url);
5384 EXPECT_EQ(cross_site_url, observer.last_navigation_url()); 5262 EXPECT_EQ(cross_site_url, observer.last_navigation_url());
5385 EXPECT_TRUE(observer.last_navigation_succeeded()); 5263 EXPECT_TRUE(observer.last_navigation_succeeded());
5386 5264
5387 RenderWidgetHostImpl* render_widget_host = 5265 RenderWidgetHostImpl* render_widget_host =
5388 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); 5266 root->child_at(0)->current_frame_host()->GetRenderWidgetHost();
5389 EXPECT_FALSE(render_widget_host->is_hidden()); 5267 EXPECT_FALSE(render_widget_host->is_hidden());
(...skipping 17 matching lines...) Expand all
5407 } 5285 }
5408 5286
5409 // Verify that sandbox flags inheritance works across multiple levels of 5287 // Verify that sandbox flags inheritance works across multiple levels of
5410 // frames. See https://crbug.com/576845. 5288 // frames. See https://crbug.com/576845.
5411 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsInheritance) { 5289 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, SandboxFlagsInheritance) {
5412 GURL main_url(embedded_test_server()->GetURL( 5290 GURL main_url(embedded_test_server()->GetURL(
5413 "a.com", "/cross_site_iframe_factory.html?a(a)")); 5291 "a.com", "/cross_site_iframe_factory.html?a(a)"));
5414 NavigateToURL(shell(), main_url); 5292 NavigateToURL(shell(), main_url);
5415 5293
5416 // It is safe to obtain the root frame tree node here, as it doesn't change. 5294 // It is safe to obtain the root frame tree node here, as it doesn't change.
5417 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5295 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5418 ->GetFrameTree()
5419 ->root();
5420 5296
5421 // Set sandbox flags for child frame. 5297 // Set sandbox flags for child frame.
5422 EXPECT_TRUE(ExecuteScript( 5298 EXPECT_TRUE(ExecuteScript(
5423 root->current_frame_host(), 5299 root->current_frame_host(),
5424 "document.querySelector('iframe').sandbox = 'allow-scripts';")); 5300 "document.querySelector('iframe').sandbox = 'allow-scripts';"));
5425 5301
5426 // Calculate expected flags. Note that "allow-scripts" resets both 5302 // Calculate expected flags. Note that "allow-scripts" resets both
5427 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per 5303 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per
5428 // blink::parseSandboxPolicy(). 5304 // blink::parseSandboxPolicy().
5429 blink::WebSandboxFlags expected_flags = 5305 blink::WebSandboxFlags expected_flags =
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
5463 // a child frame, update its sandbox flags but don't navigate the frame, and 5339 // a child frame, update its sandbox flags but don't navigate the frame, and
5464 // ensure that a new cross-site grandchild frame doesn't inherit the new flags 5340 // ensure that a new cross-site grandchild frame doesn't inherit the new flags
5465 // (which shouldn't have taken effect). 5341 // (which shouldn't have taken effect).
5466 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5342 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5467 SandboxFlagsNotInheritedBeforeNavigation) { 5343 SandboxFlagsNotInheritedBeforeNavigation) {
5468 GURL main_url(embedded_test_server()->GetURL( 5344 GURL main_url(embedded_test_server()->GetURL(
5469 "a.com", "/cross_site_iframe_factory.html?a(a)")); 5345 "a.com", "/cross_site_iframe_factory.html?a(a)"));
5470 NavigateToURL(shell(), main_url); 5346 NavigateToURL(shell(), main_url);
5471 5347
5472 // It is safe to obtain the root frame tree node here, as it doesn't change. 5348 // It is safe to obtain the root frame tree node here, as it doesn't change.
5473 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5349 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5474 ->GetFrameTree()
5475 ->root();
5476 5350
5477 // Set sandbox flags for child frame. 5351 // Set sandbox flags for child frame.
5478 EXPECT_TRUE(ExecuteScript( 5352 EXPECT_TRUE(ExecuteScript(
5479 root->current_frame_host(), 5353 root->current_frame_host(),
5480 "document.querySelector('iframe').sandbox = 'allow-scripts';")); 5354 "document.querySelector('iframe').sandbox = 'allow-scripts';"));
5481 5355
5482 // These flags should be pending but not take effect, since there's been no 5356 // These flags should be pending but not take effect, since there's been no
5483 // navigation. 5357 // navigation.
5484 blink::WebSandboxFlags expected_flags = 5358 blink::WebSandboxFlags expected_flags =
5485 blink::WebSandboxFlags::All & ~blink::WebSandboxFlags::Scripts & 5359 blink::WebSandboxFlags::All & ~blink::WebSandboxFlags::Scripts &
(...skipping 29 matching lines...) Expand all
5515 // Verify that popups opened from sandboxed frames inherit sandbox flags from 5389 // Verify that popups opened from sandboxed frames inherit sandbox flags from
5516 // their opener, and that they keep these inherited flags after being navigated 5390 // their opener, and that they keep these inherited flags after being navigated
5517 // cross-site. See https://crbug.com/483584. 5391 // cross-site. See https://crbug.com/483584.
5518 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5392 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5519 NewPopupInheritsSandboxFlagsFromOpener) { 5393 NewPopupInheritsSandboxFlagsFromOpener) {
5520 GURL main_url(embedded_test_server()->GetURL( 5394 GURL main_url(embedded_test_server()->GetURL(
5521 "a.com", "/cross_site_iframe_factory.html?a(a)")); 5395 "a.com", "/cross_site_iframe_factory.html?a(a)"));
5522 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 5396 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5523 5397
5524 // It is safe to obtain the root frame tree node here, as it doesn't change. 5398 // It is safe to obtain the root frame tree node here, as it doesn't change.
5525 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5399 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5526 ->GetFrameTree()
5527 ->root();
5528 5400
5529 // Set sandbox flags for child frame. 5401 // Set sandbox flags for child frame.
5530 EXPECT_TRUE(ExecuteScript(root->current_frame_host(), 5402 EXPECT_TRUE(ExecuteScript(root->current_frame_host(),
5531 "document.querySelector('iframe').sandbox = " 5403 "document.querySelector('iframe').sandbox = "
5532 " 'allow-scripts allow-popups';")); 5404 " 'allow-scripts allow-popups';"));
5533 5405
5534 // Calculate expected flags. Note that "allow-scripts" resets both 5406 // Calculate expected flags. Note that "allow-scripts" resets both
5535 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per 5407 // WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits per
5536 // blink::parseSandboxPolicy(). 5408 // blink::parseSandboxPolicy().
5537 blink::WebSandboxFlags expected_flags = 5409 blink::WebSandboxFlags expected_flags =
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5586 // Verify that popups opened from frames sandboxed with the 5458 // Verify that popups opened from frames sandboxed with the
5587 // "allow-popups-to-escape-sandbox" directive do *not* inherit sandbox flags 5459 // "allow-popups-to-escape-sandbox" directive do *not* inherit sandbox flags
5588 // from their opener. 5460 // from their opener.
5589 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5461 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5590 OpenUnsandboxedPopupFromSandboxedFrame) { 5462 OpenUnsandboxedPopupFromSandboxedFrame) {
5591 GURL main_url(embedded_test_server()->GetURL( 5463 GURL main_url(embedded_test_server()->GetURL(
5592 "a.com", "/cross_site_iframe_factory.html?a(a)")); 5464 "a.com", "/cross_site_iframe_factory.html?a(a)"));
5593 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 5465 EXPECT_TRUE(NavigateToURL(shell(), main_url));
5594 5466
5595 // It is safe to obtain the root frame tree node here, as it doesn't change. 5467 // It is safe to obtain the root frame tree node here, as it doesn't change.
5596 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5468 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5597 ->GetFrameTree()
5598 ->root();
5599 5469
5600 // Set sandbox flags for child frame, specifying that popups opened from it 5470 // Set sandbox flags for child frame, specifying that popups opened from it
5601 // should not be sandboxed. 5471 // should not be sandboxed.
5602 EXPECT_TRUE(ExecuteScript( 5472 EXPECT_TRUE(ExecuteScript(
5603 root->current_frame_host(), 5473 root->current_frame_host(),
5604 "document.querySelector('iframe').sandbox = " 5474 "document.querySelector('iframe').sandbox = "
5605 " 'allow-scripts allow-popups allow-popups-to-escape-sandbox';")); 5475 " 'allow-scripts allow-popups allow-popups-to-escape-sandbox';"));
5606 5476
5607 // Set expected flags for the child frame. Note that "allow-scripts" resets 5477 // Set expected flags for the child frame. Note that "allow-scripts" resets
5608 // both WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits 5478 // both WebSandboxFlags::Scripts and WebSandboxFlags::AutomaticFeatures bits
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5657 SetupCrossSiteRedirector(&https_server); 5527 SetupCrossSiteRedirector(&https_server);
5658 5528
5659 GURL iframe_url( 5529 GURL iframe_url(
5660 https_server.GetURL("/mixed-content/basic-passive-in-iframe.html")); 5530 https_server.GetURL("/mixed-content/basic-passive-in-iframe.html"));
5661 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); 5531 EXPECT_TRUE(NavigateToURL(shell(), iframe_url));
5662 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); 5532 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent());
5663 5533
5664 // When the subframe navigates, the WebContents should still be marked 5534 // When the subframe navigates, the WebContents should still be marked
5665 // as having displayed insecure content. 5535 // as having displayed insecure content.
5666 GURL navigate_url(https_server.GetURL("/title1.html")); 5536 GURL navigate_url(https_server.GetURL("/title1.html"));
5667 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5537 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5668 ->GetFrameTree()
5669 ->root();
5670 NavigateFrameToURL(root->child_at(0), navigate_url); 5538 NavigateFrameToURL(root->child_at(0), navigate_url);
5671 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent()); 5539 EXPECT_TRUE(shell()->web_contents()->DisplayedInsecureContent());
5672 5540
5673 // When the main frame navigates, it should no longer be marked as 5541 // When the main frame navigates, it should no longer be marked as
5674 // displaying insecure content. 5542 // displaying insecure content.
5675 EXPECT_TRUE( 5543 EXPECT_TRUE(
5676 NavigateToURL(shell(), https_server.GetURL("b.com", "/title1.html"))); 5544 NavigateToURL(shell(), https_server.GetURL("b.com", "/title1.html")));
5677 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); 5545 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent());
5678 } 5546 }
5679 5547
5680 // Tests that, when a parent frame is set to strictly block mixed 5548 // Tests that, when a parent frame is set to strictly block mixed
5681 // content via Content Security Policy, child OOPIFs cannot display 5549 // content via Content Security Policy, child OOPIFs cannot display
5682 // mixed content. 5550 // mixed content.
5683 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, 5551 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest,
5684 PassiveMixedContentInIframeWithStrictBlocking) { 5552 PassiveMixedContentInIframeWithStrictBlocking) {
5685 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); 5553 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
5686 https_server.ServeFilesFromSourceDirectory("content/test/data"); 5554 https_server.ServeFilesFromSourceDirectory("content/test/data");
5687 ASSERT_TRUE(https_server.Start()); 5555 ASSERT_TRUE(https_server.Start());
5688 SetupCrossSiteRedirector(&https_server); 5556 SetupCrossSiteRedirector(&https_server);
5689 5557
5690 GURL iframe_url_with_strict_blocking(https_server.GetURL( 5558 GURL iframe_url_with_strict_blocking(https_server.GetURL(
5691 "/mixed-content/basic-passive-in-iframe-with-strict-blocking.html")); 5559 "/mixed-content/basic-passive-in-iframe-with-strict-blocking.html"));
5692 EXPECT_TRUE(NavigateToURL(shell(), iframe_url_with_strict_blocking)); 5560 EXPECT_TRUE(NavigateToURL(shell(), iframe_url_with_strict_blocking));
5693 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent()); 5561 EXPECT_FALSE(shell()->web_contents()->DisplayedInsecureContent());
5694 5562
5695 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5563 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5696 ->GetFrameTree()
5697 ->root();
5698 EXPECT_TRUE(root->current_replication_state() 5564 EXPECT_TRUE(root->current_replication_state()
5699 .should_enforce_strict_mixed_content_checking); 5565 .should_enforce_strict_mixed_content_checking);
5700 EXPECT_TRUE(root->child_at(0) 5566 EXPECT_TRUE(root->child_at(0)
5701 ->current_replication_state() 5567 ->current_replication_state()
5702 .should_enforce_strict_mixed_content_checking); 5568 .should_enforce_strict_mixed_content_checking);
5703 5569
5704 // When the subframe navigates, it should still be marked as enforcing 5570 // When the subframe navigates, it should still be marked as enforcing
5705 // strict mixed content. 5571 // strict mixed content.
5706 GURL navigate_url(https_server.GetURL("/title1.html")); 5572 GURL navigate_url(https_server.GetURL("/title1.html"));
5707 NavigateFrameToURL(root->child_at(0), navigate_url); 5573 NavigateFrameToURL(root->child_at(0), navigate_url);
(...skipping 18 matching lines...) Expand all
5726 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest, 5592 IN_PROC_BROWSER_TEST_F(SitePerProcessIgnoreCertErrorsBrowserTest,
5727 ActiveMixedContentInIframe) { 5593 ActiveMixedContentInIframe) {
5728 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); 5594 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS);
5729 https_server.ServeFilesFromSourceDirectory("content/test/data"); 5595 https_server.ServeFilesFromSourceDirectory("content/test/data");
5730 ASSERT_TRUE(https_server.Start()); 5596 ASSERT_TRUE(https_server.Start());
5731 SetupCrossSiteRedirector(&https_server); 5597 SetupCrossSiteRedirector(&https_server);
5732 5598
5733 GURL iframe_url( 5599 GURL iframe_url(
5734 https_server.GetURL("/mixed-content/basic-active-in-iframe.html")); 5600 https_server.GetURL("/mixed-content/basic-active-in-iframe.html"));
5735 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); 5601 EXPECT_TRUE(NavigateToURL(shell(), iframe_url));
5736 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5602 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5737 ->GetFrameTree()
5738 ->root();
5739 ASSERT_EQ(1U, root->child_count()); 5603 ASSERT_EQ(1U, root->child_count());
5740 FrameTreeNode* mixed_child = root->child_at(0)->child_at(0); 5604 FrameTreeNode* mixed_child = root->child_at(0)->child_at(0);
5741 ASSERT_TRUE(mixed_child); 5605 ASSERT_TRUE(mixed_child);
5742 // The child iframe attempted to create a mixed iframe; this should 5606 // The child iframe attempted to create a mixed iframe; this should
5743 // have been blocked, so the mixed iframe should not have committed a 5607 // have been blocked, so the mixed iframe should not have committed a
5744 // load. 5608 // load.
5745 EXPECT_FALSE(mixed_child->has_committed_real_load()); 5609 EXPECT_FALSE(mixed_child->has_committed_real_load());
5746 } 5610 }
5747 5611
5748 // Test setting a cross-origin iframe to display: none. 5612 // Test setting a cross-origin iframe to display: none.
5749 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframeDisplayNone) { 5613 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, CrossSiteIframeDisplayNone) {
5750 GURL main_url(embedded_test_server()->GetURL( 5614 GURL main_url(embedded_test_server()->GetURL(
5751 "a.com", "/cross_site_iframe_factory.html?a(b)")); 5615 "a.com", "/cross_site_iframe_factory.html?a(b)"));
5752 NavigateToURL(shell(), main_url); 5616 NavigateToURL(shell(), main_url);
5753 5617
5754 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5618 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5755 ->GetFrameTree()
5756 ->root();
5757 RenderWidgetHost* root_render_widget_host = 5619 RenderWidgetHost* root_render_widget_host =
5758 root->current_frame_host()->GetRenderWidgetHost(); 5620 root->current_frame_host()->GetRenderWidgetHost();
5759 5621
5760 // Set the iframe to display: none. 5622 // Set the iframe to display: none.
5761 EXPECT_TRUE( 5623 EXPECT_TRUE(
5762 ExecuteScript(shell()->web_contents(), 5624 ExecuteScript(shell()->web_contents(),
5763 "document.querySelector('iframe').style.display = 'none'")); 5625 "document.querySelector('iframe').style.display = 'none'"));
5764 5626
5765 // Waits until pending frames are done. 5627 // Waits until pending frames are done.
5766 scoped_ptr<MainThreadFrameObserver> observer( 5628 scoped_ptr<MainThreadFrameObserver> observer(
5767 new MainThreadFrameObserver(root_render_widget_host)); 5629 new MainThreadFrameObserver(root_render_widget_host));
5768 observer->Wait(); 5630 observer->Wait();
5769 5631
5770 // Force the renderer to generate a new frame. 5632 // Force the renderer to generate a new frame.
5771 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), 5633 EXPECT_TRUE(ExecuteScript(shell()->web_contents(),
5772 "document.body.style.background = 'black'")); 5634 "document.body.style.background = 'black'"));
5773 5635
5774 // Waits for the next frame. 5636 // Waits for the next frame.
5775 observer->Wait(); 5637 observer->Wait();
5776 } 5638 }
5777 5639
5640 // This class will sniff incoming IPC for ViewHostMsg_TextInputStateChanged.
5641 class TextInputStateChangedMessageFilter : public BrowserMessageFilter {
5642 public:
5643 explicit TextInputStateChangedMessageFilter(
5644 RenderWidgetHostImpl* render_widget_host)
5645 : BrowserMessageFilter(ViewMsgStart), text_input_state_changed_(false) {
5646 if (!render_widget_host || !render_widget_host->GetProcess())
5647 text_input_state_changed_ = true;
5648 old_state = *render_widget_host->GetView()->text_input_state();
5649 render_widget_host->GetProcess()->AddFilter(this);
5650 }
5651
5652 void WaitUntilTextInputStateChanges() {
5653 if (!text_input_state_changed_) {
5654 message_loop_runner_ = new MessageLoopRunner;
5655 message_loop_runner_->Run();
5656 }
5657 }
5658
5659 private:
5660 ~TextInputStateChangedMessageFilter() override {}
5661
5662 bool OnMessageReceived(const IPC::Message& msg) override {
5663 IPC_BEGIN_MESSAGE_MAP(TextInputStateChangedMessageFilter, msg)
5664 IPC_MESSAGE_HANDLER(ViewHostMsg_TextInputStateChanged,
5665 OnTextInputStateChangedMessageReceived)
5666 IPC_END_MESSAGE_MAP()
5667 return false;
5668 }
5669
5670 void OnTextInputStateChangedMessageReceived(const TextInputState& new_state) {
5671 if (new_state.type != old_state.type || new_state.mode != old_state.mode ||
5672 new_state.value != old_state.value) {
5673 text_input_state_changed_ = true;
5674 if (message_loop_runner_)
5675 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
5676 message_loop_runner_->QuitClosure());
5677 }
5678 }
5679
5680 bool text_input_state_changed_;
5681 scoped_refptr<MessageLoopRunner> message_loop_runner_;
5682 TextInputState old_state;
5683
5684 DISALLOW_COPY_AND_ASSIGN(TextInputStateChangedMessageFilter);
5685 };
5686
5687 // Verify that when moving the focus between different frames, the WebContents
5688 // properly keeps track of the text input state.
5689 // The test loads a page with one input field, two out of process frames, and a
5690 // second input field positioned after the last <iframe>. Then a sequence of TAB
5691 // inputs are faked to navigate focus in between the different <input> elements.
5692 // After each change, we check with the RWHV of the frame as well as the
5693 // WebContents to make sure the text input state is as expected.
5694 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, TextInputStateChanged) {
5695 GURL main_page_url(embedded_test_server()->GetURL(
5696 "a.com", "/textinput/page_with_input_iframeX2_input.html"));
5697 NavigateToURL(shell(), main_page_url);
5698
5699 WebContents* contents = shell()->web_contents();
5700
5701 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5702
5703 FrameTreeNode* child_b = root->child_at(0);
5704 GURL child_b_url(embedded_test_server()->GetURL(
5705 "b.com", "/textinput/page_with_input.html"));
5706 NavigateFrameToURL(child_b, child_b_url);
5707 EXPECT_TRUE(WaitForRenderFrameReady(child_b->current_frame_host()));
5708
5709 FrameTreeNode* child_c = root->child_at(1);
5710 GURL child_c_url(embedded_test_server()->GetURL(
5711 "c.com", "/textinput/page_with_input.html"));
5712 NavigateFrameToURL(child_c, child_c_url);
5713 EXPECT_TRUE(WaitForRenderFrameReady(child_c->current_frame_host()));
5714
5715 RenderWidgetHostImpl* root_rwh =
5716 root->current_frame_host()->GetRenderWidgetHost();
5717 RenderWidgetHostViewBase* root_rwhv = root_rwh->GetView();
5718
5719 RenderWidgetHostImpl* child_b_rwh =
5720 child_b->current_frame_host()->GetRenderWidgetHost();
5721 RenderWidgetHostViewBase* child_b_rwhv = child_b_rwh->GetView();
5722
5723 RenderWidgetHostImpl* child_c_rwh =
5724 child_c->current_frame_host()->GetRenderWidgetHost();
5725 RenderWidgetHostViewBase* child_c_rwhv = child_c_rwh->GetView();
5726
5727 // Change the text value in <input> field of either frame so that we can
5728 // later track the changes.
5729 EXPECT_TRUE(
5730 ExecuteScript(child_b->current_frame_host(),
5731 "document.querySelector('input').value = 'second';"));
5732 EXPECT_TRUE(
5733 ExecuteScript(child_c->current_frame_host(),
5734 "document.querySelector('input').value = 'third';"));
5735
5736 // Verfy the input type is none in the begning.
5737 EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, root_rwhv->text_input_state()->type);
5738
5739 // A helper function to send a tab key to the frame and wait for a state
5740 // changed message.
5741 auto press_tab_and_wait_for_text_input_state_change =
5742 [contents](RenderWidgetHostImpl* rwh) {
5743 scoped_refptr<TextInputStateChangedMessageFilter> filter =
5744 new TextInputStateChangedMessageFilter(rwh);
5745 SimulateKeyPress(contents, ui::VKEY_TAB, false, false, false, false);
5746 filter->WaitUntilTextInputStateChanges();
5747 };
5748
5749 // Send focus to the first input field
5750 press_tab_and_wait_for_text_input_state_change(root_rwh);
5751 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, root_rwhv->text_input_state()->type);
5752 EXPECT_EQ("first", root_rwhv->text_input_state()->value);
5753
5754 // Verify the top-level state is changed.
5755 EXPECT_EQ("first", web_contents()->GetTextInputState().value);
5756
5757 // Send focus to the input field in frame b.
5758 press_tab_and_wait_for_text_input_state_change(child_b_rwh);
5759 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, child_b_rwhv->text_input_state()->type);
5760 EXPECT_EQ("second", child_b_rwhv->text_input_state()->value);
5761
5762 EXPECT_EQ("second", web_contents()->GetTextInputState().value);
5763
5764 // Send focus to the input field in frame c.
5765 press_tab_and_wait_for_text_input_state_change(child_c_rwh);
5766 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, child_c_rwhv->text_input_state()->type);
5767 EXPECT_EQ("third", child_c_rwhv->text_input_state()->value);
5768
5769 EXPECT_EQ("third", web_contents()->GetTextInputState().value);
5770
5771 // Send focus to the last input field in top frame.
5772 press_tab_and_wait_for_text_input_state_change(root_rwh);
5773 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, root_rwhv->text_input_state()->type);
5774 EXPECT_EQ("fourth", root_rwhv->text_input_state()->value);
5775
5776 EXPECT_EQ("fourth", web_contents()->GetTextInputState().value);
5777 }
5778
5778 // Test that a cross-origin iframe can be blocked by X-Frame-Options and CSP 5779 // Test that a cross-origin iframe can be blocked by X-Frame-Options and CSP
5779 // frame-ancestors. 5780 // frame-ancestors.
5780 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, 5781 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
5781 CrossSiteIframeBlockedByXFrameOptionsOrCSP) { 5782 CrossSiteIframeBlockedByXFrameOptionsOrCSP) {
5782 GURL main_url(embedded_test_server()->GetURL( 5783 GURL main_url(embedded_test_server()->GetURL(
5783 "a.com", "/cross_site_iframe_factory.html?a(a)")); 5784 "a.com", "/cross_site_iframe_factory.html?a(a)"));
5784 NavigateToURL(shell(), main_url); 5785 NavigateToURL(shell(), main_url);
5785 5786
5786 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5787 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5787 ->GetFrameTree()
5788 ->root();
5789 5788
5790 // Add a load event handler for the iframe element. 5789 // Add a load event handler for the iframe element.
5791 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), 5790 EXPECT_TRUE(ExecuteScript(shell()->web_contents(),
5792 "document.querySelector('iframe').onload = " 5791 "document.querySelector('iframe').onload = "
5793 " function() { document.title = 'loaded'; };")); 5792 " function() { document.title = 'loaded'; };"));
5794 5793
5795 GURL blocked_urls[] = { 5794 GURL blocked_urls[] = {
5796 embedded_test_server()->GetURL("b.com", "/frame-ancestors-none.html"), 5795 embedded_test_server()->GetURL("b.com", "/frame-ancestors-none.html"),
5797 embedded_test_server()->GetURL("b.com", "/x-frame-options-deny.html") 5796 embedded_test_server()->GetURL("b.com", "/x-frame-options-deny.html")
5798 }; 5797 };
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
5846 EXPECT_EQ(blink::WebSandboxFlags::None, 5845 EXPECT_EQ(blink::WebSandboxFlags::None,
5847 root->child_at(0)->effective_sandbox_flags()); 5846 root->child_at(0)->effective_sandbox_flags());
5848 } 5847 }
5849 } 5848 }
5850 5849
5851 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ScreenCoordinates) { 5850 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, ScreenCoordinates) {
5852 GURL main_url(embedded_test_server()->GetURL( 5851 GURL main_url(embedded_test_server()->GetURL(
5853 "a.com", "/cross_site_iframe_factory.html?a(b)")); 5852 "a.com", "/cross_site_iframe_factory.html?a(b)"));
5854 NavigateToURL(shell(), main_url); 5853 NavigateToURL(shell(), main_url);
5855 5854
5856 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 5855 FrameTreeNode* root = web_contents()->GetFrameTree()->root();
5857 ->GetFrameTree()
5858 ->root();
5859 FrameTreeNode* child = root->child_at(0); 5856 FrameTreeNode* child = root->child_at(0);
5860 5857
5861 const char* properties[] = {"screenX", "screenY", "outerWidth", 5858 const char* properties[] = {"screenX", "screenY", "outerWidth",
5862 "outerHeight"}; 5859 "outerHeight"};
5863 5860
5864 for (const char* property : properties) { 5861 for (const char* property : properties) {
5865 std::string script = "window.domAutomationController.send(window."; 5862 std::string script = "window.domAutomationController.send(window.";
5866 script += property; 5863 script += property;
5867 script += ");"; 5864 script += ");";
5868 int root_value = 1; 5865 int root_value = 1;
5869 int child_value = 2; 5866 int child_value = 2;
5870 EXPECT_TRUE(ExecuteScriptAndExtractInt(root->current_frame_host(), 5867 EXPECT_TRUE(ExecuteScriptAndExtractInt(root->current_frame_host(),
5871 script.c_str(), &root_value)); 5868 script.c_str(), &root_value));
5872 5869
5873 EXPECT_TRUE(ExecuteScriptAndExtractInt(child->current_frame_host(), 5870 EXPECT_TRUE(ExecuteScriptAndExtractInt(child->current_frame_host(),
5874 script.c_str(), &child_value)); 5871 script.c_str(), &child_value));
5875 5872
5876 EXPECT_EQ(root_value, child_value); 5873 EXPECT_EQ(root_value, child_value);
5877 } 5874 }
5878 } 5875 }
5879 5876
5880 } // namespace content 5877 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698