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