| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 6 #include "content/browser/frame_host/navigation_controller_impl.h" | 6 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 7 #include "content/browser/frame_host/navigation_entry_impl.h" | 7 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 8 #include "content/browser/frame_host/render_frame_host_manager.h" | 8 #include "content/browser/frame_host/render_frame_host_manager.h" |
| 9 #include "content/browser/renderer_host/test_render_view_host.h" | 9 #include "content/browser/renderer_host/test_render_view_host.h" |
| 10 #include "content/browser/site_instance_impl.h" | 10 #include "content/browser/site_instance_impl.h" |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 TEST_F(RenderFrameHostManagerTest, FilterMessagesWhileSwappedOut) { | 253 TEST_F(RenderFrameHostManagerTest, FilterMessagesWhileSwappedOut) { |
| 254 const GURL kChromeURL("chrome://foo"); | 254 const GURL kChromeURL("chrome://foo"); |
| 255 const GURL kDestUrl("http://www.google.com/"); | 255 const GURL kDestUrl("http://www.google.com/"); |
| 256 | 256 |
| 257 // Navigate our first tab to a chrome url and then to the destination. | 257 // Navigate our first tab to a chrome url and then to the destination. |
| 258 NavigateActiveAndCommit(kChromeURL); | 258 NavigateActiveAndCommit(kChromeURL); |
| 259 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( | 259 TestRenderViewHost* ntp_rvh = static_cast<TestRenderViewHost*>( |
| 260 contents()->GetRenderManagerForTesting()->current_host()); | 260 contents()->GetRenderManagerForTesting()->current_host()); |
| 261 | 261 |
| 262 // Send an update title message and make sure it works. | 262 // Send an update title message and make sure it works. |
| 263 const string16 ntp_title = ASCIIToUTF16("NTP Title"); | 263 const base::string16 ntp_title = ASCIIToUTF16("NTP Title"); |
| 264 blink::WebTextDirection direction = blink::WebTextDirectionLeftToRight; | 264 blink::WebTextDirection direction = blink::WebTextDirectionLeftToRight; |
| 265 EXPECT_TRUE(ntp_rvh->OnMessageReceived( | 265 EXPECT_TRUE(ntp_rvh->OnMessageReceived( |
| 266 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 0, ntp_title, direction))); | 266 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 0, ntp_title, direction))); |
| 267 EXPECT_EQ(ntp_title, contents()->GetTitle()); | 267 EXPECT_EQ(ntp_title, contents()->GetTitle()); |
| 268 | 268 |
| 269 // Navigate to a cross-site URL. | 269 // Navigate to a cross-site URL. |
| 270 contents()->GetController().LoadURL( | 270 contents()->GetController().LoadURL( |
| 271 kDestUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); | 271 kDestUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| 272 EXPECT_TRUE(contents()->cross_navigation_pending()); | 272 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 273 TestRenderViewHost* dest_rvh = static_cast<TestRenderViewHost*>( | 273 TestRenderViewHost* dest_rvh = static_cast<TestRenderViewHost*>( |
| 274 contents()->GetRenderManagerForTesting()->pending_render_view_host()); | 274 contents()->GetRenderManagerForTesting()->pending_render_view_host()); |
| 275 ASSERT_TRUE(dest_rvh); | 275 ASSERT_TRUE(dest_rvh); |
| 276 EXPECT_NE(ntp_rvh, dest_rvh); | 276 EXPECT_NE(ntp_rvh, dest_rvh); |
| 277 | 277 |
| 278 // Create one more view in the same SiteInstance where dest_rvh2 | 278 // Create one more view in the same SiteInstance where dest_rvh2 |
| 279 // exists so that it doesn't get deleted on navigation to another | 279 // exists so that it doesn't get deleted on navigation to another |
| 280 // site. | 280 // site. |
| 281 static_cast<SiteInstanceImpl*>(ntp_rvh->GetSiteInstance())-> | 281 static_cast<SiteInstanceImpl*>(ntp_rvh->GetSiteInstance())-> |
| 282 increment_active_view_count(); | 282 increment_active_view_count(); |
| 283 | 283 |
| 284 // BeforeUnload finishes. | 284 // BeforeUnload finishes. |
| 285 ntp_rvh->SendShouldCloseACK(true); | 285 ntp_rvh->SendShouldCloseACK(true); |
| 286 | 286 |
| 287 // Assume SwapOutACK times out, so the dest_rvh proceeds and commits. | 287 // Assume SwapOutACK times out, so the dest_rvh proceeds and commits. |
| 288 dest_rvh->SendNavigate(101, kDestUrl); | 288 dest_rvh->SendNavigate(101, kDestUrl); |
| 289 | 289 |
| 290 // The new RVH should be able to update its title. | 290 // The new RVH should be able to update its title. |
| 291 const string16 dest_title = ASCIIToUTF16("Google"); | 291 const base::string16 dest_title = ASCIIToUTF16("Google"); |
| 292 EXPECT_TRUE(dest_rvh->OnMessageReceived( | 292 EXPECT_TRUE(dest_rvh->OnMessageReceived( |
| 293 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 101, dest_title, | 293 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 101, dest_title, |
| 294 direction))); | 294 direction))); |
| 295 EXPECT_EQ(dest_title, contents()->GetTitle()); | 295 EXPECT_EQ(dest_title, contents()->GetTitle()); |
| 296 | 296 |
| 297 // The old renderer, being slow, now updates the title. It should be filtered | 297 // The old renderer, being slow, now updates the title. It should be filtered |
| 298 // out and not take effect. | 298 // out and not take effect. |
| 299 EXPECT_TRUE(ntp_rvh->is_swapped_out()); | 299 EXPECT_TRUE(ntp_rvh->is_swapped_out()); |
| 300 EXPECT_TRUE(ntp_rvh->OnMessageReceived( | 300 EXPECT_TRUE(ntp_rvh->OnMessageReceived( |
| 301 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 0, ntp_title, direction))); | 301 ViewHostMsg_UpdateTitle(rvh()->GetRoutingID(), 0, ntp_title, direction))); |
| 302 EXPECT_EQ(dest_title, contents()->GetTitle()); | 302 EXPECT_EQ(dest_title, contents()->GetTitle()); |
| 303 | 303 |
| 304 // We cannot filter out synchronous IPC messages, because the renderer would | 304 // We cannot filter out synchronous IPC messages, because the renderer would |
| 305 // be left waiting for a reply. We pick RunBeforeUnloadConfirm as an example | 305 // be left waiting for a reply. We pick RunBeforeUnloadConfirm as an example |
| 306 // that can run easily within a unit test, and that needs to receive a reply | 306 // that can run easily within a unit test, and that needs to receive a reply |
| 307 // without showing an actual dialog. | 307 // without showing an actual dialog. |
| 308 MockRenderProcessHost* ntp_process_host = | 308 MockRenderProcessHost* ntp_process_host = |
| 309 static_cast<MockRenderProcessHost*>(ntp_rvh->GetProcess()); | 309 static_cast<MockRenderProcessHost*>(ntp_rvh->GetProcess()); |
| 310 ntp_process_host->sink().ClearMessages(); | 310 ntp_process_host->sink().ClearMessages(); |
| 311 const string16 msg = ASCIIToUTF16("Message"); | 311 const base::string16 msg = ASCIIToUTF16("Message"); |
| 312 bool result = false; | 312 bool result = false; |
| 313 string16 unused; | 313 base::string16 unused; |
| 314 ViewHostMsg_RunBeforeUnloadConfirm before_unload_msg( | 314 ViewHostMsg_RunBeforeUnloadConfirm before_unload_msg( |
| 315 rvh()->GetRoutingID(), kChromeURL, msg, false, &result, &unused); | 315 rvh()->GetRoutingID(), kChromeURL, msg, false, &result, &unused); |
| 316 // Enable pumping for check in BrowserMessageFilter::CheckCanDispatchOnUI. | 316 // Enable pumping for check in BrowserMessageFilter::CheckCanDispatchOnUI. |
| 317 before_unload_msg.EnableMessagePumping(); | 317 before_unload_msg.EnableMessagePumping(); |
| 318 EXPECT_TRUE(ntp_rvh->OnMessageReceived(before_unload_msg)); | 318 EXPECT_TRUE(ntp_rvh->OnMessageReceived(before_unload_msg)); |
| 319 EXPECT_TRUE(ntp_process_host->sink().GetUniqueMessageMatching(IPC_REPLY_ID)); | 319 EXPECT_TRUE(ntp_process_host->sink().GetUniqueMessageMatching(IPC_REPLY_ID)); |
| 320 | 320 |
| 321 // Also test RunJavaScriptMessage. | 321 // Also test RunJavaScriptMessage. |
| 322 ntp_process_host->sink().ClearMessages(); | 322 ntp_process_host->sink().ClearMessages(); |
| 323 ViewHostMsg_RunJavaScriptMessage js_msg( | 323 ViewHostMsg_RunJavaScriptMessage js_msg( |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 web_contents.get()); | 597 web_contents.get()); |
| 598 | 598 |
| 599 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 599 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 600 | 600 |
| 601 RenderViewHost* host; | 601 RenderViewHost* host; |
| 602 | 602 |
| 603 // 1) The first navigation. -------------------------- | 603 // 1) The first navigation. -------------------------- |
| 604 const GURL kUrl1("http://www.google.com/"); | 604 const GURL kUrl1("http://www.google.com/"); |
| 605 NavigationEntryImpl entry1( | 605 NavigationEntryImpl entry1( |
| 606 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 606 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
| 607 string16() /* title */, PAGE_TRANSITION_TYPED, | 607 base::string16() /* title */, PAGE_TRANSITION_TYPED, |
| 608 false /* is_renderer_init */); | 608 false /* is_renderer_init */); |
| 609 host = manager.Navigate(entry1); | 609 host = manager.Navigate(entry1); |
| 610 | 610 |
| 611 // The RenderViewHost created in Init will be reused. | 611 // The RenderViewHost created in Init will be reused. |
| 612 EXPECT_TRUE(host == manager.current_host()); | 612 EXPECT_TRUE(host == manager.current_host()); |
| 613 EXPECT_FALSE(manager.pending_render_view_host()); | 613 EXPECT_FALSE(manager.pending_render_view_host()); |
| 614 | 614 |
| 615 // Commit. | 615 // Commit. |
| 616 manager.DidNavigateMainFrame(host); | 616 manager.DidNavigateMainFrame(host); |
| 617 // Commit to SiteInstance should be delayed until RenderView commit. | 617 // Commit to SiteInstance should be delayed until RenderView commit. |
| 618 EXPECT_TRUE(host == manager.current_host()); | 618 EXPECT_TRUE(host == manager.current_host()); |
| 619 ASSERT_TRUE(host); | 619 ASSERT_TRUE(host); |
| 620 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 620 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 621 HasSite()); | 621 HasSite()); |
| 622 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 622 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| 623 | 623 |
| 624 // 2) Navigate to next site. ------------------------- | 624 // 2) Navigate to next site. ------------------------- |
| 625 const GURL kUrl2("http://www.google.com/foo"); | 625 const GURL kUrl2("http://www.google.com/foo"); |
| 626 NavigationEntryImpl entry2( | 626 NavigationEntryImpl entry2( |
| 627 NULL /* instance */, -1 /* page_id */, kUrl2, | 627 NULL /* instance */, -1 /* page_id */, kUrl2, |
| 628 Referrer(kUrl1, blink::WebReferrerPolicyDefault), | 628 Referrer(kUrl1, blink::WebReferrerPolicyDefault), |
| 629 string16() /* title */, PAGE_TRANSITION_LINK, | 629 base::string16() /* title */, PAGE_TRANSITION_LINK, |
| 630 true /* is_renderer_init */); | 630 true /* is_renderer_init */); |
| 631 host = manager.Navigate(entry2); | 631 host = manager.Navigate(entry2); |
| 632 | 632 |
| 633 // The RenderViewHost created in Init will be reused. | 633 // The RenderViewHost created in Init will be reused. |
| 634 EXPECT_TRUE(host == manager.current_host()); | 634 EXPECT_TRUE(host == manager.current_host()); |
| 635 EXPECT_FALSE(manager.pending_render_view_host()); | 635 EXPECT_FALSE(manager.pending_render_view_host()); |
| 636 | 636 |
| 637 // Commit. | 637 // Commit. |
| 638 manager.DidNavigateMainFrame(host); | 638 manager.DidNavigateMainFrame(host); |
| 639 EXPECT_TRUE(host == manager.current_host()); | 639 EXPECT_TRUE(host == manager.current_host()); |
| 640 ASSERT_TRUE(host); | 640 ASSERT_TRUE(host); |
| 641 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 641 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 642 HasSite()); | 642 HasSite()); |
| 643 | 643 |
| 644 // 3) Cross-site navigate to next site. -------------- | 644 // 3) Cross-site navigate to next site. -------------- |
| 645 const GURL kUrl3("http://webkit.org/"); | 645 const GURL kUrl3("http://webkit.org/"); |
| 646 NavigationEntryImpl entry3( | 646 NavigationEntryImpl entry3( |
| 647 NULL /* instance */, -1 /* page_id */, kUrl3, | 647 NULL /* instance */, -1 /* page_id */, kUrl3, |
| 648 Referrer(kUrl2, blink::WebReferrerPolicyDefault), | 648 Referrer(kUrl2, blink::WebReferrerPolicyDefault), |
| 649 string16() /* title */, PAGE_TRANSITION_LINK, | 649 base::string16() /* title */, PAGE_TRANSITION_LINK, |
| 650 false /* is_renderer_init */); | 650 false /* is_renderer_init */); |
| 651 host = manager.Navigate(entry3); | 651 host = manager.Navigate(entry3); |
| 652 | 652 |
| 653 // A new RenderViewHost should be created. | 653 // A new RenderViewHost should be created. |
| 654 EXPECT_TRUE(manager.pending_render_view_host()); | 654 EXPECT_TRUE(manager.pending_render_view_host()); |
| 655 ASSERT_EQ(host, manager.pending_render_view_host()); | 655 ASSERT_EQ(host, manager.pending_render_view_host()); |
| 656 | 656 |
| 657 notifications.Reset(); | 657 notifications.Reset(); |
| 658 | 658 |
| 659 // Commit. | 659 // Commit. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 686 | 686 |
| 687 // Create. | 687 // Create. |
| 688 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), | 688 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
| 689 web_contents.get()); | 689 web_contents.get()); |
| 690 | 690 |
| 691 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 691 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 692 | 692 |
| 693 // 1) The first navigation. -------------------------- | 693 // 1) The first navigation. -------------------------- |
| 694 const GURL kUrl1("http://www.google.com/"); | 694 const GURL kUrl1("http://www.google.com/"); |
| 695 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 695 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 696 Referrer(), string16() /* title */, | 696 Referrer(), base::string16() /* title */, |
| 697 PAGE_TRANSITION_TYPED, | 697 PAGE_TRANSITION_TYPED, |
| 698 false /* is_renderer_init */); | 698 false /* is_renderer_init */); |
| 699 RenderViewHost* host = manager.Navigate(entry1); | 699 RenderViewHost* host = manager.Navigate(entry1); |
| 700 | 700 |
| 701 // The RenderViewHost created in Init will be reused. | 701 // The RenderViewHost created in Init will be reused. |
| 702 EXPECT_TRUE(host == manager.current_host()); | 702 EXPECT_TRUE(host == manager.current_host()); |
| 703 EXPECT_FALSE(manager.pending_render_view_host()); | 703 EXPECT_FALSE(manager.pending_render_view_host()); |
| 704 | 704 |
| 705 // We should observe a notification. | 705 // We should observe a notification. |
| 706 EXPECT_TRUE( | 706 EXPECT_TRUE( |
| 707 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 707 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 708 notifications.Reset(); | 708 notifications.Reset(); |
| 709 | 709 |
| 710 // Commit. | 710 // Commit. |
| 711 manager.DidNavigateMainFrame(host); | 711 manager.DidNavigateMainFrame(host); |
| 712 | 712 |
| 713 // Commit to SiteInstance should be delayed until RenderView commit. | 713 // Commit to SiteInstance should be delayed until RenderView commit. |
| 714 EXPECT_TRUE(host == manager.current_host()); | 714 EXPECT_TRUE(host == manager.current_host()); |
| 715 ASSERT_TRUE(host); | 715 ASSERT_TRUE(host); |
| 716 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 716 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 717 HasSite()); | 717 HasSite()); |
| 718 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 718 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| 719 | 719 |
| 720 // 2) Cross-site navigate to next site. ------------------------- | 720 // 2) Cross-site navigate to next site. ------------------------- |
| 721 const GURL kUrl2("http://www.example.com"); | 721 const GURL kUrl2("http://www.example.com"); |
| 722 NavigationEntryImpl entry2( | 722 NavigationEntryImpl entry2( |
| 723 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), | 723 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), |
| 724 string16() /* title */, PAGE_TRANSITION_TYPED, | 724 base::string16() /* title */, PAGE_TRANSITION_TYPED, |
| 725 false /* is_renderer_init */); | 725 false /* is_renderer_init */); |
| 726 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( | 726 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( |
| 727 manager.Navigate(entry2)); | 727 manager.Navigate(entry2)); |
| 728 int host2_process_id = host2->GetProcess()->GetID(); | 728 int host2_process_id = host2->GetProcess()->GetID(); |
| 729 | 729 |
| 730 // A new RenderViewHost should be created. | 730 // A new RenderViewHost should be created. |
| 731 EXPECT_TRUE(manager.pending_render_view_host()); | 731 EXPECT_TRUE(manager.pending_render_view_host()); |
| 732 ASSERT_EQ(host2, manager.pending_render_view_host()); | 732 ASSERT_EQ(host2, manager.pending_render_view_host()); |
| 733 EXPECT_NE(host2, host); | 733 EXPECT_NE(host2, host); |
| 734 | 734 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 765 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( | 765 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( |
| 766 manager.current_host())->is_swapped_out()); | 766 manager.current_host())->is_swapped_out()); |
| 767 EXPECT_EQ(host2, manager.pending_render_view_host()); | 767 EXPECT_EQ(host2, manager.pending_render_view_host()); |
| 768 // There should be still no navigation messages being sent. | 768 // There should be still no navigation messages being sent. |
| 769 EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( | 769 EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( |
| 770 ViewMsg_Navigate::ID)); | 770 ViewMsg_Navigate::ID)); |
| 771 | 771 |
| 772 // 3) Cross-site navigate to next site before 2) has committed. -------------- | 772 // 3) Cross-site navigate to next site before 2) has committed. -------------- |
| 773 const GURL kUrl3("http://webkit.org/"); | 773 const GURL kUrl3("http://webkit.org/"); |
| 774 NavigationEntryImpl entry3(NULL /* instance */, -1 /* page_id */, kUrl3, | 774 NavigationEntryImpl entry3(NULL /* instance */, -1 /* page_id */, kUrl3, |
| 775 Referrer(), string16() /* title */, | 775 Referrer(), base::string16() /* title */, |
| 776 PAGE_TRANSITION_TYPED, | 776 PAGE_TRANSITION_TYPED, |
| 777 false /* is_renderer_init */); | 777 false /* is_renderer_init */); |
| 778 test_process_host->sink().ClearMessages(); | 778 test_process_host->sink().ClearMessages(); |
| 779 RenderViewHost* host3 = manager.Navigate(entry3); | 779 RenderViewHost* host3 = manager.Navigate(entry3); |
| 780 | 780 |
| 781 // A new RenderViewHost should be created. host2 is now deleted. | 781 // A new RenderViewHost should be created. host2 is now deleted. |
| 782 EXPECT_TRUE(manager.pending_render_view_host()); | 782 EXPECT_TRUE(manager.pending_render_view_host()); |
| 783 ASSERT_EQ(host3, manager.pending_render_view_host()); | 783 ASSERT_EQ(host3, manager.pending_render_view_host()); |
| 784 EXPECT_NE(host3, host); | 784 EXPECT_NE(host3, host); |
| 785 EXPECT_NE(host3->GetProcess()->GetID(), host2_process_id); | 785 EXPECT_NE(host3->GetProcess()->GetID(), host2_process_id); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 scoped_ptr<TestWebContents> web_contents( | 829 scoped_ptr<TestWebContents> web_contents( |
| 830 TestWebContents::Create(browser_context(), instance)); | 830 TestWebContents::Create(browser_context(), instance)); |
| 831 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), | 831 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
| 832 web_contents.get()); | 832 web_contents.get()); |
| 833 | 833 |
| 834 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 834 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 835 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); | 835 EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); |
| 836 | 836 |
| 837 const GURL kUrl("chrome://foo"); | 837 const GURL kUrl("chrome://foo"); |
| 838 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, | 838 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, |
| 839 Referrer(), string16() /* title */, | 839 Referrer(), base::string16() /* title */, |
| 840 PAGE_TRANSITION_TYPED, | 840 PAGE_TRANSITION_TYPED, |
| 841 false /* is_renderer_init */); | 841 false /* is_renderer_init */); |
| 842 RenderViewHost* host = manager.Navigate(entry); | 842 RenderViewHost* host = manager.Navigate(entry); |
| 843 | 843 |
| 844 // We commit the pending RenderViewHost immediately because the previous | 844 // We commit the pending RenderViewHost immediately because the previous |
| 845 // RenderViewHost was not live. We test a case where it is live in | 845 // RenderViewHost was not live. We test a case where it is live in |
| 846 // WebUIInNewTab. | 846 // WebUIInNewTab. |
| 847 EXPECT_TRUE(host); | 847 EXPECT_TRUE(host); |
| 848 EXPECT_EQ(host, manager.current_host()); | 848 EXPECT_EQ(host, manager.current_host()); |
| 849 EXPECT_FALSE(manager.pending_render_view_host()); | 849 EXPECT_FALSE(manager.pending_render_view_host()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 873 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); | 873 SiteInstance* blank_instance = SiteInstance::Create(browser_context()); |
| 874 | 874 |
| 875 // Create a blank tab. | 875 // Create a blank tab. |
| 876 scoped_ptr<TestWebContents> web_contents1( | 876 scoped_ptr<TestWebContents> web_contents1( |
| 877 TestWebContents::Create(browser_context(), blank_instance)); | 877 TestWebContents::Create(browser_context(), blank_instance)); |
| 878 RenderFrameHostManager manager1(web_contents1.get(), web_contents1.get(), | 878 RenderFrameHostManager manager1(web_contents1.get(), web_contents1.get(), |
| 879 web_contents1.get()); | 879 web_contents1.get()); |
| 880 manager1.Init( | 880 manager1.Init( |
| 881 browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 881 browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 882 // Test the case that new RVH is considered live. | 882 // Test the case that new RVH is considered live. |
| 883 manager1.current_host()->CreateRenderView(string16(), -1, -1); | 883 manager1.current_host()->CreateRenderView(base::string16(), -1, -1); |
| 884 | 884 |
| 885 // Navigate to a WebUI page. | 885 // Navigate to a WebUI page. |
| 886 const GURL kUrl1("chrome://foo"); | 886 const GURL kUrl1("chrome://foo"); |
| 887 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 887 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 888 Referrer(), string16() /* title */, | 888 Referrer(), base::string16() /* title */, |
| 889 PAGE_TRANSITION_TYPED, | 889 PAGE_TRANSITION_TYPED, |
| 890 false /* is_renderer_init */); | 890 false /* is_renderer_init */); |
| 891 RenderViewHost* host1 = manager1.Navigate(entry1); | 891 RenderViewHost* host1 = manager1.Navigate(entry1); |
| 892 | 892 |
| 893 // We should have a pending navigation to the WebUI RenderViewHost. | 893 // We should have a pending navigation to the WebUI RenderViewHost. |
| 894 // It should already have bindings. | 894 // It should already have bindings. |
| 895 EXPECT_EQ(host1, manager1.pending_render_view_host()); | 895 EXPECT_EQ(host1, manager1.pending_render_view_host()); |
| 896 EXPECT_NE(host1, manager1.current_host()); | 896 EXPECT_NE(host1, manager1.current_host()); |
| 897 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 897 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 898 | 898 |
| 899 // Commit and ensure we still have bindings. | 899 // Commit and ensure we still have bindings. |
| 900 manager1.DidNavigateMainFrame(host1); | 900 manager1.DidNavigateMainFrame(host1); |
| 901 SiteInstance* webui_instance = host1->GetSiteInstance(); | 901 SiteInstance* webui_instance = host1->GetSiteInstance(); |
| 902 EXPECT_EQ(host1, manager1.current_host()); | 902 EXPECT_EQ(host1, manager1.current_host()); |
| 903 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 903 EXPECT_TRUE(host1->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 904 | 904 |
| 905 // Now simulate clicking a link that opens in a new tab. | 905 // Now simulate clicking a link that opens in a new tab. |
| 906 scoped_ptr<TestWebContents> web_contents2( | 906 scoped_ptr<TestWebContents> web_contents2( |
| 907 TestWebContents::Create(browser_context(), webui_instance)); | 907 TestWebContents::Create(browser_context(), webui_instance)); |
| 908 RenderFrameHostManager manager2(web_contents2.get(), web_contents2.get(), | 908 RenderFrameHostManager manager2(web_contents2.get(), web_contents2.get(), |
| 909 web_contents2.get()); | 909 web_contents2.get()); |
| 910 manager2.Init( | 910 manager2.Init( |
| 911 browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 911 browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 912 // Make sure the new RVH is considered live. This is usually done in | 912 // Make sure the new RVH is considered live. This is usually done in |
| 913 // RenderWidgetHost::Init when opening a new tab from a link. | 913 // RenderWidgetHost::Init when opening a new tab from a link. |
| 914 manager2.current_host()->CreateRenderView(string16(), -1, -1); | 914 manager2.current_host()->CreateRenderView(base::string16(), -1, -1); |
| 915 | 915 |
| 916 const GURL kUrl2("chrome://foo/bar"); | 916 const GURL kUrl2("chrome://foo/bar"); |
| 917 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, | 917 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, |
| 918 Referrer(), string16() /* title */, | 918 Referrer(), base::string16() /* title */, |
| 919 PAGE_TRANSITION_LINK, | 919 PAGE_TRANSITION_LINK, |
| 920 true /* is_renderer_init */); | 920 true /* is_renderer_init */); |
| 921 RenderViewHost* host2 = manager2.Navigate(entry2); | 921 RenderViewHost* host2 = manager2.Navigate(entry2); |
| 922 | 922 |
| 923 // No cross-process transition happens because we are already in the right | 923 // No cross-process transition happens because we are already in the right |
| 924 // SiteInstance. We should grant bindings immediately. | 924 // SiteInstance. We should grant bindings immediately. |
| 925 EXPECT_EQ(host2, manager2.current_host()); | 925 EXPECT_EQ(host2, manager2.current_host()); |
| 926 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); | 926 EXPECT_TRUE(host2->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); |
| 927 | 927 |
| 928 manager2.DidNavigateMainFrame(host2); | 928 manager2.DidNavigateMainFrame(host2); |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 TestRenderViewHost* rvh1 = test_rvh(); | 1100 TestRenderViewHost* rvh1 = test_rvh(); |
| 1101 | 1101 |
| 1102 // Create a new tab as an opener for the main tab. | 1102 // Create a new tab as an opener for the main tab. |
| 1103 scoped_ptr<TestWebContents> opener1( | 1103 scoped_ptr<TestWebContents> opener1( |
| 1104 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); | 1104 TestWebContents::Create(browser_context(), rvh1->GetSiteInstance())); |
| 1105 RenderFrameHostManager* opener1_manager = | 1105 RenderFrameHostManager* opener1_manager = |
| 1106 opener1->GetRenderManagerForTesting(); | 1106 opener1->GetRenderManagerForTesting(); |
| 1107 contents()->SetOpener(opener1.get()); | 1107 contents()->SetOpener(opener1.get()); |
| 1108 | 1108 |
| 1109 // Make sure the new opener RVH is considered live. | 1109 // Make sure the new opener RVH is considered live. |
| 1110 opener1_manager->current_host()->CreateRenderView(string16(), -1, -1); | 1110 opener1_manager->current_host()->CreateRenderView(base::string16(), -1, -1); |
| 1111 | 1111 |
| 1112 // Use a cross-process navigation in the opener to swap out the old RVH. | 1112 // Use a cross-process navigation in the opener to swap out the old RVH. |
| 1113 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( | 1113 EXPECT_FALSE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1114 rvh1->GetSiteInstance())); | 1114 rvh1->GetSiteInstance())); |
| 1115 opener1->NavigateAndCommit(kUrl2); | 1115 opener1->NavigateAndCommit(kUrl2); |
| 1116 EXPECT_TRUE(opener1_manager->GetSwappedOutRenderViewHost( | 1116 EXPECT_TRUE(opener1_manager->GetSwappedOutRenderViewHost( |
| 1117 rvh1->GetSiteInstance())); | 1117 rvh1->GetSiteInstance())); |
| 1118 | 1118 |
| 1119 // Fake a process crash. | 1119 // Fake a process crash. |
| 1120 RenderProcessHost::RendererClosedDetails details( | 1120 RenderProcessHost::RendererClosedDetails details( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 web_contents.get()); | 1195 web_contents.get()); |
| 1196 | 1196 |
| 1197 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1197 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 1198 | 1198 |
| 1199 RenderViewHost* host; | 1199 RenderViewHost* host; |
| 1200 | 1200 |
| 1201 // 1) The first navigation. -------------------------- | 1201 // 1) The first navigation. -------------------------- |
| 1202 const GURL kUrl1("http://www.google.com/"); | 1202 const GURL kUrl1("http://www.google.com/"); |
| 1203 NavigationEntryImpl entry1( | 1203 NavigationEntryImpl entry1( |
| 1204 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 1204 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
| 1205 string16() /* title */, PAGE_TRANSITION_TYPED, | 1205 base::string16() /* title */, PAGE_TRANSITION_TYPED, |
| 1206 false /* is_renderer_init */); | 1206 false /* is_renderer_init */); |
| 1207 host = manager.Navigate(entry1); | 1207 host = manager.Navigate(entry1); |
| 1208 | 1208 |
| 1209 // The RenderViewHost created in Init will be reused. | 1209 // The RenderViewHost created in Init will be reused. |
| 1210 EXPECT_TRUE(host == manager.current_host()); | 1210 EXPECT_TRUE(host == manager.current_host()); |
| 1211 EXPECT_FALSE(manager.pending_render_view_host()); | 1211 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1212 EXPECT_EQ(manager.current_host()->GetSiteInstance(), instance); | 1212 EXPECT_EQ(manager.current_host()->GetSiteInstance(), instance); |
| 1213 | 1213 |
| 1214 // Commit. | 1214 // Commit. |
| 1215 manager.DidNavigateMainFrame(host); | 1215 manager.DidNavigateMainFrame(host); |
| 1216 // Commit to SiteInstance should be delayed until RenderView commit. | 1216 // Commit to SiteInstance should be delayed until RenderView commit. |
| 1217 EXPECT_EQ(host, manager.current_host()); | 1217 EXPECT_EQ(host, manager.current_host()); |
| 1218 ASSERT_TRUE(host); | 1218 ASSERT_TRUE(host); |
| 1219 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 1219 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 1220 HasSite()); | 1220 HasSite()); |
| 1221 | 1221 |
| 1222 // 2) Navigate to a different domain. ------------------------- | 1222 // 2) Navigate to a different domain. ------------------------- |
| 1223 // Guests stay in the same process on navigation. | 1223 // Guests stay in the same process on navigation. |
| 1224 const GURL kUrl2("http://www.chromium.org"); | 1224 const GURL kUrl2("http://www.chromium.org"); |
| 1225 NavigationEntryImpl entry2( | 1225 NavigationEntryImpl entry2( |
| 1226 NULL /* instance */, -1 /* page_id */, kUrl2, | 1226 NULL /* instance */, -1 /* page_id */, kUrl2, |
| 1227 Referrer(kUrl1, blink::WebReferrerPolicyDefault), | 1227 Referrer(kUrl1, blink::WebReferrerPolicyDefault), |
| 1228 string16() /* title */, PAGE_TRANSITION_LINK, | 1228 base::string16() /* title */, PAGE_TRANSITION_LINK, |
| 1229 true /* is_renderer_init */); | 1229 true /* is_renderer_init */); |
| 1230 host = manager.Navigate(entry2); | 1230 host = manager.Navigate(entry2); |
| 1231 | 1231 |
| 1232 // The RenderViewHost created in Init will be reused. | 1232 // The RenderViewHost created in Init will be reused. |
| 1233 EXPECT_EQ(host, manager.current_host()); | 1233 EXPECT_EQ(host, manager.current_host()); |
| 1234 EXPECT_FALSE(manager.pending_render_view_host()); | 1234 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1235 | 1235 |
| 1236 // Commit. | 1236 // Commit. |
| 1237 manager.DidNavigateMainFrame(host); | 1237 manager.DidNavigateMainFrame(host); |
| 1238 EXPECT_EQ(host, manager.current_host()); | 1238 EXPECT_EQ(host, manager.current_host()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1257 | 1257 |
| 1258 // Create. | 1258 // Create. |
| 1259 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), | 1259 RenderFrameHostManager manager(web_contents.get(), web_contents.get(), |
| 1260 web_contents.get()); | 1260 web_contents.get()); |
| 1261 | 1261 |
| 1262 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1262 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 1263 | 1263 |
| 1264 // 1) The first navigation. -------------------------- | 1264 // 1) The first navigation. -------------------------- |
| 1265 const GURL kUrl1("http://www.google.com/"); | 1265 const GURL kUrl1("http://www.google.com/"); |
| 1266 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 1266 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 1267 Referrer(), string16() /* title */, | 1267 Referrer(), base::string16() /* title */, |
| 1268 PAGE_TRANSITION_TYPED, | 1268 PAGE_TRANSITION_TYPED, |
| 1269 false /* is_renderer_init */); | 1269 false /* is_renderer_init */); |
| 1270 RenderViewHost* host = manager.Navigate(entry1); | 1270 RenderViewHost* host = manager.Navigate(entry1); |
| 1271 | 1271 |
| 1272 // The RenderViewHost created in Init will be reused. | 1272 // The RenderViewHost created in Init will be reused. |
| 1273 EXPECT_EQ(host, manager.current_host()); | 1273 EXPECT_EQ(host, manager.current_host()); |
| 1274 EXPECT_FALSE(manager.pending_render_view_host()); | 1274 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1275 | 1275 |
| 1276 // We should observe a notification. | 1276 // We should observe a notification. |
| 1277 EXPECT_TRUE( | 1277 EXPECT_TRUE( |
| 1278 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 1278 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 1279 notifications.Reset(); | 1279 notifications.Reset(); |
| 1280 | 1280 |
| 1281 // Commit. | 1281 // Commit. |
| 1282 manager.DidNavigateMainFrame(host); | 1282 manager.DidNavigateMainFrame(host); |
| 1283 | 1283 |
| 1284 // Commit to SiteInstance should be delayed until RenderView commit. | 1284 // Commit to SiteInstance should be delayed until RenderView commit. |
| 1285 EXPECT_EQ(host, manager.current_host()); | 1285 EXPECT_EQ(host, manager.current_host()); |
| 1286 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 1286 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 1287 HasSite()); | 1287 HasSite()); |
| 1288 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 1288 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| 1289 | 1289 |
| 1290 // 2) Cross-site navigate to next site. ------------------------- | 1290 // 2) Cross-site navigate to next site. ------------------------- |
| 1291 const GURL kUrl2("http://www.example.com"); | 1291 const GURL kUrl2("http://www.example.com"); |
| 1292 NavigationEntryImpl entry2( | 1292 NavigationEntryImpl entry2( |
| 1293 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), | 1293 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), |
| 1294 string16() /* title */, PAGE_TRANSITION_TYPED, | 1294 base::string16() /* title */, PAGE_TRANSITION_TYPED, |
| 1295 false /* is_renderer_init */); | 1295 false /* is_renderer_init */); |
| 1296 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( | 1296 RenderViewHostImpl* host2 = static_cast<RenderViewHostImpl*>( |
| 1297 manager.Navigate(entry2)); | 1297 manager.Navigate(entry2)); |
| 1298 | 1298 |
| 1299 // A new RenderViewHost should be created. | 1299 // A new RenderViewHost should be created. |
| 1300 ASSERT_EQ(host2, manager.pending_render_view_host()); | 1300 ASSERT_EQ(host2, manager.pending_render_view_host()); |
| 1301 EXPECT_NE(host2, host); | 1301 EXPECT_NE(host2, host); |
| 1302 | 1302 |
| 1303 EXPECT_EQ(host, manager.current_host()); | 1303 EXPECT_EQ(host, manager.current_host()); |
| 1304 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( | 1304 EXPECT_FALSE(static_cast<RenderViewHostImpl*>( |
| 1305 manager.current_host())->is_swapped_out()); | 1305 manager.current_host())->is_swapped_out()); |
| 1306 EXPECT_EQ(host2, manager.pending_render_view_host()); | 1306 EXPECT_EQ(host2, manager.pending_render_view_host()); |
| 1307 | 1307 |
| 1308 // 3) Close the tab. ------------------------- | 1308 // 3) Close the tab. ------------------------- |
| 1309 notifications.ListenFor(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, | 1309 notifications.ListenFor(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED, |
| 1310 Source<RenderWidgetHost>(host2)); | 1310 Source<RenderWidgetHost>(host2)); |
| 1311 manager.ShouldClosePage(false, true, base::TimeTicks()); | 1311 manager.ShouldClosePage(false, true, base::TimeTicks()); |
| 1312 | 1312 |
| 1313 EXPECT_TRUE( | 1313 EXPECT_TRUE( |
| 1314 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); | 1314 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); |
| 1315 EXPECT_FALSE(manager.pending_render_view_host()); | 1315 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1316 EXPECT_EQ(host, manager.current_host()); | 1316 EXPECT_EQ(host, manager.current_host()); |
| 1317 } | 1317 } |
| 1318 | 1318 |
| 1319 } // namespace content | 1319 } // namespace content |
| OLD | NEW |