| 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 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 | 577 |
| 578 // Tests the Navigate function. We navigate three sites consecutively and check | 578 // Tests the Navigate function. We navigate three sites consecutively and check |
| 579 // how the pending/committed RenderViewHost are modified. | 579 // how the pending/committed RenderViewHost are modified. |
| 580 TEST_F(RenderViewHostManagerTest, Navigate) { | 580 TEST_F(RenderViewHostManagerTest, Navigate) { |
| 581 TestNotificationTracker notifications; | 581 TestNotificationTracker notifications; |
| 582 | 582 |
| 583 SiteInstance* instance = SiteInstance::Create(browser_context()); | 583 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 584 | 584 |
| 585 scoped_ptr<TestWebContents> web_contents( | 585 scoped_ptr<TestWebContents> web_contents( |
| 586 TestWebContents::Create(browser_context(), instance)); | 586 TestWebContents::Create(browser_context(), instance)); |
| 587 notifications.ListenFor( | 587 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| 588 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 588 Source<WebContents>(web_contents.get())); |
| 589 Source<NavigationController>(&web_contents->GetController())); | |
| 590 | 589 |
| 591 // Create. | 590 // Create. |
| 592 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 591 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 593 web_contents.get()); | 592 web_contents.get()); |
| 594 | 593 |
| 595 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 594 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 596 | 595 |
| 597 RenderViewHost* host; | 596 RenderViewHost* host; |
| 598 | 597 |
| 599 // 1) The first navigation. -------------------------- | 598 // 1) The first navigation. -------------------------- |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 // Commit. | 654 // Commit. |
| 656 manager.DidNavigateMainFrame(manager.pending_render_view_host()); | 655 manager.DidNavigateMainFrame(manager.pending_render_view_host()); |
| 657 EXPECT_TRUE(host == manager.current_host()); | 656 EXPECT_TRUE(host == manager.current_host()); |
| 658 ASSERT_TRUE(host); | 657 ASSERT_TRUE(host); |
| 659 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 658 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 660 HasSite()); | 659 HasSite()); |
| 661 // Check the pending RenderViewHost has been committed. | 660 // Check the pending RenderViewHost has been committed. |
| 662 EXPECT_FALSE(manager.pending_render_view_host()); | 661 EXPECT_FALSE(manager.pending_render_view_host()); |
| 663 | 662 |
| 664 // We should observe a notification. | 663 // We should observe a notification. |
| 665 EXPECT_TRUE(notifications.Check1AndReset( | 664 EXPECT_TRUE( |
| 666 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 665 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 667 } | 666 } |
| 668 | 667 |
| 669 // Tests the Navigate function. In this unit test we verify that the Navigate | 668 // Tests the Navigate function. In this unit test we verify that the Navigate |
| 670 // function can handle a new navigation event before the previous navigation | 669 // function can handle a new navigation event before the previous navigation |
| 671 // has been committed. This is also a regression test for | 670 // has been committed. This is also a regression test for |
| 672 // http://crbug.com/104600. | 671 // http://crbug.com/104600. |
| 673 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { | 672 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { |
| 674 TestNotificationTracker notifications; | 673 TestNotificationTracker notifications; |
| 675 | 674 |
| 676 SiteInstance* instance = SiteInstance::Create(browser_context()); | 675 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 677 | 676 |
| 678 scoped_ptr<TestWebContents> web_contents( | 677 scoped_ptr<TestWebContents> web_contents( |
| 679 TestWebContents::Create(browser_context(), instance)); | 678 TestWebContents::Create(browser_context(), instance)); |
| 680 notifications.ListenFor( | 679 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| 681 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 680 Source<WebContents>(web_contents.get())); |
| 682 Source<NavigationController>(&web_contents->GetController())); | |
| 683 | 681 |
| 684 // Create. | 682 // Create. |
| 685 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 683 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 686 web_contents.get()); | 684 web_contents.get()); |
| 687 | 685 |
| 688 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 686 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 689 | 687 |
| 690 // 1) The first navigation. -------------------------- | 688 // 1) The first navigation. -------------------------- |
| 691 const GURL kUrl1("http://www.google.com/"); | 689 const GURL kUrl1("http://www.google.com/"); |
| 692 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 690 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 693 Referrer(), string16() /* title */, | 691 Referrer(), string16() /* title */, |
| 694 PAGE_TRANSITION_TYPED, | 692 PAGE_TRANSITION_TYPED, |
| 695 false /* is_renderer_init */); | 693 false /* is_renderer_init */); |
| 696 RenderViewHost* host = manager.Navigate(entry1); | 694 RenderViewHost* host = manager.Navigate(entry1); |
| 697 | 695 |
| 698 // The RenderViewHost created in Init will be reused. | 696 // The RenderViewHost created in Init will be reused. |
| 699 EXPECT_TRUE(host == manager.current_host()); | 697 EXPECT_TRUE(host == manager.current_host()); |
| 700 EXPECT_FALSE(manager.pending_render_view_host()); | 698 EXPECT_FALSE(manager.pending_render_view_host()); |
| 701 | 699 |
| 702 // We should observe a notification. | 700 // We should observe a notification. |
| 703 EXPECT_TRUE(notifications.Check1AndReset( | 701 EXPECT_TRUE( |
| 704 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 702 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 705 notifications.Reset(); | 703 notifications.Reset(); |
| 706 | 704 |
| 707 // Commit. | 705 // Commit. |
| 708 manager.DidNavigateMainFrame(host); | 706 manager.DidNavigateMainFrame(host); |
| 709 | 707 |
| 710 // Commit to SiteInstance should be delayed until RenderView commit. | 708 // Commit to SiteInstance should be delayed until RenderView commit. |
| 711 EXPECT_TRUE(host == manager.current_host()); | 709 EXPECT_TRUE(host == manager.current_host()); |
| 712 ASSERT_TRUE(host); | 710 ASSERT_TRUE(host); |
| 713 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 711 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 714 HasSite()); | 712 HasSite()); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 // Commit. | 805 // Commit. |
| 808 manager.DidNavigateMainFrame(host3); | 806 manager.DidNavigateMainFrame(host3); |
| 809 EXPECT_TRUE(host3 == manager.current_host()); | 807 EXPECT_TRUE(host3 == manager.current_host()); |
| 810 ASSERT_TRUE(host3); | 808 ASSERT_TRUE(host3); |
| 811 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host3->GetSiteInstance())-> | 809 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host3->GetSiteInstance())-> |
| 812 HasSite()); | 810 HasSite()); |
| 813 // Check the pending RenderViewHost has been committed. | 811 // Check the pending RenderViewHost has been committed. |
| 814 EXPECT_FALSE(manager.pending_render_view_host()); | 812 EXPECT_FALSE(manager.pending_render_view_host()); |
| 815 | 813 |
| 816 // We should observe a notification. | 814 // We should observe a notification. |
| 817 EXPECT_TRUE(notifications.Check1AndReset( | 815 EXPECT_TRUE( |
| 818 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 816 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 819 } | 817 } |
| 820 | 818 |
| 821 // Tests WebUI creation. | 819 // Tests WebUI creation. |
| 822 TEST_F(RenderViewHostManagerTest, WebUI) { | 820 TEST_F(RenderViewHostManagerTest, WebUI) { |
| 823 set_should_create_webui(true); | 821 set_should_create_webui(true); |
| 824 SiteInstance* instance = SiteInstance::Create(browser_context()); | 822 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 825 | 823 |
| 826 scoped_ptr<TestWebContents> web_contents( | 824 scoped_ptr<TestWebContents> web_contents( |
| 827 TestWebContents::Create(browser_context(), instance)); | 825 TestWebContents::Create(browser_context(), instance)); |
| 828 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 826 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1235 // http://crbug.com/294697. | 1233 // http://crbug.com/294697. |
| 1236 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyClose) { | 1234 TEST_F(RenderViewHostManagerTest, NavigateWithEarlyClose) { |
| 1237 TestNotificationTracker notifications; | 1235 TestNotificationTracker notifications; |
| 1238 | 1236 |
| 1239 SiteInstance* instance = SiteInstance::Create(browser_context()); | 1237 SiteInstance* instance = SiteInstance::Create(browser_context()); |
| 1240 | 1238 |
| 1241 BeforeUnloadFiredWebContentsDelegate delegate; | 1239 BeforeUnloadFiredWebContentsDelegate delegate; |
| 1242 scoped_ptr<TestWebContents> web_contents( | 1240 scoped_ptr<TestWebContents> web_contents( |
| 1243 TestWebContents::Create(browser_context(), instance)); | 1241 TestWebContents::Create(browser_context(), instance)); |
| 1244 web_contents->SetDelegate(&delegate); | 1242 web_contents->SetDelegate(&delegate); |
| 1245 notifications.ListenFor( | 1243 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| 1246 NOTIFICATION_RENDER_VIEW_HOST_CHANGED, | 1244 Source<WebContents>(web_contents.get())); |
| 1247 Source<NavigationController>(&web_contents->GetController())); | |
| 1248 | 1245 |
| 1249 // Create. | 1246 // Create. |
| 1250 RenderViewHostManager manager(web_contents.get(), web_contents.get(), | 1247 RenderViewHostManager manager(web_contents.get(), web_contents.get(), |
| 1251 web_contents.get()); | 1248 web_contents.get()); |
| 1252 | 1249 |
| 1253 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); | 1250 manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); |
| 1254 | 1251 |
| 1255 // 1) The first navigation. -------------------------- | 1252 // 1) The first navigation. -------------------------- |
| 1256 const GURL kUrl1("http://www.google.com/"); | 1253 const GURL kUrl1("http://www.google.com/"); |
| 1257 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 1254 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 1258 Referrer(), string16() /* title */, | 1255 Referrer(), string16() /* title */, |
| 1259 PAGE_TRANSITION_TYPED, | 1256 PAGE_TRANSITION_TYPED, |
| 1260 false /* is_renderer_init */); | 1257 false /* is_renderer_init */); |
| 1261 RenderViewHost* host = manager.Navigate(entry1); | 1258 RenderViewHost* host = manager.Navigate(entry1); |
| 1262 | 1259 |
| 1263 // The RenderViewHost created in Init will be reused. | 1260 // The RenderViewHost created in Init will be reused. |
| 1264 EXPECT_EQ(host, manager.current_host()); | 1261 EXPECT_EQ(host, manager.current_host()); |
| 1265 EXPECT_FALSE(manager.pending_render_view_host()); | 1262 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1266 | 1263 |
| 1267 // We should observe a notification. | 1264 // We should observe a notification. |
| 1268 EXPECT_TRUE(notifications.Check1AndReset( | 1265 EXPECT_TRUE( |
| 1269 NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 1266 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 1270 notifications.Reset(); | 1267 notifications.Reset(); |
| 1271 | 1268 |
| 1272 // Commit. | 1269 // Commit. |
| 1273 manager.DidNavigateMainFrame(host); | 1270 manager.DidNavigateMainFrame(host); |
| 1274 | 1271 |
| 1275 // Commit to SiteInstance should be delayed until RenderView commit. | 1272 // Commit to SiteInstance should be delayed until RenderView commit. |
| 1276 EXPECT_EQ(host, manager.current_host()); | 1273 EXPECT_EQ(host, manager.current_host()); |
| 1277 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> | 1274 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| 1278 HasSite()); | 1275 HasSite()); |
| 1279 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); | 1276 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1301 Source<RenderWidgetHost>(host2)); | 1298 Source<RenderWidgetHost>(host2)); |
| 1302 manager.ShouldClosePage(false, true, base::TimeTicks()); | 1299 manager.ShouldClosePage(false, true, base::TimeTicks()); |
| 1303 | 1300 |
| 1304 EXPECT_TRUE( | 1301 EXPECT_TRUE( |
| 1305 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); | 1302 notifications.Check1AndReset(NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED)); |
| 1306 EXPECT_FALSE(manager.pending_render_view_host()); | 1303 EXPECT_FALSE(manager.pending_render_view_host()); |
| 1307 EXPECT_EQ(host, manager.current_host()); | 1304 EXPECT_EQ(host, manager.current_host()); |
| 1308 } | 1305 } |
| 1309 | 1306 |
| 1310 } // namespace content | 1307 } // namespace content |
| OLD | NEW |