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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager_unittest.cc

Issue 562603002: Move PageTransition from //content/public/common to //ui/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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/command_line.h" 5 #include "base/command_line.h"
6 #include "base/files/file_path.h" 6 #include "base/files/file_path.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "content/browser/frame_host/cross_site_transferring_request.h" 9 #include "content/browser/frame_host/cross_site_transferring_request.h"
10 #include "content/browser/frame_host/navigation_before_commit_info.h" 10 #include "content/browser/frame_host/navigation_before_commit_info.h"
(...skipping 11 matching lines...) Expand all
22 #include "content/public/browser/notification_source.h" 22 #include "content/public/browser/notification_source.h"
23 #include "content/public/browser/notification_types.h" 23 #include "content/public/browser/notification_types.h"
24 #include "content/public/browser/render_process_host.h" 24 #include "content/public/browser/render_process_host.h"
25 #include "content/public/browser/render_widget_host_iterator.h" 25 #include "content/public/browser/render_widget_host_iterator.h"
26 #include "content/public/browser/web_contents_delegate.h" 26 #include "content/public/browser/web_contents_delegate.h"
27 #include "content/public/browser/web_contents_observer.h" 27 #include "content/public/browser/web_contents_observer.h"
28 #include "content/public/browser/web_ui_controller.h" 28 #include "content/public/browser/web_ui_controller.h"
29 #include "content/public/common/bindings_policy.h" 29 #include "content/public/common/bindings_policy.h"
30 #include "content/public/common/content_switches.h" 30 #include "content/public/common/content_switches.h"
31 #include "content/public/common/javascript_message_type.h" 31 #include "content/public/common/javascript_message_type.h"
32 #include "content/public/common/page_transition_types.h"
33 #include "content/public/common/url_constants.h" 32 #include "content/public/common/url_constants.h"
34 #include "content/public/common/url_utils.h" 33 #include "content/public/common/url_utils.h"
35 #include "content/public/test/mock_render_process_host.h" 34 #include "content/public/test/mock_render_process_host.h"
36 #include "content/public/test/test_notification_tracker.h" 35 #include "content/public/test/test_notification_tracker.h"
37 #include "content/test/test_content_browser_client.h" 36 #include "content/test/test_content_browser_client.h"
38 #include "content/test/test_content_client.h" 37 #include "content/test/test_content_client.h"
39 #include "content/test/test_render_frame_host.h" 38 #include "content/test/test_render_frame_host.h"
40 #include "content/test/test_render_view_host.h" 39 #include "content/test/test_render_view_host.h"
41 #include "content/test/test_web_contents.h" 40 #include "content/test/test_web_contents.h"
42 #include "testing/gtest/include/gtest/gtest.h" 41 #include "testing/gtest/include/gtest/gtest.h"
42 #include "ui/base/page_transition_types.h"
43 43
44 namespace content { 44 namespace content {
45 namespace { 45 namespace {
46 46
47 class RenderFrameHostManagerTestWebUIControllerFactory 47 class RenderFrameHostManagerTestWebUIControllerFactory
48 : public WebUIControllerFactory { 48 : public WebUIControllerFactory {
49 public: 49 public:
50 RenderFrameHostManagerTestWebUIControllerFactory() 50 RenderFrameHostManagerTestWebUIControllerFactory()
51 : should_create_webui_(false) { 51 : should_create_webui_(false) {
52 } 52 }
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 } 271 }
272 272
273 void set_should_create_webui(bool should_create_webui) { 273 void set_should_create_webui(bool should_create_webui) {
274 factory_.set_should_create_webui(should_create_webui); 274 factory_.set_should_create_webui(should_create_webui);
275 } 275 }
276 276
277 void NavigateActiveAndCommit(const GURL& url) { 277 void NavigateActiveAndCommit(const GURL& url) {
278 // Note: we navigate the active RenderFrameHost because previous navigations 278 // Note: we navigate the active RenderFrameHost because previous navigations
279 // won't have committed yet, so NavigateAndCommit does the wrong thing 279 // won't have committed yet, so NavigateAndCommit does the wrong thing
280 // for us. 280 // for us.
281 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_LINK, std::string()); 281 controller().LoadURL(
282 url, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
282 TestRenderViewHost* old_rvh = test_rvh(); 283 TestRenderViewHost* old_rvh = test_rvh();
283 284
284 // Simulate the BeforeUnload_ACK that is received from the current renderer 285 // Simulate the BeforeUnload_ACK that is received from the current renderer
285 // for a cross-site navigation. 286 // for a cross-site navigation.
286 if (old_rvh != active_rvh()) { 287 if (old_rvh != active_rvh()) {
287 old_rvh->SendBeforeUnloadACK(true); 288 old_rvh->SendBeforeUnloadACK(true);
288 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, old_rvh->rvh_state()); 289 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, old_rvh->rvh_state());
289 } 290 }
290 291
291 // Commit the navigation with a new page ID. 292 // Commit the navigation with a new page ID.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 TestRenderViewHost* CreateSwappedOutRenderViewHost() { 349 TestRenderViewHost* CreateSwappedOutRenderViewHost() {
349 const GURL kChromeURL("chrome://foo"); 350 const GURL kChromeURL("chrome://foo");
350 const GURL kDestUrl("http://www.google.com/"); 351 const GURL kDestUrl("http://www.google.com/");
351 352
352 // Navigate our first tab to a chrome url and then to the destination. 353 // Navigate our first tab to a chrome url and then to the destination.
353 NavigateActiveAndCommit(kChromeURL); 354 NavigateActiveAndCommit(kChromeURL);
354 TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame(); 355 TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame();
355 356
356 // Navigate to a cross-site URL. 357 // Navigate to a cross-site URL.
357 contents()->GetController().LoadURL( 358 contents()->GetController().LoadURL(
358 kDestUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); 359 kDestUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
359 EXPECT_TRUE(contents()->cross_navigation_pending()); 360 EXPECT_TRUE(contents()->cross_navigation_pending());
360 361
361 // Manually increase the number of active views in the 362 // Manually increase the number of active views in the
362 // SiteInstance that ntp_rfh belongs to, to prevent it from being 363 // SiteInstance that ntp_rfh belongs to, to prevent it from being
363 // destroyed when it gets swapped out. 364 // destroyed when it gets swapped out.
364 static_cast<SiteInstanceImpl*>(ntp_rfh->GetSiteInstance())-> 365 static_cast<SiteInstanceImpl*>(ntp_rfh->GetSiteInstance())->
365 increment_active_view_count(); 366 increment_active_view_count();
366 367
367 TestRenderFrameHost* dest_rfh = contents()->GetPendingMainFrame(); 368 TestRenderFrameHost* dest_rfh = contents()->GetPendingMainFrame();
368 CHECK(dest_rfh); 369 CHECK(dest_rfh);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 EXPECT_FALSE(contents()->GetPendingMainFrame()); 411 EXPECT_FALSE(contents()->GetPendingMainFrame());
411 412
412 // Make a second tab. 413 // Make a second tab.
413 scoped_ptr<TestWebContents> contents2( 414 scoped_ptr<TestWebContents> contents2(
414 TestWebContents::Create(browser_context(), NULL)); 415 TestWebContents::Create(browser_context(), NULL));
415 416
416 // Load the two URLs in the second tab. Note that the first navigation creates 417 // Load the two URLs in the second tab. Note that the first navigation creates
417 // a RFH that's not pending (since there is no cross-site transition), so 418 // a RFH that's not pending (since there is no cross-site transition), so
418 // we use the committed one. 419 // we use the committed one.
419 contents2->GetController().LoadURL( 420 contents2->GetController().LoadURL(
420 kChromeUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); 421 kChromeUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
421 TestRenderFrameHost* ntp_rfh2 = contents2->GetMainFrame(); 422 TestRenderFrameHost* ntp_rfh2 = contents2->GetMainFrame();
422 EXPECT_FALSE(contents2->cross_navigation_pending()); 423 EXPECT_FALSE(contents2->cross_navigation_pending());
423 ntp_rfh2->SendNavigate(100, kChromeUrl); 424 ntp_rfh2->SendNavigate(100, kChromeUrl);
424 425
425 // The second one is the opposite, creating a cross-site transition and 426 // The second one is the opposite, creating a cross-site transition and
426 // requiring a beforeunload ack. 427 // requiring a beforeunload ack.
427 contents2->GetController().LoadURL( 428 contents2->GetController().LoadURL(
428 kDestUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); 429 kDestUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
429 EXPECT_TRUE(contents2->cross_navigation_pending()); 430 EXPECT_TRUE(contents2->cross_navigation_pending());
430 TestRenderFrameHost* dest_rfh2 = contents2->GetPendingMainFrame(); 431 TestRenderFrameHost* dest_rfh2 = contents2->GetPendingMainFrame();
431 ASSERT_TRUE(dest_rfh2); 432 ASSERT_TRUE(dest_rfh2);
432 433
433 ntp_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true); 434 ntp_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true);
434 dest_rfh2->SendNavigate(101, kDestUrl); 435 dest_rfh2->SendNavigate(101, kDestUrl);
435 436
436 // The two RFH's should be different in every way. 437 // The two RFH's should be different in every way.
437 EXPECT_NE(contents()->GetMainFrame()->GetProcess(), dest_rfh2->GetProcess()); 438 EXPECT_NE(contents()->GetMainFrame()->GetProcess(), dest_rfh2->GetProcess());
438 EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(), 439 EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(),
439 dest_rfh2->GetSiteInstance()); 440 dest_rfh2->GetSiteInstance());
440 EXPECT_FALSE(dest_rfh2->GetSiteInstance()->IsRelatedSiteInstance( 441 EXPECT_FALSE(dest_rfh2->GetSiteInstance()->IsRelatedSiteInstance(
441 contents()->GetMainFrame()->GetSiteInstance())); 442 contents()->GetMainFrame()->GetSiteInstance()));
442 443
443 // Navigate both to the new tab page, and verify that they share a 444 // Navigate both to the new tab page, and verify that they share a
444 // RenderProcessHost (not a SiteInstance). 445 // RenderProcessHost (not a SiteInstance).
445 NavigateActiveAndCommit(kChromeUrl); 446 NavigateActiveAndCommit(kChromeUrl);
446 EXPECT_FALSE(contents()->GetPendingMainFrame()); 447 EXPECT_FALSE(contents()->GetPendingMainFrame());
447 448
448 contents2->GetController().LoadURL( 449 contents2->GetController().LoadURL(
449 kChromeUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); 450 kChromeUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
450 dest_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true); 451 dest_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true);
451 contents2->GetPendingMainFrame()->SendNavigate(102, kChromeUrl); 452 contents2->GetPendingMainFrame()->SendNavigate(102, kChromeUrl);
452 453
453 EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(), 454 EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(),
454 contents2->GetMainFrame()->GetSiteInstance()); 455 contents2->GetMainFrame()->GetSiteInstance());
455 EXPECT_EQ(contents()->GetMainFrame()->GetSiteInstance()->GetProcess(), 456 EXPECT_EQ(contents()->GetMainFrame()->GetSiteInstance()->GetProcess(),
456 contents2->GetMainFrame()->GetSiteInstance()->GetProcess()); 457 contents2->GetMainFrame()->GetSiteInstance()->GetProcess());
457 } 458 }
458 459
459 // Ensure that the browser ignores most IPC messages that arrive from a 460 // Ensure that the browser ignores most IPC messages that arrive from a
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 // We have to navigate to some page at first since without this, the first 733 // We have to navigate to some page at first since without this, the first
733 // navigation will reuse the SiteInstance created by Init(), and the second 734 // navigation will reuse the SiteInstance created by Init(), and the second
734 // one will create a new SiteInstance. Because current_instance and 735 // one will create a new SiteInstance. Because current_instance and
735 // new_instance will be different, a new RenderViewHost will be created for 736 // new_instance will be different, a new RenderViewHost will be created for
736 // the second navigation. We have to avoid this in order to exercise the 737 // the second navigation. We have to avoid this in order to exercise the
737 // target code patch. 738 // target code patch.
738 NavigateActiveAndCommit(kChromeUrl); 739 NavigateActiveAndCommit(kChromeUrl);
739 740
740 // Navigate. 741 // Navigate.
741 controller().LoadURL( 742 controller().LoadURL(
742 kUrl, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 743 kUrl, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
743 // Simulate response from RenderFrame for DispatchBeforeUnload. 744 // Simulate response from RenderFrame for DispatchBeforeUnload.
744 base::TimeTicks now = base::TimeTicks::Now(); 745 base::TimeTicks now = base::TimeTicks::Now();
745 contents()->GetMainFrame()->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK( 746 contents()->GetMainFrame()->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK(
746 contents()->GetMainFrame()->GetRoutingID(), true, now, now)); 747 contents()->GetMainFrame()->GetRoutingID(), true, now, now));
747 ASSERT_TRUE(contents()->GetPendingMainFrame()) 748 ASSERT_TRUE(contents()->GetPendingMainFrame())
748 << "Expected new pending RenderFrameHost to be created."; 749 << "Expected new pending RenderFrameHost to be created.";
749 RenderFrameHost* last_rfh = contents()->GetPendingMainFrame(); 750 RenderFrameHost* last_rfh = contents()->GetPendingMainFrame();
750 int32 new_id = 751 int32 new_id =
751 contents()->GetMaxPageIDForSiteInstance(last_rfh->GetSiteInstance()) + 1; 752 contents()->GetMaxPageIDForSiteInstance(last_rfh->GetSiteInstance()) + 1;
752 contents()->GetPendingMainFrame()->SendNavigate(new_id, kUrl); 753 contents()->GetPendingMainFrame()->SendNavigate(new_id, kUrl);
753 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1); 754 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1);
754 ASSERT_TRUE(controller().GetLastCommittedEntry()); 755 ASSERT_TRUE(controller().GetLastCommittedEntry());
755 EXPECT_TRUE(kUrl == controller().GetLastCommittedEntry()->GetURL()); 756 EXPECT_TRUE(kUrl == controller().GetLastCommittedEntry()->GetURL());
756 EXPECT_FALSE(controller().GetPendingEntry()); 757 EXPECT_FALSE(controller().GetPendingEntry());
757 // Because we're using TestWebContents and TestRenderViewHost in this 758 // Because we're using TestWebContents and TestRenderViewHost in this
758 // unittest, no one calls WebContentsImpl::RenderViewCreated(). So, we see no 759 // unittest, no one calls WebContentsImpl::RenderViewCreated(). So, we see no
759 // EnableViewSourceMode message, here. 760 // EnableViewSourceMode message, here.
760 761
761 // Clear queued messages before load. 762 // Clear queued messages before load.
762 process()->sink().ClearMessages(); 763 process()->sink().ClearMessages();
763 // Navigate, again. 764 // Navigate, again.
764 controller().LoadURL( 765 controller().LoadURL(
765 kUrl, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 766 kUrl, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
766 // The same RenderViewHost should be reused. 767 // The same RenderViewHost should be reused.
767 EXPECT_FALSE(contents()->GetPendingMainFrame()); 768 EXPECT_FALSE(contents()->GetPendingMainFrame());
768 EXPECT_TRUE(last_rfh == contents()->GetMainFrame()); 769 EXPECT_TRUE(last_rfh == contents()->GetMainFrame());
769 // Navigate using the returned page_id. 770 // Navigate using the returned page_id.
770 contents()->GetMainFrame()->SendNavigate(new_id, kUrl); 771 contents()->GetMainFrame()->SendNavigate(new_id, kUrl);
771 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1); 772 EXPECT_EQ(controller().GetLastCommittedEntryIndex(), 1);
772 EXPECT_FALSE(controller().GetPendingEntry()); 773 EXPECT_FALSE(controller().GetPendingEntry());
773 // New message should be sent out to make sure to enter view-source mode. 774 // New message should be sent out to make sure to enter view-source mode.
774 EXPECT_TRUE(process()->sink().GetUniqueMessageMatching( 775 EXPECT_TRUE(process()->sink().GetUniqueMessageMatching(
775 ViewMsg_EnableViewSourceMode::ID)); 776 ViewMsg_EnableViewSourceMode::ID));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, 811 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
811 Source<WebContents>(web_contents.get())); 812 Source<WebContents>(web_contents.get()));
812 813
813 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); 814 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
814 RenderFrameHostImpl* host; 815 RenderFrameHostImpl* host;
815 816
816 // 1) The first navigation. -------------------------- 817 // 1) The first navigation. --------------------------
817 const GURL kUrl1("http://www.google.com/"); 818 const GURL kUrl1("http://www.google.com/");
818 NavigationEntryImpl entry1( 819 NavigationEntryImpl entry1(
819 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), 820 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(),
820 base::string16() /* title */, PAGE_TRANSITION_TYPED, 821 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED,
821 false /* is_renderer_init */); 822 false /* is_renderer_init */);
822 host = manager->Navigate(entry1); 823 host = manager->Navigate(entry1);
823 824
824 // The RenderFrameHost created in Init will be reused. 825 // The RenderFrameHost created in Init will be reused.
825 EXPECT_TRUE(host == manager->current_frame_host()); 826 EXPECT_TRUE(host == manager->current_frame_host());
826 EXPECT_FALSE(manager->pending_frame_host()); 827 EXPECT_FALSE(manager->pending_frame_host());
827 828
828 // Commit. 829 // Commit.
829 manager->DidNavigateFrame(host); 830 manager->DidNavigateFrame(host);
830 // Commit to SiteInstance should be delayed until RenderView commit. 831 // Commit to SiteInstance should be delayed until RenderView commit.
831 EXPECT_TRUE(host == manager->current_frame_host()); 832 EXPECT_TRUE(host == manager->current_frame_host());
832 ASSERT_TRUE(host); 833 ASSERT_TRUE(host);
833 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> 834 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->
834 HasSite()); 835 HasSite());
835 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); 836 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1);
836 837
837 // 2) Navigate to next site. ------------------------- 838 // 2) Navigate to next site. -------------------------
838 const GURL kUrl2("http://www.google.com/foo"); 839 const GURL kUrl2("http://www.google.com/foo");
839 NavigationEntryImpl entry2( 840 NavigationEntryImpl entry2(
840 NULL /* instance */, -1 /* page_id */, kUrl2, 841 NULL /* instance */, -1 /* page_id */, kUrl2,
841 Referrer(kUrl1, blink::WebReferrerPolicyDefault), 842 Referrer(kUrl1, blink::WebReferrerPolicyDefault),
842 base::string16() /* title */, PAGE_TRANSITION_LINK, 843 base::string16() /* title */, ui::PAGE_TRANSITION_LINK,
843 true /* is_renderer_init */); 844 true /* is_renderer_init */);
844 host = manager->Navigate(entry2); 845 host = manager->Navigate(entry2);
845 846
846 // The RenderFrameHost created in Init will be reused. 847 // The RenderFrameHost created in Init will be reused.
847 EXPECT_TRUE(host == manager->current_frame_host()); 848 EXPECT_TRUE(host == manager->current_frame_host());
848 EXPECT_FALSE(manager->pending_frame_host()); 849 EXPECT_FALSE(manager->pending_frame_host());
849 850
850 // Commit. 851 // Commit.
851 manager->DidNavigateFrame(host); 852 manager->DidNavigateFrame(host);
852 EXPECT_TRUE(host == manager->current_frame_host()); 853 EXPECT_TRUE(host == manager->current_frame_host());
853 ASSERT_TRUE(host); 854 ASSERT_TRUE(host);
854 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> 855 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->
855 HasSite()); 856 HasSite());
856 857
857 // 3) Cross-site navigate to next site. -------------- 858 // 3) Cross-site navigate to next site. --------------
858 const GURL kUrl3("http://webkit.org/"); 859 const GURL kUrl3("http://webkit.org/");
859 NavigationEntryImpl entry3( 860 NavigationEntryImpl entry3(
860 NULL /* instance */, -1 /* page_id */, kUrl3, 861 NULL /* instance */, -1 /* page_id */, kUrl3,
861 Referrer(kUrl2, blink::WebReferrerPolicyDefault), 862 Referrer(kUrl2, blink::WebReferrerPolicyDefault),
862 base::string16() /* title */, PAGE_TRANSITION_LINK, 863 base::string16() /* title */, ui::PAGE_TRANSITION_LINK,
863 false /* is_renderer_init */); 864 false /* is_renderer_init */);
864 host = manager->Navigate(entry3); 865 host = manager->Navigate(entry3);
865 866
866 // A new RenderFrameHost should be created. 867 // A new RenderFrameHost should be created.
867 EXPECT_TRUE(manager->pending_frame_host()); 868 EXPECT_TRUE(manager->pending_frame_host());
868 ASSERT_EQ(host, manager->pending_frame_host()); 869 ASSERT_EQ(host, manager->pending_frame_host());
869 870
870 notifications.Reset(); 871 notifications.Reset();
871 872
872 // Commit. 873 // Commit.
(...skipping 17 matching lines...) Expand all
890 891
891 scoped_ptr<TestWebContents> web_contents( 892 scoped_ptr<TestWebContents> web_contents(
892 TestWebContents::Create(browser_context(), instance)); 893 TestWebContents::Create(browser_context(), instance));
893 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); 894 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
894 895
895 EXPECT_FALSE(manager->current_host()->IsRenderViewLive()); 896 EXPECT_FALSE(manager->current_host()->IsRenderViewLive());
896 897
897 const GURL kUrl("chrome://foo"); 898 const GURL kUrl("chrome://foo");
898 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl, 899 NavigationEntryImpl entry(NULL /* instance */, -1 /* page_id */, kUrl,
899 Referrer(), base::string16() /* title */, 900 Referrer(), base::string16() /* title */,
900 PAGE_TRANSITION_TYPED, 901 ui::PAGE_TRANSITION_TYPED,
901 false /* is_renderer_init */); 902 false /* is_renderer_init */);
902 RenderFrameHostImpl* host = manager->Navigate(entry); 903 RenderFrameHostImpl* host = manager->Navigate(entry);
903 904
904 // We commit the pending RenderFrameHost immediately because the previous 905 // We commit the pending RenderFrameHost immediately because the previous
905 // RenderFrameHost was not live. We test a case where it is live in 906 // RenderFrameHost was not live. We test a case where it is live in
906 // WebUIInNewTab. 907 // WebUIInNewTab.
907 EXPECT_TRUE(host); 908 EXPECT_TRUE(host);
908 EXPECT_EQ(host, manager->current_frame_host()); 909 EXPECT_EQ(host, manager->current_frame_host());
909 EXPECT_FALSE(manager->pending_frame_host()); 910 EXPECT_FALSE(manager->pending_frame_host());
910 911
(...skipping 30 matching lines...) Expand all
941 // Test the case that new RVH is considered live. 942 // Test the case that new RVH is considered live.
942 manager1->current_host()->CreateRenderView( 943 manager1->current_host()->CreateRenderView(
943 base::string16(), -1, MSG_ROUTING_NONE, -1, false); 944 base::string16(), -1, MSG_ROUTING_NONE, -1, false);
944 EXPECT_TRUE(manager1->current_host()->IsRenderViewLive()); 945 EXPECT_TRUE(manager1->current_host()->IsRenderViewLive());
945 EXPECT_TRUE(manager1->current_frame_host()->IsRenderFrameLive()); 946 EXPECT_TRUE(manager1->current_frame_host()->IsRenderFrameLive());
946 947
947 // Navigate to a WebUI page. 948 // Navigate to a WebUI page.
948 const GURL kUrl1("chrome://foo"); 949 const GURL kUrl1("chrome://foo");
949 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, 950 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1,
950 Referrer(), base::string16() /* title */, 951 Referrer(), base::string16() /* title */,
951 PAGE_TRANSITION_TYPED, 952 ui::PAGE_TRANSITION_TYPED,
952 false /* is_renderer_init */); 953 false /* is_renderer_init */);
953 RenderFrameHostImpl* host1 = manager1->Navigate(entry1); 954 RenderFrameHostImpl* host1 = manager1->Navigate(entry1);
954 955
955 // We should have a pending navigation to the WebUI RenderViewHost. 956 // We should have a pending navigation to the WebUI RenderViewHost.
956 // It should already have bindings. 957 // It should already have bindings.
957 EXPECT_EQ(host1, manager1->pending_frame_host()); 958 EXPECT_EQ(host1, manager1->pending_frame_host());
958 EXPECT_NE(host1, manager1->current_frame_host()); 959 EXPECT_NE(host1, manager1->current_frame_host());
959 EXPECT_TRUE( 960 EXPECT_TRUE(
960 host1->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); 961 host1->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI);
961 962
(...skipping 10 matching lines...) Expand all
972 RenderFrameHostManager* manager2 = 973 RenderFrameHostManager* manager2 =
973 web_contents2->GetRenderManagerForTesting(); 974 web_contents2->GetRenderManagerForTesting();
974 // Make sure the new RVH is considered live. This is usually done in 975 // Make sure the new RVH is considered live. This is usually done in
975 // RenderWidgetHost::Init when opening a new tab from a link. 976 // RenderWidgetHost::Init when opening a new tab from a link.
976 manager2->current_host()->CreateRenderView( 977 manager2->current_host()->CreateRenderView(
977 base::string16(), -1, MSG_ROUTING_NONE, -1, false); 978 base::string16(), -1, MSG_ROUTING_NONE, -1, false);
978 979
979 const GURL kUrl2("chrome://foo/bar"); 980 const GURL kUrl2("chrome://foo/bar");
980 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2, 981 NavigationEntryImpl entry2(NULL /* instance */, -1 /* page_id */, kUrl2,
981 Referrer(), base::string16() /* title */, 982 Referrer(), base::string16() /* title */,
982 PAGE_TRANSITION_LINK, 983 ui::PAGE_TRANSITION_LINK,
983 true /* is_renderer_init */); 984 true /* is_renderer_init */);
984 RenderFrameHostImpl* host2 = manager2->Navigate(entry2); 985 RenderFrameHostImpl* host2 = manager2->Navigate(entry2);
985 986
986 // No cross-process transition happens because we are already in the right 987 // No cross-process transition happens because we are already in the right
987 // SiteInstance. We should grant bindings immediately. 988 // SiteInstance. We should grant bindings immediately.
988 EXPECT_EQ(host2, manager2->current_frame_host()); 989 EXPECT_EQ(host2, manager2->current_frame_host());
989 EXPECT_TRUE( 990 EXPECT_TRUE(
990 host2->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI); 991 host2->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI);
991 992
992 manager2->DidNavigateFrame(host2); 993 manager2->DidNavigateFrame(host2);
(...skipping 19 matching lines...) Expand all
1012 // Note that in this case, the navigation has not committed, so evil_rfh will 1013 // Note that in this case, the navigation has not committed, so evil_rfh will
1013 // not be deleted yet. 1014 // not be deleted yet.
1014 EXPECT_NE(evil_rfh, contents()->GetPendingMainFrame()); 1015 EXPECT_NE(evil_rfh, contents()->GetPendingMainFrame());
1015 EXPECT_NE(evil_rfh->GetRenderViewHost(), 1016 EXPECT_NE(evil_rfh->GetRenderViewHost(),
1016 contents()->GetPendingMainFrame()->GetRenderViewHost()); 1017 contents()->GetPendingMainFrame()->GetRenderViewHost());
1017 1018
1018 // Before that RFH has committed, the evil page reloads itself. 1019 // Before that RFH has committed, the evil page reloads itself.
1019 FrameHostMsg_DidCommitProvisionalLoad_Params params; 1020 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1020 params.page_id = 1; 1021 params.page_id = 1;
1021 params.url = kUrl2; 1022 params.url = kUrl2;
1022 params.transition = PAGE_TRANSITION_CLIENT_REDIRECT; 1023 params.transition = ui::PAGE_TRANSITION_CLIENT_REDIRECT;
1023 params.should_update_history = false; 1024 params.should_update_history = false;
1024 params.gesture = NavigationGestureAuto; 1025 params.gesture = NavigationGestureAuto;
1025 params.was_within_same_page = false; 1026 params.was_within_same_page = false;
1026 params.is_post = false; 1027 params.is_post = false;
1027 params.page_state = PageState::CreateFromURL(kUrl2); 1028 params.page_state = PageState::CreateFromURL(kUrl2);
1028 1029
1029 contents()->GetFrameTree()->root()->navigator()->DidNavigate(evil_rfh, 1030 contents()->GetFrameTree()->root()->navigator()->DidNavigate(evil_rfh,
1030 params); 1031 params);
1031 1032
1032 // That should have cancelled the pending RFH, and the evil RFH should be the 1033 // That should have cancelled the pending RFH, and the evil RFH should be the
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 TestWebContents::Create(browser_context(), instance)); 1390 TestWebContents::Create(browser_context(), instance));
1390 1391
1391 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); 1392 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
1392 1393
1393 RenderFrameHostImpl* host; 1394 RenderFrameHostImpl* host;
1394 1395
1395 // 1) The first navigation. -------------------------- 1396 // 1) The first navigation. --------------------------
1396 const GURL kUrl1("http://www.google.com/"); 1397 const GURL kUrl1("http://www.google.com/");
1397 NavigationEntryImpl entry1( 1398 NavigationEntryImpl entry1(
1398 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), 1399 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(),
1399 base::string16() /* title */, PAGE_TRANSITION_TYPED, 1400 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED,
1400 false /* is_renderer_init */); 1401 false /* is_renderer_init */);
1401 host = manager->Navigate(entry1); 1402 host = manager->Navigate(entry1);
1402 1403
1403 // The RenderFrameHost created in Init will be reused. 1404 // The RenderFrameHost created in Init will be reused.
1404 EXPECT_TRUE(host == manager->current_frame_host()); 1405 EXPECT_TRUE(host == manager->current_frame_host());
1405 EXPECT_FALSE(manager->pending_frame_host()); 1406 EXPECT_FALSE(manager->pending_frame_host());
1406 EXPECT_EQ(manager->current_frame_host()->GetSiteInstance(), instance); 1407 EXPECT_EQ(manager->current_frame_host()->GetSiteInstance(), instance);
1407 1408
1408 // Commit. 1409 // Commit.
1409 manager->DidNavigateFrame(host); 1410 manager->DidNavigateFrame(host);
1410 // Commit to SiteInstance should be delayed until RenderView commit. 1411 // Commit to SiteInstance should be delayed until RenderView commit.
1411 EXPECT_EQ(host, manager->current_frame_host()); 1412 EXPECT_EQ(host, manager->current_frame_host());
1412 ASSERT_TRUE(host); 1413 ASSERT_TRUE(host);
1413 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> 1414 EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->
1414 HasSite()); 1415 HasSite());
1415 1416
1416 // 2) Navigate to a different domain. ------------------------- 1417 // 2) Navigate to a different domain. -------------------------
1417 // Guests stay in the same process on navigation. 1418 // Guests stay in the same process on navigation.
1418 const GURL kUrl2("http://www.chromium.org"); 1419 const GURL kUrl2("http://www.chromium.org");
1419 NavigationEntryImpl entry2( 1420 NavigationEntryImpl entry2(
1420 NULL /* instance */, -1 /* page_id */, kUrl2, 1421 NULL /* instance */, -1 /* page_id */, kUrl2,
1421 Referrer(kUrl1, blink::WebReferrerPolicyDefault), 1422 Referrer(kUrl1, blink::WebReferrerPolicyDefault),
1422 base::string16() /* title */, PAGE_TRANSITION_LINK, 1423 base::string16() /* title */, ui::PAGE_TRANSITION_LINK,
1423 true /* is_renderer_init */); 1424 true /* is_renderer_init */);
1424 host = manager->Navigate(entry2); 1425 host = manager->Navigate(entry2);
1425 1426
1426 // The RenderFrameHost created in Init will be reused. 1427 // The RenderFrameHost created in Init will be reused.
1427 EXPECT_EQ(host, manager->current_frame_host()); 1428 EXPECT_EQ(host, manager->current_frame_host());
1428 EXPECT_FALSE(manager->pending_frame_host()); 1429 EXPECT_FALSE(manager->pending_frame_host());
1429 1430
1430 // Commit. 1431 // Commit.
1431 manager->DidNavigateFrame(host); 1432 manager->DidNavigateFrame(host);
1432 EXPECT_EQ(host, manager->current_frame_host()); 1433 EXPECT_EQ(host, manager->current_frame_host());
(...skipping 15 matching lines...) Expand all
1448 web_contents->SetDelegate(&delegate); 1449 web_contents->SetDelegate(&delegate);
1449 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, 1450 notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED,
1450 Source<WebContents>(web_contents.get())); 1451 Source<WebContents>(web_contents.get()));
1451 1452
1452 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); 1453 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting();
1453 1454
1454 // 1) The first navigation. -------------------------- 1455 // 1) The first navigation. --------------------------
1455 const GURL kUrl1("http://www.google.com/"); 1456 const GURL kUrl1("http://www.google.com/");
1456 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, 1457 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1,
1457 Referrer(), base::string16() /* title */, 1458 Referrer(), base::string16() /* title */,
1458 PAGE_TRANSITION_TYPED, 1459 ui::PAGE_TRANSITION_TYPED,
1459 false /* is_renderer_init */); 1460 false /* is_renderer_init */);
1460 RenderFrameHostImpl* host = manager->Navigate(entry1); 1461 RenderFrameHostImpl* host = manager->Navigate(entry1);
1461 1462
1462 // The RenderFrameHost created in Init will be reused. 1463 // The RenderFrameHost created in Init will be reused.
1463 EXPECT_EQ(host, manager->current_frame_host()); 1464 EXPECT_EQ(host, manager->current_frame_host());
1464 EXPECT_FALSE(manager->pending_frame_host()); 1465 EXPECT_FALSE(manager->pending_frame_host());
1465 1466
1466 // We should observe a notification. 1467 // We should observe a notification.
1467 EXPECT_TRUE( 1468 EXPECT_TRUE(
1468 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); 1469 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED));
1469 notifications.Reset(); 1470 notifications.Reset();
1470 1471
1471 // Commit. 1472 // Commit.
1472 manager->DidNavigateFrame(host); 1473 manager->DidNavigateFrame(host);
1473 1474
1474 // Commit to SiteInstance should be delayed until RenderFrame commits. 1475 // Commit to SiteInstance should be delayed until RenderFrame commits.
1475 EXPECT_EQ(host, manager->current_frame_host()); 1476 EXPECT_EQ(host, manager->current_frame_host());
1476 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> 1477 EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->
1477 HasSite()); 1478 HasSite());
1478 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); 1479 static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1);
1479 1480
1480 // 2) Cross-site navigate to next site. ------------------------- 1481 // 2) Cross-site navigate to next site. -------------------------
1481 const GURL kUrl2("http://www.example.com"); 1482 const GURL kUrl2("http://www.example.com");
1482 NavigationEntryImpl entry2( 1483 NavigationEntryImpl entry2(
1483 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), 1484 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(),
1484 base::string16() /* title */, PAGE_TRANSITION_TYPED, 1485 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED,
1485 false /* is_renderer_init */); 1486 false /* is_renderer_init */);
1486 RenderFrameHostImpl* host2 = manager->Navigate(entry2); 1487 RenderFrameHostImpl* host2 = manager->Navigate(entry2);
1487 1488
1488 // A new RenderFrameHost should be created. 1489 // A new RenderFrameHost should be created.
1489 ASSERT_EQ(host2, manager->pending_frame_host()); 1490 ASSERT_EQ(host2, manager->pending_frame_host());
1490 EXPECT_NE(host2, host); 1491 EXPECT_NE(host2, host);
1491 1492
1492 EXPECT_EQ(host, manager->current_frame_host()); 1493 EXPECT_EQ(host, manager->current_frame_host());
1493 EXPECT_FALSE(manager->current_frame_host()->is_swapped_out()); 1494 EXPECT_FALSE(manager->current_frame_host()->is_swapped_out());
1494 EXPECT_EQ(host2, manager->pending_frame_host()); 1495 EXPECT_EQ(host2, manager->pending_frame_host());
(...skipping 17 matching lines...) Expand all
1512 const GURL kUrl2("http://www.chromium.org/"); 1513 const GURL kUrl2("http://www.chromium.org/");
1513 1514
1514 // Navigate to the first page. 1515 // Navigate to the first page.
1515 contents()->NavigateAndCommit(kUrl1); 1516 contents()->NavigateAndCommit(kUrl1);
1516 TestRenderFrameHost* rfh1 = contents()->GetMainFrame(); 1517 TestRenderFrameHost* rfh1 = contents()->GetMainFrame();
1517 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost()); 1518 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost());
1518 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1519 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1519 rfh1->GetRenderViewHost()->rvh_state()); 1520 rfh1->GetRenderViewHost()->rvh_state());
1520 1521
1521 // Navigate to new site, simulating onbeforeunload approval. 1522 // Navigate to new site, simulating onbeforeunload approval.
1522 controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1523 controller().LoadURL(
1524 kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1523 base::TimeTicks now = base::TimeTicks::Now(); 1525 base::TimeTicks now = base::TimeTicks::Now();
1524 contents()->GetMainFrame()->OnMessageReceived( 1526 contents()->GetMainFrame()->OnMessageReceived(
1525 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1527 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1526 EXPECT_TRUE(contents()->cross_navigation_pending()); 1528 EXPECT_TRUE(contents()->cross_navigation_pending());
1527 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1529 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1528 rfh1->GetRenderViewHost()->rvh_state()); 1530 rfh1->GetRenderViewHost()->rvh_state());
1529 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); 1531 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame();
1530 1532
1531 // Simulate the swap out ack, unexpectedly early (before commit). It should 1533 // Simulate the swap out ack, unexpectedly early (before commit). It should
1532 // have no effect. 1534 // have no effect.
1533 rfh1->OnSwappedOut(false); 1535 rfh1->OnSwappedOut(false);
1534 EXPECT_TRUE(contents()->cross_navigation_pending()); 1536 EXPECT_TRUE(contents()->cross_navigation_pending());
1535 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1537 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1536 rfh1->GetRenderViewHost()->rvh_state()); 1538 rfh1->GetRenderViewHost()->rvh_state());
1537 1539
1538 // The new page commits. 1540 // The new page commits.
1539 contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); 1541 contents()->TestDidNavigate(rfh2, 1, kUrl2, ui::PAGE_TRANSITION_TYPED);
1540 EXPECT_FALSE(contents()->cross_navigation_pending()); 1542 EXPECT_FALSE(contents()->cross_navigation_pending());
1541 EXPECT_EQ(rfh2, contents()->GetMainFrame()); 1543 EXPECT_EQ(rfh2, contents()->GetMainFrame());
1542 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 1544 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
1543 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1545 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1544 rfh2->GetRenderViewHost()->rvh_state()); 1546 rfh2->GetRenderViewHost()->rvh_state());
1545 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SHUTDOWN, 1547 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SHUTDOWN,
1546 rfh1->GetRenderViewHost()->rvh_state()); 1548 rfh1->GetRenderViewHost()->rvh_state());
1547 1549
1548 // Simulate the swap out ack. 1550 // Simulate the swap out ack.
1549 rfh1->OnSwappedOut(false); 1551 rfh1->OnSwappedOut(false);
(...skipping 15 matching lines...) Expand all
1565 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost()); 1567 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost());
1566 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1568 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1567 rfh1->GetRenderViewHost()->rvh_state()); 1569 rfh1->GetRenderViewHost()->rvh_state());
1568 1570
1569 // Increment the number of active views in SiteInstanceImpl so that rfh1 is 1571 // Increment the number of active views in SiteInstanceImpl so that rfh1 is
1570 // not deleted on swap out. 1572 // not deleted on swap out.
1571 static_cast<SiteInstanceImpl*>( 1573 static_cast<SiteInstanceImpl*>(
1572 rfh1->GetSiteInstance())->increment_active_view_count(); 1574 rfh1->GetSiteInstance())->increment_active_view_count();
1573 1575
1574 // Navigate to new site, simulating onbeforeunload approval. 1576 // Navigate to new site, simulating onbeforeunload approval.
1575 controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1577 controller().LoadURL(
1578 kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1576 base::TimeTicks now = base::TimeTicks::Now(); 1579 base::TimeTicks now = base::TimeTicks::Now();
1577 contents()->GetMainFrame()->OnMessageReceived( 1580 contents()->GetMainFrame()->OnMessageReceived(
1578 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1581 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1579 EXPECT_TRUE(contents()->cross_navigation_pending()); 1582 EXPECT_TRUE(contents()->cross_navigation_pending());
1580 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1583 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1581 rfh1->GetRenderViewHost()->rvh_state()); 1584 rfh1->GetRenderViewHost()->rvh_state());
1582 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); 1585 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame();
1583 1586
1584 // The new page commits. 1587 // The new page commits.
1585 contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); 1588 contents()->TestDidNavigate(rfh2, 1, kUrl2, ui::PAGE_TRANSITION_TYPED);
1586 EXPECT_FALSE(contents()->cross_navigation_pending()); 1589 EXPECT_FALSE(contents()->cross_navigation_pending());
1587 EXPECT_EQ(rfh2, contents()->GetMainFrame()); 1590 EXPECT_EQ(rfh2, contents()->GetMainFrame());
1588 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 1591 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
1589 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1592 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1590 rfh2->GetRenderViewHost()->rvh_state()); 1593 rfh2->GetRenderViewHost()->rvh_state());
1591 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, 1594 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT,
1592 rfh1->GetRenderViewHost()->rvh_state()); 1595 rfh1->GetRenderViewHost()->rvh_state());
1593 1596
1594 // Simulate the swap out ack. 1597 // Simulate the swap out ack.
1595 rfh1->OnSwappedOut(false); 1598 rfh1->OnSwappedOut(false);
(...skipping 18 matching lines...) Expand all
1614 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost()); 1617 RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost());
1615 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1618 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1616 rfh1->GetRenderViewHost()->rvh_state()); 1619 rfh1->GetRenderViewHost()->rvh_state());
1617 1620
1618 // Increment the number of active views in SiteInstanceImpl so that rfh1 is 1621 // Increment the number of active views in SiteInstanceImpl so that rfh1 is
1619 // not deleted on swap out. 1622 // not deleted on swap out.
1620 static_cast<SiteInstanceImpl*>( 1623 static_cast<SiteInstanceImpl*>(
1621 rfh1->GetSiteInstance())->increment_active_view_count(); 1624 rfh1->GetSiteInstance())->increment_active_view_count();
1622 1625
1623 // Navigate to new site, simulating onbeforeunload approval. 1626 // Navigate to new site, simulating onbeforeunload approval.
1624 controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1627 controller().LoadURL(
1628 kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1625 base::TimeTicks now = base::TimeTicks::Now(); 1629 base::TimeTicks now = base::TimeTicks::Now();
1626 rfh1->OnMessageReceived( 1630 rfh1->OnMessageReceived(
1627 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1631 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1628 EXPECT_TRUE(contents()->cross_navigation_pending()); 1632 EXPECT_TRUE(contents()->cross_navigation_pending());
1629 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); 1633 TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame();
1630 1634
1631 // The new page commits. 1635 // The new page commits.
1632 contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); 1636 contents()->TestDidNavigate(rfh2, 1, kUrl2, ui::PAGE_TRANSITION_TYPED);
1633 EXPECT_FALSE(contents()->cross_navigation_pending()); 1637 EXPECT_FALSE(contents()->cross_navigation_pending());
1634 EXPECT_EQ(rfh2, contents()->GetMainFrame()); 1638 EXPECT_EQ(rfh2, contents()->GetMainFrame());
1635 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 1639 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
1636 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1640 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1637 rfh2->GetRenderViewHost()->rvh_state()); 1641 rfh2->GetRenderViewHost()->rvh_state());
1638 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, 1642 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT,
1639 rfh1->GetRenderViewHost()->rvh_state()); 1643 rfh1->GetRenderViewHost()->rvh_state());
1640 1644
1641 // Simulate the swap out ack. 1645 // Simulate the swap out ack.
1642 rfh1->OnSwappedOut(false); 1646 rfh1->OnSwappedOut(false);
(...skipping 11 matching lines...) Expand all
1654 const GURL kUrl2("http://www.chromium.org/"); 1658 const GURL kUrl2("http://www.chromium.org/");
1655 RenderFrameHostImpl* pending_rfh = NULL; 1659 RenderFrameHostImpl* pending_rfh = NULL;
1656 base::TimeTicks now = base::TimeTicks::Now(); 1660 base::TimeTicks now = base::TimeTicks::Now();
1657 1661
1658 // Navigate to the first page. 1662 // Navigate to the first page.
1659 contents()->NavigateAndCommit(kUrl1); 1663 contents()->NavigateAndCommit(kUrl1);
1660 TestRenderViewHost* rvh1 = test_rvh(); 1664 TestRenderViewHost* rvh1 = test_rvh();
1661 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh1->rvh_state()); 1665 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh1->rvh_state());
1662 1666
1663 // Navigate to a new site, starting a cross-site navigation. 1667 // Navigate to a new site, starting a cross-site navigation.
1664 controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1668 controller().LoadURL(
1669 kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1665 { 1670 {
1666 pending_rfh = contents()->GetFrameTree()->root()->render_manager() 1671 pending_rfh = contents()->GetFrameTree()->root()->render_manager()
1667 ->pending_frame_host(); 1672 ->pending_frame_host();
1668 RenderFrameHostDeletedObserver rvh_deleted_observer(pending_rfh); 1673 RenderFrameHostDeletedObserver rvh_deleted_observer(pending_rfh);
1669 1674
1670 // Cancel the navigation by simulating a declined beforeunload dialog. 1675 // Cancel the navigation by simulating a declined beforeunload dialog.
1671 contents()->GetMainFrame()->OnMessageReceived( 1676 contents()->GetMainFrame()->OnMessageReceived(
1672 FrameHostMsg_BeforeUnload_ACK(0, false, now, now)); 1677 FrameHostMsg_BeforeUnload_ACK(0, false, now, now));
1673 EXPECT_FALSE(contents()->cross_navigation_pending()); 1678 EXPECT_FALSE(contents()->cross_navigation_pending());
1674 1679
1675 // Since the pending RFH is the only one for the new SiteInstance, it should 1680 // Since the pending RFH is the only one for the new SiteInstance, it should
1676 // be deleted. 1681 // be deleted.
1677 EXPECT_TRUE(rvh_deleted_observer.deleted()); 1682 EXPECT_TRUE(rvh_deleted_observer.deleted());
1678 } 1683 }
1679 1684
1680 // Start another cross-site navigation. 1685 // Start another cross-site navigation.
1681 controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1686 controller().LoadURL(
1687 kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1682 { 1688 {
1683 pending_rfh = contents()->GetFrameTree()->root()->render_manager() 1689 pending_rfh = contents()->GetFrameTree()->root()->render_manager()
1684 ->pending_frame_host(); 1690 ->pending_frame_host();
1685 RenderFrameHostDeletedObserver rvh_deleted_observer(pending_rfh); 1691 RenderFrameHostDeletedObserver rvh_deleted_observer(pending_rfh);
1686 1692
1687 // Increment the number of active views in the new SiteInstance, which will 1693 // Increment the number of active views in the new SiteInstance, which will
1688 // cause the pending RFH to be swapped out instead of deleted. 1694 // cause the pending RFH to be swapped out instead of deleted.
1689 static_cast<SiteInstanceImpl*>( 1695 static_cast<SiteInstanceImpl*>(
1690 pending_rfh->GetSiteInstance())->increment_active_view_count(); 1696 pending_rfh->GetSiteInstance())->increment_active_view_count();
1691 1697
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1743 1749
1744 // PlzNavigate: Test that RequestNavigation creates a NavigationRequest and that 1750 // PlzNavigate: Test that RequestNavigation creates a NavigationRequest and that
1745 // RenderFrameHost is not modified when the navigation commits. 1751 // RenderFrameHost is not modified when the navigation commits.
1746 TEST_F(RenderFrameHostManagerTest, 1752 TEST_F(RenderFrameHostManagerTest,
1747 BrowserSideNavigationRequestNavigationNoLiveRenderer) { 1753 BrowserSideNavigationRequestNavigationNoLiveRenderer) {
1748 const GURL kUrl("http://www.google.com/"); 1754 const GURL kUrl("http://www.google.com/");
1749 1755
1750 EnableBrowserSideNavigation(); 1756 EnableBrowserSideNavigation();
1751 EXPECT_FALSE(main_test_rfh()->render_view_host()->IsRenderViewLive()); 1757 EXPECT_FALSE(main_test_rfh()->render_view_host()->IsRenderViewLive());
1752 contents()->GetController().LoadURL( 1758 contents()->GetController().LoadURL(
1753 kUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); 1759 kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string());
1754 RenderFrameHostManager* render_manager = 1760 RenderFrameHostManager* render_manager =
1755 main_test_rfh()->frame_tree_node()->render_manager(); 1761 main_test_rfh()->frame_tree_node()->render_manager();
1756 NavigationRequest* main_request = 1762 NavigationRequest* main_request =
1757 GetNavigationRequestForRenderFrameManager(render_manager); 1763 GetNavigationRequestForRenderFrameManager(render_manager);
1758 // A NavigationRequest should have been generated. 1764 // A NavigationRequest should have been generated.
1759 EXPECT_TRUE(main_request != NULL); 1765 EXPECT_TRUE(main_request != NULL);
1760 RenderFrameHostImpl* rfh = main_test_rfh(); 1766 RenderFrameHostImpl* rfh = main_test_rfh();
1761 1767
1762 // Now commit the same url. 1768 // Now commit the same url.
1763 NavigationBeforeCommitInfo commit_info; 1769 NavigationBeforeCommitInfo commit_info;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
1848 EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); 1854 EXPECT_EQ(kUrl0_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
1849 1855
1850 // Confirms that a valid, request-matching commit is correctly processed. 1856 // Confirms that a valid, request-matching commit is correctly processed.
1851 nbc_info.navigation_url = kUrl2; 1857 nbc_info.navigation_url = kUrl2;
1852 nbc_info.navigation_request_id = request_id2; 1858 nbc_info.navigation_request_id = request_id2;
1853 render_manager->CommitNavigation(nbc_info); 1859 render_manager->CommitNavigation(nbc_info);
1854 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); 1860 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL());
1855 } 1861 }
1856 1862
1857 } // namespace content 1863 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.cc ('k') | content/browser/loader/cross_site_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698