| 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 "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 6 #include "content/browser/renderer_host/test_render_view_host.h" | 6 #include "content/browser/renderer_host/test_render_view_host.h" |
| 7 #include "content/browser/site_instance_impl.h" | 7 #include "content/browser/site_instance_impl.h" |
| 8 #include "content/browser/web_contents/navigation_controller_impl.h" | 8 #include "content/browser/web_contents/navigation_controller_impl.h" |
| 9 #include "content/browser/web_contents/navigation_entry_impl.h" | 9 #include "content/browser/web_contents/navigation_entry_impl.h" |
| 10 #include "content/browser/web_contents/render_view_host_manager.h" | 10 #include "content/browser/web_contents/render_view_host_manager.h" |
| (...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 // Using TestBrowserContext. | 538 // Using TestBrowserContext. |
| 539 SiteInstanceImpl* instance = | 539 SiteInstanceImpl* instance = |
| 540 static_cast<SiteInstanceImpl*>(SiteInstance::Create(browser_context())); | 540 static_cast<SiteInstanceImpl*>(SiteInstance::Create(browser_context())); |
| 541 EXPECT_FALSE(instance->HasSite()); | 541 EXPECT_FALSE(instance->HasSite()); |
| 542 | 542 |
| 543 scoped_ptr<TestWebContents> web_contents( | 543 scoped_ptr<TestWebContents> web_contents( |
| 544 TestWebContents::Create(browser_context(), instance)); | 544 TestWebContents::Create(browser_context(), instance)); |
| 545 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 545 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 546 web_contents.get()); | 546 web_contents.get()); |
| 547 | 547 |
| 548 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 548 manager.Init(browser_context(), |
| 549 instance, |
| 550 MSG_ROUTING_NONE, |
| 551 MSG_ROUTING_NONE, |
| 552 false); |
| 549 | 553 |
| 550 RenderViewHost* host = manager.current_host(); | 554 RenderViewHost* host = manager.current_host(); |
| 551 ASSERT_TRUE(host); | 555 ASSERT_TRUE(host); |
| 552 EXPECT_EQ(instance, host->GetSiteInstance()); | 556 EXPECT_EQ(instance, host->GetSiteInstance()); |
| 553 EXPECT_EQ(web_contents.get(), host->GetDelegate()); | 557 EXPECT_EQ(web_contents.get(), host->GetDelegate()); |
| 554 EXPECT_TRUE(manager.GetRenderWidgetHostView()); | 558 EXPECT_TRUE(manager.GetRenderWidgetHostView()); |
| 555 EXPECT_FALSE(manager.pending_render_view_host()); | 559 EXPECT_FALSE(manager.pending_render_view_host()); |
| 556 } | 560 } |
| 557 | 561 |
| 558 // Tests the Navigate function. We navigate three sites consecutively and check | 562 // Tests the Navigate function. We navigate three sites consecutively and check |
| 559 // how the pending/committed RenderViewHost are modified. | 563 // how the pending/committed RenderViewHost are modified. |
| 560 TEST_F(RenderViewHostManagerTest, Navigate) { | 564 TEST_F(RenderViewHostManagerTest, Navigate) { |
| 561 TestNotificationTracker notifications; | 565 TestNotificationTracker notifications; |
| 562 | 566 |
| 563 SiteInstance* instance = SiteInstance::Create(browser_context()); | 567 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 564 | 568 |
| 565 scoped_ptr<TestWebContents> web_contents( | 569 scoped_ptr<TestWebContents> web_contents( |
| 566 TestWebContents::Create(browser_context(), instance)); | 570 TestWebContents::Create(browser_context(), instance)); |
| 567 notifications.ListenFor( | 571 notifications.ListenFor( |
| 568 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 572 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| 569 Source<NavigationController>(&web_contents->GetController())); | 573 Source<NavigationController>(&web_contents->GetController())); |
| 570 | 574 |
| 571 // Create. | 575 // Create. |
| 572 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 576 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 573 web_contents.get()); | 577 web_contents.get()); |
| 574 | 578 |
| 575 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 579 manager.Init(browser_context(), |
| 580 instance, |
| 581 MSG_ROUTING_NONE, |
| 582 MSG_ROUTING_NONE, |
| 583 false); |
| 576 | 584 |
| 577 RenderViewHost* host; | 585 RenderViewHost* host; |
| 578 | 586 |
| 579 // 1) The first navigation. -------------------------- | 587 // 1) The first navigation. -------------------------- |
| 580 const GURL kUrl1("http://www.google.com/"); | 588 const GURL kUrl1("http://www.google.com/"); |
| 581 NavigationEntryImpl entry1( | 589 NavigationEntryImpl entry1( |
| 582 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 590 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
| 583 string16() /* title */, PAGE_TRANSITION_TYPED, | 591 string16() /* title */, PAGE_TRANSITION_TYPED, |
| 584 false /* is_renderer_init */); | 592 false /* is_renderer_init */); |
| 585 host = manager.Navigate(entry1); | 593 host = manager.Navigate(entry1, false); |
| 586 | 594 |
| 587 // The RenderViewHost created in Init will be reused. | 595 // The RenderViewHost created in Init will be reused. |
| 588 EXPECT_TRUE(host == manager.current_host()); | 596 EXPECT_TRUE(host == manager.current_host()); |
| 589 EXPECT_FALSE(manager.pending_render_view_host()); | 597 EXPECT_FALSE(manager.pending_render_view_host()); |
| 590 | 598 |
| 591 // Commit. | 599 // Commit. |
| 592 manager.DidNavigateMainFrame(host); | 600 manager.DidNavigateMainFrame(host); |
| 593 // Commit to SiteInstance should be delayed until RenderView commit. | 601 // Commit to SiteInstance should be delayed until RenderView commit. |
| 594 EXPECT_TRUE(host == manager.current_host()); | 602 EXPECT_TRUE(host == manager.current_host()); |
| 595 ASSERT_TRUE(host); | 603 ASSERT_TRUE(host); |
| 596 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 604 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 597 HasSite()); | 605 HasSite()); |
| 598 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 606 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| 599 | 607 |
| 600 // 2) Navigate to next site. ------------------------- | 608 // 2) Navigate to next site. ------------------------- |
| 601 const GURL kUrl2("http://www.google.com/foo"); | 609 const GURL kUrl2("http://www.google.com/foo"); |
| 602 NavigationEntryImpl entry2( | 610 NavigationEntryImpl entry2( |
| 603 NULL /* instance */, -1 /* page_id */, kUrl2, | 611 NULL /* instance */, -1 /* page_id */, kUrl2, |
| 604 Referrer(kUrl1, WebKit::WebReferrerPolicyDefault), | 612 Referrer(kUrl1, WebKit::WebReferrerPolicyDefault), |
| 605 string16() /* title */, PAGE_TRANSITION_LINK, | 613 string16() /* title */, PAGE_TRANSITION_LINK, |
| 606 true /* is_renderer_init */); | 614 true /* is_renderer_init */); |
| 607 host = manager.Navigate(entry2); | 615 host = manager.Navigate(entry2, false); |
| 608 | 616 |
| 609 // The RenderViewHost created in Init will be reused. | 617 // The RenderViewHost created in Init will be reused. |
| 610 EXPECT_TRUE(host == manager.current_host()); | 618 EXPECT_TRUE(host == manager.current_host()); |
| 611 EXPECT_FALSE(manager.pending_render_view_host()); | 619 EXPECT_FALSE(manager.pending_render_view_host()); |
| 612 | 620 |
| 613 // Commit. | 621 // Commit. |
| 614 manager.DidNavigateMainFrame(host); | 622 manager.DidNavigateMainFrame(host); |
| 615 EXPECT_TRUE(host == manager.current_host()); | 623 EXPECT_TRUE(host == manager.current_host()); |
| 616 ASSERT_TRUE(host); | 624 ASSERT_TRUE(host); |
| 617 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 625 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 618 HasSite()); | 626 HasSite()); |
| 619 | 627 |
| 620 // 3) Cross-site navigate to next site. -------------- | 628 // 3) Cross-site navigate to next site. -------------- |
| 621 const GURL kUrl3("http://webkit.org/"); | 629 const GURL kUrl3("http://webkit.org/"); |
| 622 NavigationEntryImpl entry3( | 630 NavigationEntryImpl entry3( |
| 623 NULL /* instance */, -1 /* page_id */, kUrl3, | 631 NULL /* instance */, -1 /* page_id */, kUrl3, |
| 624 Referrer(kUrl2, WebKit::WebReferrerPolicyDefault), | 632 Referrer(kUrl2, WebKit::WebReferrerPolicyDefault), |
| 625 string16() /* title */, PAGE_TRANSITION_LINK, | 633 string16() /* title */, PAGE_TRANSITION_LINK, |
| 626 false /* is_renderer_init */); | 634 false /* is_renderer_init */); |
| 627 host = manager.Navigate(entry3); | 635 host = manager.Navigate(entry3, false); |
| 628 | 636 |
| 629 // A new RenderViewHost should be created. | 637 // A new RenderViewHost should be created. |
| 630 EXPECT_TRUE(manager.pending_render_view_host()); | 638 EXPECT_TRUE(manager.pending_render_view_host()); |
| 631 ASSERT_EQ(host, manager.pending_render_view_host()); | 639 ASSERT_EQ(host, manager.pending_render_view_host()); |
| 632 | 640 |
| 633 notifications.Reset(); | 641 notifications.Reset(); |
| 634 | 642 |
| 635 // Commit. | 643 // Commit. |
| 636 manager.DidNavigateMainFrame(manager.pending_render_view_host()); | 644 manager.DidNavigateMainFrame(manager.pending_render_view_host()); |
| 637 EXPECT_TRUE(host == manager.current_host()); | 645 EXPECT_TRUE(host == manager.current_host()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 658 scoped_ptr<TestWebContents> web_contents( | 666 scoped_ptr<TestWebContents> web_contents( |
| 659 TestWebContents::Create(browser_context(), instance)); | 667 TestWebContents::Create(browser_context(), instance)); |
| 660 notifications.ListenFor( | 668 notifications.ListenFor( |
| 661 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 669 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| 662 Source<NavigationController>(&web_contents->GetController())); | 670 Source<NavigationController>(&web_contents->GetController())); |
| 663 | 671 |
| 664 // Create. | 672 // Create. |
| 665 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 673 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 666 web_contents.get()); | 674 web_contents.get()); |
| 667 | 675 |
| 668 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 676 manager.Init(browser_context(), |
| 677 instance, |
| 678 MSG_ROUTING_NONE, |
| 679 MSG_ROUTING_NONE, |
| 680 false); |
| 669 | 681 |
| 670 // 1) The first navigation. -------------------------- | 682 // 1) The first navigation. -------------------------- |
| 671 const GURL kUrl1("http://www.google.com/"); | 683 const GURL kUrl1("http://www.google.com/"); |
| 672 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 684 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 673 Referrer(), string16() /* title */, | 685 Referrer(), string16() /* title */, |
| 674 PAGE_TRANSITION_TYPED, | 686 PAGE_TRANSITION_TYPED, |
| 675 false /* is_renderer_init */); | 687 false /* is_renderer_init */); |
| 676 RenderViewHost* host = manager.Navigate(entry1); | 688 RenderViewHost* host = manager.Navigate(entry1, false); |
| 677 | 689 |
| 678 // The RenderViewHost created in Init will be reused. | 690 // The RenderViewHost created in Init will be reused. |
| 679 EXPECT_TRUE(host == manager.current_host()); | 691 EXPECT_TRUE(host == manager.current_host()); |
| 680 EXPECT_FALSE(manager.pending_render_view_host()); | 692 EXPECT_FALSE(manager.pending_render_view_host()); |
| 681 | 693 |
| 682 // We should observe a notification. | 694 // We should observe a notification. |
| 683 EXPECT_TRUE(notifications.Check1AndReset( | 695 EXPECT_TRUE(notifications.Check1AndReset( |
| 684 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 696 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 685 notifications.Reset(); | 697 notifications.Reset(); |
| 686 | 698 |
| 687 // Commit. | 699 // Commit. |
| 688 manager.DidNavigateMainFrame(host); | 700 manager.DidNavigateMainFrame(host); |
| 689 | 701 |
| 690 // Commit to SiteInstance should be delayed until RenderView commit. | 702 // Commit to SiteInstance should be delayed until RenderView commit. |
| 691 EXPECT_TRUE(host == manager.current_host()); | 703 EXPECT_TRUE(host == manager.current_host()); |
| 692 ASSERT_TRUE(host); | 704 ASSERT_TRUE(host); |
| 693 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 705 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 694 HasSite()); | 706 HasSite()); |
| 695 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 707 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| 696 | 708 |
| 697 // 2) Cross-site navigate to next site. ------------------------- | 709 // 2) Cross-site navigate to next site. ------------------------- |
| 698 const GURL kUrl2("http://www.example.com"); | 710 const GURL kUrl2("http://www.example.com"); |
| 699 NavigationEntryImpl entry2( | 711 NavigationEntryImpl entry2( |
| 700 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), | 712 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), |
| 701 string16() /* title */, PAGE_TRANSITION_TYPED, | 713 string16() /* title */, PAGE_TRANSITION_TYPED, |
| 702 false /* is_renderer_init */); | 714 false /* is_renderer_init */); |
| 703 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( | 715 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( |
| 704 manager.Navigate(entry2)); | 716 manager.Navigate(entry2, false)); |
| 705 int host2_process_id = host2->GetProcess()->GetID(); | 717 int host2_process_id = host2->GetProcess()->GetID(); |
| 706 | 718 |
| 707 // A new RenderViewHost should be created. | 719 // A new RenderViewHost should be created. |
| 708 EXPECT_TRUE(manager.pending_render_view_host()); | 720 EXPECT_TRUE(manager.pending_render_view_host()); |
| 709 ASSERT_EQ(host2, manager.pending_render_view_host()); | 721 ASSERT_EQ(host2, manager.pending_render_view_host()); |
| 710 EXPECT_NE(host2, host); | 722 EXPECT_NE(host2, host); |
| 711 | 723 |
| 712 // Check that the navigation is still suspended because the old RVH | 724 // Check that the navigation is still suspended because the old RVH |
| 713 // is not swapped out, yet. | 725 // is not swapped out, yet. |
| 714 EXPECT_TRUE(host2->are_navigations_suspended()); | 726 EXPECT_TRUE(host2->are_navigations_suspended()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( | 758 EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( |
| 747 ViewMsg_Navigate::ID)); | 759 ViewMsg_Navigate::ID)); |
| 748 | 760 |
| 749 // 3) Cross-site navigate to next site before 2) has committed. -------------- | 761 // 3) Cross-site navigate to next site before 2) has committed. -------------- |
| 750 const GURL kUrl3("http://webkit.org/"); | 762 const GURL kUrl3("http://webkit.org/"); |
| 751 NavigationEntryImpl entry3(NULL /* instance */, -1 /* page_id */, kUrl3, | 763 NavigationEntryImpl entry3(NULL /* instance */, -1 /* page_id */, kUrl3, |
| 752 Referrer(), string16() /* title */, | 764 Referrer(), string16() /* title */, |
| 753 PAGE_TRANSITION_TYPED, | 765 PAGE_TRANSITION_TYPED, |
| 754 false /* is_renderer_init */); | 766 false /* is_renderer_init */); |
| 755 test_process_host->sink().ClearMessages(); | 767 test_process_host->sink().ClearMessages(); |
| 756 RenderViewHost* host3 = manager.Navigate(entry3); | 768 RenderViewHost* host3 = manager.Navigate(entry3, false); |
| 757 | 769 |
| 758 // A new RenderViewHost should be created. host2 is now deleted. | 770 // A new RenderViewHost should be created. host2 is now deleted. |
| 759 EXPECT_TRUE(manager.pending_render_view_host()); | 771 EXPECT_TRUE(manager.pending_render_view_host()); |
| 760 ASSERT_EQ(host3, manager.pending_render_view_host()); | 772 ASSERT_EQ(host3, manager.pending_render_view_host()); |
| 761 EXPECT_NE(host3, host); | 773 EXPECT_NE(host3, host); |
| 762 EXPECT_NE(host3->GetProcess()->GetID(), host2_process_id); | 774 EXPECT_NE(host3->GetProcess()->GetID(), host2_process_id); |
| 763 | 775 |
| 764 // Navigations in the new RVH should be suspended, which is ok because the | 776 // Navigations in the new RVH should be suspended, which is ok because the |
| 765 // old RVH is not yet swapped out and can respond to a second beforeunload | 777 // old RVH is not yet swapped out and can respond to a second beforeunload |
| 766 // request. | 778 // request. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 // Tests WebUI creation. | 813 // Tests WebUI creation. |
| 802 TEST_F(RenderViewHostManagerTest, WebUI) { | 814 TEST_F(RenderViewHostManagerTest, WebUI) { |
| 803 set_should_create_webui(true); | 815 set_should_create_webui(true); |
| 804 SiteInstance* instance = SiteInstance::Create(browser_context()); | 816 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 805 | 817 |
| 806 scoped_ptr<TestWebContents> web_contents( | 818 scoped_ptr<TestWebContents> web_contents( |
| 807 TestWebContents::Create(browser_context(), instance)); | 819 TestWebContents::Create(browser_context(), instance)); |
| 808 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 820 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 809 web_contents.get()); | 821 web_contents.get()); |
| 810 | 822 |
| 811 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 823 manager.Init(browser_context(), |
| 824 instance, |
| 825 MSG_ROUTING_NONE, |
| 826 MSG_ROUTING_NONE, |
| 827 false); |
| 812 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); | 828 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); |
| 813 | 829 |
| 814 const GURL kUrl("chrome://foo"); | 830 const GURL kUrl("chrome://foo"); |
| 815 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, | 831 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, |
| 816 Referrer(), string16() /* title */, | 832 Referrer(), string16() /* title */, |
| 817 PAGE_TRANSITION_TYPED, | 833 PAGE_TRANSITION_TYPED, |
| 818 false /* is_renderer_init */); | 834 false /* is_renderer_init */); |
| 819 RenderViewHost* host = manager.Navigate(entry); | 835 RenderViewHost* host = manager.Navigate(entry, false); |
| 820 | 836 |
| 821 // We commit the pending RenderViewHost immediately because the previous | 837 // We commit the pending RenderViewHost immediately because the previous |
| 822 // RenderViewHost was not live. We test a case where it is live in | 838 // RenderViewHost was not live. We test a case where it is live in |
| 823 // WebUIInNewTab. | 839 // WebUIInNewTab. |
| 824 EXPECT_TRUE(host); | 840 EXPECT_TRUE(host); |
| 825 EXPECT_EQ(host, manager.current_host()); | 841 EXPECT_EQ(host, manager.current_host()); |
| 826 EXPECT_FALSE(manager.pending_render_view_host()); | 842 EXPECT_FALSE(manager.pending_render_view_host()); |
| 827 | 843 |
| 828 // It's important that the site instance get set on the Web UI page as soon | 844 // It's important that the site instance get set on the Web UI page as soon |
| 829 // as the navigation starts, rather than lazily after it commits, so we don't | 845 // as the navigation starts, rather than lazily after it commits, so we don't |
| (...skipping 17 matching lines...) Expand all Loading... |
| 847 // grant the correct bindings. http://crbug.com/189101. | 863 // grant the correct bindings. http://crbug.com/189101. |
| 848 TEST_F(RenderViewHostManagerTest, WebUIInNewTab) { | 864 TEST_F(RenderViewHostManagerTest, WebUIInNewTab) { |
| 849 set_should_create_webui(true); | 865 set_should_create_webui(true); |
| 850 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); | 866 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); |
| 851 | 867 |
| 852 // Create a blank tab. | 868 // Create a blank tab. |
| 853 scoped_ptr<TestWebContents> web_contents1( | 869 scoped_ptr<TestWebContents> web_contents1( |
| 854 TestWebContents::Create(browser_context(), blank_instance)); | 870 TestWebContents::Create(browser_context(), blank_instance)); |
| 855 RenderViewHostManager manager1(web_contents1.get(), web_contents1.get(), | 871 RenderViewHostManager manager1(web_contents1.get(), web_contents1.get(), |
| 856 web_contents1.get()); | 872 web_contents1.get()); |
| 857 manager1.Init( | 873 manager1.Init(browser_context(), |
| 858 browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 874 blank_instance, |
| 875 MSG_ROUTING_NONE, |
| 876 MSG_ROUTING_NONE, |
| 877 false); |
| 859 // Test the case that new RVH is considered live. | 878 // Test the case that new RVH is considered live. |
| 860 manager1.current_host()->CreateRenderView(string16(), -1, -1); | 879 manager1.current_host()->CreateRenderView(string16(), -1, -1); |
| 861 | 880 |
| 862 // Navigate to a WebUI page. | 881 // Navigate to a WebUI page. |
| 863 const GURL kUrl1("chrome://foo"); | 882 const GURL kUrl1("chrome://foo"); |
| 864 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 883 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 865 Referrer(), string16() /* title */, | 884 Referrer(), string16() /* title */, |
| 866 PAGE_TRANSITION_TYPED, | 885 PAGE_TRANSITION_TYPED, |
| 867 false /* is_renderer_init */); | 886 false /* is_renderer_init */); |
| 868 RenderViewHost* host1 = manager1.Navigate(entry1); | 887 RenderViewHost* host1 = manager1.Navigate(entry1, false); |
| 869 | 888 |
| 870 // We should have a pending navigation to the WebUI RenderViewHost. | 889 // We should have a pending navigation to the WebUI RenderViewHost. |
| 871 // It should already have bindings. | 890 // It should already have bindings. |
| 872 EXPECT_EQ(host1, manager1.pending_render_view_host()); | 891 EXPECT_EQ(host1, manager1.pending_render_view_host()); |
| 873 EXPECT_NE(host1, manager1.current_host()); | 892 EXPECT_NE(host1, manager1.current_host()); |
| 874 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 893 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 875 | 894 |
| 876 // Commit and ensure we still have bindings. | 895 // Commit and ensure we still have bindings. |
| 877 manager1.DidNavigateMainFrame(host1); | 896 manager1.DidNavigateMainFrame(host1); |
| 878 SiteInstance* webui_instance = host1->GetSiteInstance(); | 897 SiteInstance* webui_instance = host1->GetSiteInstance(); |
| 879 EXPECT_EQ(host1, manager1.current_host()); | 898 EXPECT_EQ(host1, manager1.current_host()); |
| 880 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 899 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 881 | 900 |
| 882 // Now simulate clicking a link that opens in a new tab. | 901 // Now simulate clicking a link that opens in a new tab. |
| 883 scoped_ptr<TestWebContents> web_contents2( | 902 scoped_ptr<TestWebContents> web_contents2( |
| 884 TestWebContents::Create(browser_context(), webui_instance)); | 903 TestWebContents::Create(browser_context(), webui_instance)); |
| 885 RenderViewHostManager manager2(web_contents2.get(), web_contents2.get(), | 904 RenderViewHostManager manager2(web_contents2.get(), web_contents2.get(), |
| 886 web_contents2.get()); | 905 web_contents2.get()); |
| 887 manager2.Init( | 906 manager2.Init(browser_context(), |
| 888 browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 907 webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, false); |
| 889 // Make sure the new RVH is considered live. This is usually done in | 908 // Make sure the new RVH is considered live. This is usually done in |
| 890 // RenderWidgetHost::Init when opening a new tab from a link. | 909 // RenderWidgetHost::Init when opening a new tab from a link. |
| 891 manager2.current_host()->CreateRenderView(string16(), -1, -1); | 910 manager2.current_host()->CreateRenderView(string16(), -1, -1); |
| 892 | 911 |
| 893 const GURL kUrl2("chrome://foo/bar"); | 912 const GURL kUrl2("chrome://foo/bar"); |
| 894 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, | 913 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, |
| 895 Referrer(), string16() /* title */, | 914 Referrer(), string16() /* title */, |
| 896 PAGE_TRANSITION_LINK, | 915 PAGE_TRANSITION_LINK, |
| 897 true /* is_renderer_init */); | 916 true /* is_renderer_init */); |
| 898 RenderViewHost* host2 = manager2.Navigate(entry2); | 917 RenderViewHost* host2 = manager2.Navigate(entry2, false); |
| 899 | 918 |
| 900 // No cross-process transition happens because we are already in the right | 919 // No cross-process transition happens because we are already in the right |
| 901 // SiteInstance. We should grant bindings immediately. | 920 // SiteInstance. We should grant bindings immediately. |
| 902 EXPECT_EQ(host2, manager2.current_host()); | 921 EXPECT_EQ(host2, manager2.current_host()); |
| 903 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 922 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 904 | 923 |
| 905 manager2.DidNavigateMainFrame(host2); | 924 manager2.DidNavigateMainFrame(host2); |
| 906 } | 925 } |
| 907 | 926 |
| 908 // Tests that we don't end up in an inconsistent state if a page does a back and | 927 // Tests that we don't end up in an inconsistent state if a page does a back and |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1157 GURL guest_url(std::string(chrome::kGuestScheme).append("://abc123")); | 1176 GURL guest_url(std::string(chrome::kGuestScheme).append("://abc123")); |
| 1158 SiteInstance* instance = | 1177 SiteInstance* instance = |
| 1159 SiteInstance::CreateForURL(browser_context(), guest_url); | 1178 SiteInstance::CreateForURL(browser_context(), guest_url); |
| 1160 scoped_ptr<TestWebContents> web_contents( | 1179 scoped_ptr<TestWebContents> web_contents( |
| 1161 TestWebContents::Create(browser_context(), instance)); | 1180 TestWebContents::Create(browser_context(), instance)); |
| 1162 | 1181 |
| 1163 // Create. | 1182 // Create. |
| 1164 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 1183 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 1165 web_contents.get()); | 1184 web_contents.get()); |
| 1166 | 1185 |
| 1167 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1186 manager.Init(browser_context(), |
| 1187 instance, |
| 1188 MSG_ROUTING_NONE, |
| 1189 MSG_ROUTING_NONE, |
| 1190 false); |
| 1168 | 1191 |
| 1169 RenderViewHost* host; | 1192 RenderViewHost* host; |
| 1170 | 1193 |
| 1171 // 1) The first navigation. -------------------------- | 1194 // 1) The first navigation. -------------------------- |
| 1172 const GURL kUrl1("http://www.google.com/"); | 1195 const GURL kUrl1("http://www.google.com/"); |
| 1173 NavigationEntryImpl entry1( | 1196 NavigationEntryImpl entry1( |
| 1174 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 1197 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
| 1175 string16() /* title */, PAGE_TRANSITION_TYPED, | 1198 string16() /* title */, PAGE_TRANSITION_TYPED, |
| 1176 false /* is_renderer_init */); | 1199 false /* is_renderer_init */); |
| 1177 host = manager.Navigate(entry1); | 1200 host = manager.Navigate(entry1, false); |
| 1178 | 1201 |
| 1179 // The RenderViewHost created in Init will be reused. | 1202 // The RenderViewHost created in Init will be reused. |
| 1180 EXPECT_TRUE(host == manager.current_host()); | 1203 EXPECT_TRUE(host == manager.current_host()); |
| 1181 EXPECT_FALSE(manager.pending_render_view_host()); | 1204 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1182 EXPECT_EQ(manager.current_host()->GetSiteInstance(), instance); | 1205 EXPECT_EQ(manager.current_host()->GetSiteInstance(), instance); |
| 1183 | 1206 |
| 1184 // Commit. | 1207 // Commit. |
| 1185 manager.DidNavigateMainFrame(host); | 1208 manager.DidNavigateMainFrame(host); |
| 1186 // Commit to SiteInstance should be delayed until RenderView commit. | 1209 // Commit to SiteInstance should be delayed until RenderView commit. |
| 1187 EXPECT_EQ(host, manager.current_host()); | 1210 EXPECT_EQ(host, manager.current_host()); |
| 1188 ASSERT_TRUE(host); | 1211 ASSERT_TRUE(host); |
| 1189 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 1212 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 1190 HasSite()); | 1213 HasSite()); |
| 1191 | 1214 |
| 1192 // 2) Navigate to a different domain. ------------------------- | 1215 // 2) Navigate to a different domain. ------------------------- |
| 1193 // Guests stay in the same process on navigation. | 1216 // Guests stay in the same process on navigation. |
| 1194 const GURL kUrl2("http://www.chromium.org"); | 1217 const GURL kUrl2("http://www.chromium.org"); |
| 1195 NavigationEntryImpl entry2( | 1218 NavigationEntryImpl entry2( |
| 1196 NULL /* instance */, -1 /* page_id */, kUrl2, | 1219 NULL /* instance */, -1 /* page_id */, kUrl2, |
| 1197 Referrer(kUrl1, WebKit::WebReferrerPolicyDefault), | 1220 Referrer(kUrl1, WebKit::WebReferrerPolicyDefault), |
| 1198 string16() /* title */, PAGE_TRANSITION_LINK, | 1221 string16() /* title */, PAGE_TRANSITION_LINK, |
| 1199 true /* is_renderer_init */); | 1222 true /* is_renderer_init */); |
| 1200 host = manager.Navigate(entry2); | 1223 host = manager.Navigate(entry2, false); |
| 1201 | 1224 |
| 1202 // The RenderViewHost created in Init will be reused. | 1225 // The RenderViewHost created in Init will be reused. |
| 1203 EXPECT_EQ(host, manager.current_host()); | 1226 EXPECT_EQ(host, manager.current_host()); |
| 1204 EXPECT_FALSE(manager.pending_render_view_host()); | 1227 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1205 | 1228 |
| 1206 // Commit. | 1229 // Commit. |
| 1207 manager.DidNavigateMainFrame(host); | 1230 manager.DidNavigateMainFrame(host); |
| 1208 EXPECT_EQ(host, manager.current_host()); | 1231 EXPECT_EQ(host, manager.current_host()); |
| 1209 ASSERT_TRUE(host); | 1232 ASSERT_TRUE(host); |
| 1210 EXPECT_EQ(static_cast<SiteInstanceImpl*>(host->GetSiteInstance()), | 1233 EXPECT_EQ(static_cast<SiteInstanceImpl*>(host->GetSiteInstance()), |
| 1211 instance); | 1234 instance); |
| 1212 } | 1235 } |
| 1213 | 1236 |
| 1214 } // namespace content | 1237 } // namespace content |
| OLD | NEW |