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

Side by Side Diff: chrome/browser/web_contents_unittest.cc

Issue 479: DidNavigate refactor of doom (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/logging.h" 5 #include "base/logging.h"
6 #include "chrome/browser/navigation_controller.h" 6 #include "chrome/browser/navigation_controller.h"
7 #include "chrome/browser/navigation_entry.h" 7 #include "chrome/browser/navigation_entry.h"
8 #include "chrome/browser/render_view_host.h" 8 #include "chrome/browser/render_view_host.h"
9 #include "chrome/browser/render_widget_host_view.h" 9 #include "chrome/browser/render_widget_host_view.h"
10 #include "chrome/browser/web_contents.h" 10 #include "chrome/browser/web_contents.h"
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 // alternatives without using command-line switches. 222 // alternatives without using command-line switches.
223 bool ShouldTransitionCrossSite() { return transition_cross_site; } 223 bool ShouldTransitionCrossSite() { return transition_cross_site; }
224 224
225 // Promote DidNavigate to public. 225 // Promote DidNavigate to public.
226 void TestDidNavigate(TestRenderViewHost* render_view_host, 226 void TestDidNavigate(TestRenderViewHost* render_view_host,
227 const ViewHostMsg_FrameNavigate_Params& params) { 227 const ViewHostMsg_FrameNavigate_Params& params) {
228 DidNavigate(render_view_host, params); 228 DidNavigate(render_view_host, params);
229 render_view_host->is_loading = false; 229 render_view_host->is_loading = false;
230 } 230 }
231 231
232 // Promote IsInPageNavigation to public.
233 bool TestIsInPageNavigation(const GURL& url) {
234 return IsInPageNavigation(url);
235 }
236
237 // Promote GetWebkitPrefs to public. 232 // Promote GetWebkitPrefs to public.
238 WebPreferences TestGetWebkitPrefs() { 233 WebPreferences TestGetWebkitPrefs() {
239 return GetWebkitPrefs(); 234 return GetWebkitPrefs();
240 } 235 }
241 236
242 // Prevent interaction with views. 237 // Prevent interaction with views.
243 bool CreateRenderViewForRenderManager(RenderViewHost* render_view_host) { 238 bool CreateRenderViewForRenderManager(RenderViewHost* render_view_host) {
244 // This will go to a TestRenderViewHost. 239 // This will go to a TestRenderViewHost.
245 render_view_host->CreateRenderView(); 240 render_view_host->CreateRenderView();
246 return true; 241 return true;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 MessageLoop::current()->RunAllPending(); 289 MessageLoop::current()->RunAllPending();
295 } 290 }
296 291
297 scoped_ptr<WebContentsTestingProfile> profile; 292 scoped_ptr<WebContentsTestingProfile> profile;
298 TestWebContents* contents; 293 TestWebContents* contents;
299 294
300 private: 295 private:
301 MessageLoopForUI message_loop_; 296 MessageLoopForUI message_loop_;
302 }; 297 };
303 298
304 // Test to make sure that title updates get stripped of whitespace 299 // Test to make sure that title updates get stripped of whitespace.
305 TEST_F(WebContentsTest, OnMessageReceived) { 300 TEST_F(WebContentsTest, UpdateTitle) {
301 ViewHostMsg_FrameNavigate_Params params;
302 InitNavigateParams(&params, 0, GURL("about:blank"));
303
306 NavigationController::LoadCommittedDetails details; 304 NavigationController::LoadCommittedDetails details;
307 contents->controller()->DidNavigateToEntry(new NavigationEntry( 305 contents->controller()->RendererDidNavigate(params, false, &details);
308 contents->type(), contents->site_instance(), 0, GURL("about:blank"),
309 std::wstring(), PageTransition::TYPED), &details);
310 306
311 contents->UpdateTitle(NULL, 0, L" Lots O' Whitespace\n"); 307 contents->UpdateTitle(NULL, 0, L" Lots O' Whitespace\n");
312 EXPECT_EQ(std::wstring(L"Lots O' Whitespace"), contents->GetTitle()); 308 EXPECT_EQ(std::wstring(L"Lots O' Whitespace"), contents->GetTitle());
313 } 309 }
314 310
315 // Test simple same-SiteInstance navigation. 311 // Test simple same-SiteInstance navigation.
316 TEST_F(WebContentsTest, SimpleNavigation) { 312 TEST_F(WebContentsTest, SimpleNavigation) {
317 TestRenderViewHost* orig_rvh = contents->rvh(); 313 TestRenderViewHost* orig_rvh = contents->rvh();
318 SiteInstance* instance1 = contents->site_instance(); 314 SiteInstance* instance1 = contents->GetSiteInstance();
319 EXPECT_TRUE(contents->pending_rvh() == NULL); 315 EXPECT_TRUE(contents->pending_rvh() == NULL);
320 EXPECT_TRUE(contents->original_rvh() == NULL); 316 EXPECT_TRUE(contents->original_rvh() == NULL);
321 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 317 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
322 EXPECT_FALSE(orig_rvh->is_loading); 318 EXPECT_FALSE(orig_rvh->is_loading);
323 319
324 // Navigate to URL 320 // Navigate to URL
325 const GURL url("http://www.google.com"); 321 const GURL url("http://www.google.com");
326 contents->controller()->LoadURL(url, PageTransition::TYPED); 322 contents->controller()->LoadURL(url, PageTransition::TYPED);
327 EXPECT_TRUE(contents->state_is_normal()); 323 EXPECT_TRUE(contents->state_is_normal());
328 EXPECT_TRUE(orig_rvh->is_loading); 324 EXPECT_TRUE(orig_rvh->is_loading);
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 574 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
579 } 575 }
580 576
581 // Test that navigating across a site boundary creates a new RenderViewHost 577 // Test that navigating across a site boundary creates a new RenderViewHost
582 // with a new SiteInstance. Going back should do the same. 578 // with a new SiteInstance. Going back should do the same.
583 TEST_F(WebContentsTest, CrossSiteBoundaries) { 579 TEST_F(WebContentsTest, CrossSiteBoundaries) {
584 contents->transition_cross_site = true; 580 contents->transition_cross_site = true;
585 TestRenderViewHost* orig_rvh = contents->rvh(); 581 TestRenderViewHost* orig_rvh = contents->rvh();
586 int orig_rvh_delete_count = 0; 582 int orig_rvh_delete_count = 0;
587 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 583 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
588 SiteInstance* instance1 = contents->site_instance(); 584 SiteInstance* instance1 = contents->GetSiteInstance();
589 585
590 // Navigate to URL. First URL should use first RenderViewHost. 586 // Navigate to URL. First URL should use first RenderViewHost.
591 const GURL url("http://www.google.com"); 587 const GURL url("http://www.google.com");
592 contents->controller()->LoadURL(url, PageTransition::TYPED); 588 contents->controller()->LoadURL(url, PageTransition::TYPED);
593 ViewHostMsg_FrameNavigate_Params params1; 589 ViewHostMsg_FrameNavigate_Params params1;
594 InitNavigateParams(&params1, 1, url); 590 InitNavigateParams(&params1, 1, url);
595 contents->TestDidNavigate(orig_rvh, params1); 591 contents->TestDidNavigate(orig_rvh, params1);
596 592
597 EXPECT_TRUE(contents->state_is_normal()); 593 EXPECT_TRUE(contents->state_is_normal());
598 EXPECT_EQ(orig_rvh, contents->render_view_host()); 594 EXPECT_EQ(orig_rvh, contents->render_view_host());
599 EXPECT_TRUE(contents->original_rvh() == NULL); 595 EXPECT_TRUE(contents->original_rvh() == NULL);
600 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 596 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
601 597
602 // Navigate to new site 598 // Navigate to new site
603 const GURL url2("http://www.yahoo.com"); 599 const GURL url2("http://www.yahoo.com");
604 contents->controller()->LoadURL(url2, PageTransition::TYPED); 600 contents->controller()->LoadURL(url2, PageTransition::TYPED);
605 EXPECT_TRUE(contents->state_is_pending()); 601 EXPECT_TRUE(contents->state_is_pending());
606 TestRenderViewHost* pending_rvh = contents->pending_rvh(); 602 TestRenderViewHost* pending_rvh = contents->pending_rvh();
607 int pending_rvh_delete_count = 0; 603 int pending_rvh_delete_count = 0;
608 pending_rvh->set_delete_counter(&pending_rvh_delete_count); 604 pending_rvh->set_delete_counter(&pending_rvh_delete_count);
609 605
610 // DidNavigate from the pending page 606 // DidNavigate from the pending page
611 ViewHostMsg_FrameNavigate_Params params2; 607 ViewHostMsg_FrameNavigate_Params params2;
612 InitNavigateParams(&params2, 1, url2); 608 InitNavigateParams(&params2, 1, url2);
613 contents->TestDidNavigate(pending_rvh, params2); 609 contents->TestDidNavigate(pending_rvh, params2);
614 SiteInstance* instance2 = contents->site_instance(); 610 SiteInstance* instance2 = contents->GetSiteInstance();
615 611
616 EXPECT_TRUE(contents->state_is_normal()); 612 EXPECT_TRUE(contents->state_is_normal());
617 EXPECT_EQ(pending_rvh, contents->render_view_host()); 613 EXPECT_EQ(pending_rvh, contents->render_view_host());
618 EXPECT_NE(instance1, instance2); 614 EXPECT_NE(instance1, instance2);
619 EXPECT_TRUE(contents->pending_rvh() == NULL); 615 EXPECT_TRUE(contents->pending_rvh() == NULL);
620 EXPECT_TRUE(contents->original_rvh() == NULL); 616 EXPECT_TRUE(contents->original_rvh() == NULL);
621 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 617 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
622 EXPECT_EQ(orig_rvh_delete_count, 1); 618 EXPECT_EQ(orig_rvh_delete_count, 1);
623 619
624 // Going back should switch SiteInstances again. The first SiteInstance is 620 // Going back should switch SiteInstances again. The first SiteInstance is
625 // stored in the NavigationEntry, so it should be the same as at the start. 621 // stored in the NavigationEntry, so it should be the same as at the start.
626 contents->controller()->GoBack(); 622 contents->controller()->GoBack();
627 TestRenderViewHost* goback_rvh = contents->pending_rvh(); 623 TestRenderViewHost* goback_rvh = contents->pending_rvh();
628 EXPECT_TRUE(contents->state_is_pending()); 624 EXPECT_TRUE(contents->state_is_pending());
629 625
630 // DidNavigate from the back action 626 // DidNavigate from the back action
631 contents->TestDidNavigate(goback_rvh, params1); 627 contents->TestDidNavigate(goback_rvh, params1);
632 EXPECT_TRUE(contents->state_is_normal()); 628 EXPECT_TRUE(contents->state_is_normal());
633 EXPECT_EQ(goback_rvh, contents->render_view_host()); 629 EXPECT_EQ(goback_rvh, contents->render_view_host());
634 EXPECT_EQ(pending_rvh_delete_count, 1); 630 EXPECT_EQ(pending_rvh_delete_count, 1);
635 EXPECT_EQ(instance1, contents->site_instance()); 631 EXPECT_EQ(instance1, contents->GetSiteInstance());
636 } 632 }
637 633
638 // Test that navigating across a site boundary after a crash creates a new 634 // Test that navigating across a site boundary after a crash creates a new
639 // RVH without requiring a cross-site transition (i.e., PENDING state). 635 // RVH without requiring a cross-site transition (i.e., PENDING state).
640 TEST_F(WebContentsTest, CrossSiteBoundariesAfterCrash) { 636 TEST_F(WebContentsTest, CrossSiteBoundariesAfterCrash) {
641 contents->transition_cross_site = true; 637 contents->transition_cross_site = true;
642 TestRenderViewHost* orig_rvh = contents->rvh(); 638 TestRenderViewHost* orig_rvh = contents->rvh();
643 int orig_rvh_delete_count = 0; 639 int orig_rvh_delete_count = 0;
644 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 640 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
645 SiteInstance* instance1 = contents->site_instance(); 641 SiteInstance* instance1 = contents->GetSiteInstance();
646 642
647 // Navigate to URL. First URL should use first RenderViewHost. 643 // Navigate to URL. First URL should use first RenderViewHost.
648 const GURL url("http://www.google.com"); 644 const GURL url("http://www.google.com");
649 contents->controller()->LoadURL(url, PageTransition::TYPED); 645 contents->controller()->LoadURL(url, PageTransition::TYPED);
650 ViewHostMsg_FrameNavigate_Params params1; 646 ViewHostMsg_FrameNavigate_Params params1;
651 InitNavigateParams(&params1, 1, url); 647 InitNavigateParams(&params1, 1, url);
652 contents->TestDidNavigate(orig_rvh, params1); 648 contents->TestDidNavigate(orig_rvh, params1);
653 649
654 EXPECT_TRUE(contents->state_is_normal()); 650 EXPECT_TRUE(contents->state_is_normal());
655 EXPECT_EQ(orig_rvh, contents->render_view_host()); 651 EXPECT_EQ(orig_rvh, contents->render_view_host());
(...skipping 11 matching lines...) Expand all
667 EXPECT_TRUE(contents->pending_rvh() == NULL); 663 EXPECT_TRUE(contents->pending_rvh() == NULL);
668 EXPECT_TRUE(contents->original_rvh() == NULL); 664 EXPECT_TRUE(contents->original_rvh() == NULL);
669 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 665 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
670 EXPECT_NE(orig_rvh, new_rvh); 666 EXPECT_NE(orig_rvh, new_rvh);
671 EXPECT_EQ(orig_rvh_delete_count, 1); 667 EXPECT_EQ(orig_rvh_delete_count, 1);
672 668
673 // DidNavigate from the new page 669 // DidNavigate from the new page
674 ViewHostMsg_FrameNavigate_Params params2; 670 ViewHostMsg_FrameNavigate_Params params2;
675 InitNavigateParams(&params2, 1, url2); 671 InitNavigateParams(&params2, 1, url2);
676 contents->TestDidNavigate(new_rvh, params2); 672 contents->TestDidNavigate(new_rvh, params2);
677 SiteInstance* instance2 = contents->site_instance(); 673 SiteInstance* instance2 = contents->GetSiteInstance();
678 674
679 EXPECT_TRUE(contents->state_is_normal()); 675 EXPECT_TRUE(contents->state_is_normal());
680 EXPECT_EQ(new_rvh, contents->render_view_host()); 676 EXPECT_EQ(new_rvh, contents->render_view_host());
681 EXPECT_NE(instance1, instance2); 677 EXPECT_NE(instance1, instance2);
682 EXPECT_TRUE(contents->pending_rvh() == NULL); 678 EXPECT_TRUE(contents->pending_rvh() == NULL);
683 EXPECT_TRUE(contents->original_rvh() == NULL); 679 EXPECT_TRUE(contents->original_rvh() == NULL);
684 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 680 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
685 } 681 }
686 682
687 // Test state transitions when showing an interstitial in the new process 683 // Test state transitions when showing an interstitial in the new process
688 // model, and then choosing DontProceed. 684 // model, and then choosing DontProceed.
689 TEST_F(WebContentsTest, CrossSiteInterstitialDontProceed) { 685 TEST_F(WebContentsTest, CrossSiteInterstitialDontProceed) {
690 contents->transition_cross_site = true; 686 contents->transition_cross_site = true;
691 TestRenderViewHost* orig_rvh = contents->rvh(); 687 TestRenderViewHost* orig_rvh = contents->rvh();
692 SiteInstance* instance1 = contents->site_instance(); 688 SiteInstance* instance1 = contents->GetSiteInstance();
693 689
694 // Navigate to URL. First URL should use first RenderViewHost. 690 // Navigate to URL. First URL should use first RenderViewHost.
695 const GURL url("http://www.google.com"); 691 const GURL url("http://www.google.com");
696 contents->controller()->LoadURL(url, PageTransition::TYPED); 692 contents->controller()->LoadURL(url, PageTransition::TYPED);
697 ViewHostMsg_FrameNavigate_Params params1; 693 ViewHostMsg_FrameNavigate_Params params1;
698 InitNavigateParams(&params1, 1, url); 694 InitNavigateParams(&params1, 1, url);
699 contents->TestDidNavigate(orig_rvh, params1); 695 contents->TestDidNavigate(orig_rvh, params1);
700 696
701 EXPECT_TRUE(contents->state_is_normal()); 697 EXPECT_TRUE(contents->state_is_normal());
702 EXPECT_EQ(orig_rvh, contents->render_view_host()); 698 EXPECT_EQ(orig_rvh, contents->render_view_host());
(...skipping 30 matching lines...) Expand all
733 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 729 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
734 } 730 }
735 731
736 // Test state transitions when showing an interstitial in the new process 732 // Test state transitions when showing an interstitial in the new process
737 // model, and then choosing Proceed. 733 // model, and then choosing Proceed.
738 TEST_F(WebContentsTest, CrossSiteInterstitialProceed) { 734 TEST_F(WebContentsTest, CrossSiteInterstitialProceed) {
739 contents->transition_cross_site = true; 735 contents->transition_cross_site = true;
740 int orig_rvh_delete_count = 0; 736 int orig_rvh_delete_count = 0;
741 TestRenderViewHost* orig_rvh = contents->rvh(); 737 TestRenderViewHost* orig_rvh = contents->rvh();
742 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 738 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
743 SiteInstance* instance1 = contents->site_instance(); 739 SiteInstance* instance1 = contents->GetSiteInstance();
744 740
745 // Navigate to URL. First URL should use first RenderViewHost. 741 // Navigate to URL. First URL should use first RenderViewHost.
746 const GURL url("http://www.google.com"); 742 const GURL url("http://www.google.com");
747 contents->controller()->LoadURL(url, PageTransition::TYPED); 743 contents->controller()->LoadURL(url, PageTransition::TYPED);
748 ViewHostMsg_FrameNavigate_Params params1; 744 ViewHostMsg_FrameNavigate_Params params1;
749 InitNavigateParams(&params1, 1, url); 745 InitNavigateParams(&params1, 1, url);
750 contents->TestDidNavigate(orig_rvh, params1); 746 contents->TestDidNavigate(orig_rvh, params1);
751 747
752 // Navigate to new site 748 // Navigate to new site
753 const GURL url2("https://www.google.com"); 749 const GURL url2("https://www.google.com");
(...skipping 21 matching lines...) Expand all
775 EXPECT_TRUE(contents->state_is_leaving_interstitial()); 771 EXPECT_TRUE(contents->state_is_leaving_interstitial());
776 EXPECT_EQ(interstitial_rvh, contents->render_view_host()); 772 EXPECT_EQ(interstitial_rvh, contents->render_view_host());
777 EXPECT_EQ(orig_rvh, contents->original_rvh()); 773 EXPECT_EQ(orig_rvh, contents->original_rvh());
778 EXPECT_EQ(pending_rvh, contents->pending_rvh()); 774 EXPECT_EQ(pending_rvh, contents->pending_rvh());
779 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 775 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
780 776
781 // DidNavigate from the destination page should transition to new renderer 777 // DidNavigate from the destination page should transition to new renderer
782 ViewHostMsg_FrameNavigate_Params params3; 778 ViewHostMsg_FrameNavigate_Params params3;
783 InitNavigateParams(&params3, 2, url2); 779 InitNavigateParams(&params3, 2, url2);
784 contents->TestDidNavigate(pending_rvh, params3); 780 contents->TestDidNavigate(pending_rvh, params3);
785 SiteInstance* instance2 = contents->site_instance(); 781 SiteInstance* instance2 = contents->GetSiteInstance();
786 EXPECT_TRUE(contents->state_is_normal()); 782 EXPECT_TRUE(contents->state_is_normal());
787 EXPECT_EQ(pending_rvh, contents->render_view_host()); 783 EXPECT_EQ(pending_rvh, contents->render_view_host());
788 EXPECT_TRUE(contents->original_rvh() == NULL); 784 EXPECT_TRUE(contents->original_rvh() == NULL);
789 EXPECT_TRUE(contents->pending_rvh() == NULL); 785 EXPECT_TRUE(contents->pending_rvh() == NULL);
790 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 786 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
791 EXPECT_NE(instance1, instance2); 787 EXPECT_NE(instance1, instance2);
792 EXPECT_EQ(orig_rvh_delete_count, 1); // The original should be gone. 788 EXPECT_EQ(orig_rvh_delete_count, 1); // The original should be gone.
793 789
794 // Since we were viewing a page before, we should be able to go back. 790 // Since we were viewing a page before, we should be able to go back.
795 EXPECT_TRUE(contents->controller()->CanGoBack()); 791 EXPECT_TRUE(contents->controller()->CanGoBack());
796 792
797 // Going back should switch SiteInstances again. The first SiteInstance is 793 // Going back should switch SiteInstances again. The first SiteInstance is
798 // stored in the NavigationEntry, so it should be the same as at the start. 794 // stored in the NavigationEntry, so it should be the same as at the start.
799 contents->controller()->GoBack(); 795 contents->controller()->GoBack();
800 TestRenderViewHost* goback_rvh = contents->pending_rvh(); 796 TestRenderViewHost* goback_rvh = contents->pending_rvh();
801 EXPECT_TRUE(contents->state_is_pending()); 797 EXPECT_TRUE(contents->state_is_pending());
802 798
803 // DidNavigate from the back action 799 // DidNavigate from the back action
804 contents->TestDidNavigate(goback_rvh, params1); 800 contents->TestDidNavigate(goback_rvh, params1);
805 EXPECT_TRUE(contents->state_is_normal()); 801 EXPECT_TRUE(contents->state_is_normal());
806 EXPECT_EQ(goback_rvh, contents->render_view_host()); 802 EXPECT_EQ(goback_rvh, contents->render_view_host());
807 EXPECT_EQ(instance1, contents->site_instance()); 803 EXPECT_EQ(instance1, contents->GetSiteInstance());
808 EXPECT_EQ(pending_rvh_delete_count, 1); // The second page's rvh should die. 804 EXPECT_EQ(pending_rvh_delete_count, 1); // The second page's rvh should die.
809 } 805 }
810 806
811 // Tests that we can transition away from an interstitial page. 807 // Tests that we can transition away from an interstitial page.
812 TEST_F(WebContentsTest, CrossSiteInterstitialThenNavigate) { 808 TEST_F(WebContentsTest, CrossSiteInterstitialThenNavigate) {
813 contents->transition_cross_site = true; 809 contents->transition_cross_site = true;
814 int orig_rvh_delete_count = 0; 810 int orig_rvh_delete_count = 0;
815 TestRenderViewHost* orig_rvh = contents->rvh(); 811 TestRenderViewHost* orig_rvh = contents->rvh();
816 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 812 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
817 813
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 contents->TestDidNavigate(new_rvh, params3); 976 contents->TestDidNavigate(new_rvh, params3);
981 EXPECT_TRUE(contents->state_is_normal()); 977 EXPECT_TRUE(contents->state_is_normal());
982 EXPECT_EQ(new_rvh, contents->render_view_host()); 978 EXPECT_EQ(new_rvh, contents->render_view_host());
983 } 979 }
984 980
985 // Test that opening a new tab in the same SiteInstance and then navigating 981 // Test that opening a new tab in the same SiteInstance and then navigating
986 // both tabs to a new site will place both tabs in a single SiteInstance. 982 // both tabs to a new site will place both tabs in a single SiteInstance.
987 TEST_F(WebContentsTest, NavigateTwoTabsCrossSite) { 983 TEST_F(WebContentsTest, NavigateTwoTabsCrossSite) {
988 contents->transition_cross_site = true; 984 contents->transition_cross_site = true;
989 TestRenderViewHost* orig_rvh = contents->rvh(); 985 TestRenderViewHost* orig_rvh = contents->rvh();
990 SiteInstance* instance1 = contents->site_instance(); 986 SiteInstance* instance1 = contents->GetSiteInstance();
991 987
992 // Navigate to URL. First URL should use first RenderViewHost. 988 // Navigate to URL. First URL should use first RenderViewHost.
993 const GURL url("http://www.google.com"); 989 const GURL url("http://www.google.com");
994 contents->controller()->LoadURL(url, PageTransition::TYPED); 990 contents->controller()->LoadURL(url, PageTransition::TYPED);
995 ViewHostMsg_FrameNavigate_Params params1; 991 ViewHostMsg_FrameNavigate_Params params1;
996 InitNavigateParams(&params1, 1, url); 992 InitNavigateParams(&params1, 1, url);
997 contents->TestDidNavigate(orig_rvh, params1); 993 contents->TestDidNavigate(orig_rvh, params1);
998 994
999 // Open a new tab with the same SiteInstance, navigated to the same site. 995 // Open a new tab with the same SiteInstance, navigated to the same site.
1000 TestWebContents* contents2 = new TestWebContents(profile.get(), instance1); 996 TestWebContents* contents2 = new TestWebContents(profile.get(), instance1);
1001 contents2->transition_cross_site = true; 997 contents2->transition_cross_site = true;
1002 contents2->SetupController(profile.get()); 998 contents2->SetupController(profile.get());
1003 contents2->controller()->LoadURL(url, PageTransition::TYPED); 999 contents2->controller()->LoadURL(url, PageTransition::TYPED);
1004 contents2->TestDidNavigate(contents2->rvh(), params1); 1000 contents2->TestDidNavigate(contents2->rvh(), params1);
1005 1001
1006 // Navigate first tab to a new site 1002 // Navigate first tab to a new site
1007 const GURL url2a("http://www.yahoo.com"); 1003 const GURL url2a("http://www.yahoo.com");
1008 contents->controller()->LoadURL(url2a, PageTransition::TYPED); 1004 contents->controller()->LoadURL(url2a, PageTransition::TYPED);
1009 TestRenderViewHost* pending_rvh_a = contents->pending_rvh(); 1005 TestRenderViewHost* pending_rvh_a = contents->pending_rvh();
1010 ViewHostMsg_FrameNavigate_Params params2a; 1006 ViewHostMsg_FrameNavigate_Params params2a;
1011 InitNavigateParams(&params2a, 1, url2a); 1007 InitNavigateParams(&params2a, 1, url2a);
1012 contents->TestDidNavigate(pending_rvh_a, params2a); 1008 contents->TestDidNavigate(pending_rvh_a, params2a);
1013 SiteInstance* instance2a = contents->site_instance(); 1009 SiteInstance* instance2a = contents->GetSiteInstance();
1014 EXPECT_NE(instance1, instance2a); 1010 EXPECT_NE(instance1, instance2a);
1015 1011
1016 // Navigate second tab to the same site as the first tab 1012 // Navigate second tab to the same site as the first tab
1017 const GURL url2b("http://mail.yahoo.com"); 1013 const GURL url2b("http://mail.yahoo.com");
1018 contents2->controller()->LoadURL(url2b, PageTransition::TYPED); 1014 contents2->controller()->LoadURL(url2b, PageTransition::TYPED);
1019 TestRenderViewHost* pending_rvh_b = contents2->pending_rvh(); 1015 TestRenderViewHost* pending_rvh_b = contents2->pending_rvh();
1020 EXPECT_TRUE(pending_rvh_b != NULL); 1016 EXPECT_TRUE(pending_rvh_b != NULL);
1021 EXPECT_TRUE(contents2->state_is_pending()); 1017 EXPECT_TRUE(contents2->state_is_pending());
1022 1018
1023 // NOTE(creis): We used to be in danger of showing a sad tab page here if the 1019 // NOTE(creis): We used to be in danger of showing a sad tab page here if the
1024 // second tab hadn't navigated somewhere first (bug 1145430). That case is 1020 // second tab hadn't navigated somewhere first (bug 1145430). That case is
1025 // now covered by the CrossSiteBoundariesAfterCrash test. 1021 // now covered by the CrossSiteBoundariesAfterCrash test.
1026 1022
1027 ViewHostMsg_FrameNavigate_Params params2b; 1023 ViewHostMsg_FrameNavigate_Params params2b;
1028 InitNavigateParams(&params2b, 2, url2b); 1024 InitNavigateParams(&params2b, 2, url2b);
1029 contents2->TestDidNavigate(pending_rvh_b, params2b); 1025 contents2->TestDidNavigate(pending_rvh_b, params2b);
1030 SiteInstance* instance2b = contents2->site_instance(); 1026 SiteInstance* instance2b = contents2->GetSiteInstance();
1031 EXPECT_NE(instance1, instance2b); 1027 EXPECT_NE(instance1, instance2b);
1032 1028
1033 // Both tabs should now be in the same SiteInstance. 1029 // Both tabs should now be in the same SiteInstance.
1034 EXPECT_EQ(instance2a, instance2b); 1030 EXPECT_EQ(instance2a, instance2b);
1035 1031
1036 contents2->CloseContents(); 1032 contents2->CloseContents();
1037 } 1033 }
1038 1034
1039 // Tests that WebContents uses the current URL, not the SiteInstance's site, to 1035 // Tests that WebContents uses the current URL, not the SiteInstance's site, to
1040 // determine whether a navigation is cross-site. 1036 // determine whether a navigation is cross-site.
1041 TEST_F(WebContentsTest, CrossSiteComparesAgainstCurrentPage) { 1037 TEST_F(WebContentsTest, CrossSiteComparesAgainstCurrentPage) {
1042 contents->transition_cross_site = true; 1038 contents->transition_cross_site = true;
1043 TestRenderViewHost* orig_rvh = contents->rvh(); 1039 TestRenderViewHost* orig_rvh = contents->rvh();
1044 SiteInstance* instance1 = contents->site_instance(); 1040 SiteInstance* instance1 = contents->GetSiteInstance();
1045 1041
1046 // Navigate to URL. 1042 // Navigate to URL.
1047 const GURL url("http://www.google.com"); 1043 const GURL url("http://www.google.com");
1048 contents->controller()->LoadURL(url, PageTransition::TYPED); 1044 contents->controller()->LoadURL(url, PageTransition::TYPED);
1049 ViewHostMsg_FrameNavigate_Params params1; 1045 ViewHostMsg_FrameNavigate_Params params1;
1050 InitNavigateParams(&params1, 1, url); 1046 InitNavigateParams(&params1, 1, url);
1051 contents->TestDidNavigate(orig_rvh, params1); 1047 contents->TestDidNavigate(orig_rvh, params1);
1052 1048
1053 // Open a related tab to a second site. 1049 // Open a related tab to a second site.
1054 TestWebContents* contents2 = new TestWebContents(profile.get(), instance1); 1050 TestWebContents* contents2 = new TestWebContents(profile.get(), instance1);
1055 contents2->transition_cross_site = true; 1051 contents2->transition_cross_site = true;
1056 contents2->SetupController(profile.get()); 1052 contents2->SetupController(profile.get());
1057 const GURL url2("http://www.yahoo.com"); 1053 const GURL url2("http://www.yahoo.com");
1058 contents2->controller()->LoadURL(url2, PageTransition::TYPED); 1054 contents2->controller()->LoadURL(url2, PageTransition::TYPED);
1059 // The first RVH in contents2 isn't live yet, so we shortcut the PENDING 1055 // The first RVH in contents2 isn't live yet, so we shortcut the PENDING
1060 // state and go straight to NORMAL. 1056 // state and go straight to NORMAL.
1061 TestRenderViewHost* rvh2 = contents2->rvh(); 1057 TestRenderViewHost* rvh2 = contents2->rvh();
1062 EXPECT_TRUE(contents2->state_is_normal()); 1058 EXPECT_TRUE(contents2->state_is_normal());
1063 ViewHostMsg_FrameNavigate_Params params2; 1059 ViewHostMsg_FrameNavigate_Params params2;
1064 InitNavigateParams(&params2, 2, url2); 1060 InitNavigateParams(&params2, 2, url2);
1065 contents2->TestDidNavigate(rvh2, params2); 1061 contents2->TestDidNavigate(rvh2, params2);
1066 SiteInstance* instance2 = contents2->site_instance(); 1062 SiteInstance* instance2 = contents2->GetSiteInstance();
1067 EXPECT_NE(instance1, instance2); 1063 EXPECT_NE(instance1, instance2);
1068 EXPECT_TRUE(contents2->state_is_normal()); 1064 EXPECT_TRUE(contents2->state_is_normal());
1069 1065
1070 // Simulate a link click in first tab to second site. Doesn't switch 1066 // Simulate a link click in first tab to second site. Doesn't switch
1071 // SiteInstances, because we don't intercept WebKit navigations. 1067 // SiteInstances, because we don't intercept WebKit navigations.
1072 ViewHostMsg_FrameNavigate_Params params3; 1068 ViewHostMsg_FrameNavigate_Params params3;
1073 InitNavigateParams(&params3, 2, url2); 1069 InitNavigateParams(&params3, 2, url2);
1074 contents->TestDidNavigate(orig_rvh, params3); 1070 contents->TestDidNavigate(orig_rvh, params3);
1075 SiteInstance* instance3 = contents->site_instance(); 1071 SiteInstance* instance3 = contents->GetSiteInstance();
1076 EXPECT_EQ(instance1, instance3); 1072 EXPECT_EQ(instance1, instance3);
1077 EXPECT_TRUE(contents->state_is_normal()); 1073 EXPECT_TRUE(contents->state_is_normal());
1078 1074
1079 // Navigate to the new site. Doesn't switch SiteInstancees, because we 1075 // Navigate to the new site. Doesn't switch SiteInstancees, because we
1080 // compare against the current URL, not the SiteInstance's site. 1076 // compare against the current URL, not the SiteInstance's site.
1081 const GURL url3("http://mail.yahoo.com"); 1077 const GURL url3("http://mail.yahoo.com");
1082 contents->controller()->LoadURL(url3, PageTransition::TYPED); 1078 contents->controller()->LoadURL(url3, PageTransition::TYPED);
1083 EXPECT_TRUE(contents->state_is_normal()); 1079 EXPECT_TRUE(contents->state_is_normal());
1084 ViewHostMsg_FrameNavigate_Params params4; 1080 ViewHostMsg_FrameNavigate_Params params4;
1085 InitNavigateParams(&params4, 3, url3); 1081 InitNavigateParams(&params4, 3, url3);
1086 contents->TestDidNavigate(orig_rvh, params4); 1082 contents->TestDidNavigate(orig_rvh, params4);
1087 SiteInstance* instance4 = contents->site_instance(); 1083 SiteInstance* instance4 = contents->GetSiteInstance();
1088 EXPECT_EQ(instance1, instance4); 1084 EXPECT_EQ(instance1, instance4);
1089 1085
1090 contents2->CloseContents(); 1086 contents2->CloseContents();
1091 } 1087 }
1092 1088
1093 // Test that the onbeforeunload and onunload handlers run when navigating 1089 // Test that the onbeforeunload and onunload handlers run when navigating
1094 // across site boundaries. 1090 // across site boundaries.
1095 TEST_F(WebContentsTest, CrossSiteUnloadHandlers) { 1091 TEST_F(WebContentsTest, CrossSiteUnloadHandlers) {
1096 contents->transition_cross_site = true; 1092 contents->transition_cross_site = true;
1097 TestRenderViewHost* orig_rvh = contents->rvh(); 1093 TestRenderViewHost* orig_rvh = contents->rvh();
1098 SiteInstance* instance1 = contents->site_instance(); 1094 SiteInstance* instance1 = contents->GetSiteInstance();
1099 1095
1100 // Navigate to URL. First URL should use first RenderViewHost. 1096 // Navigate to URL. First URL should use first RenderViewHost.
1101 const GURL url("http://www.google.com"); 1097 const GURL url("http://www.google.com");
1102 contents->controller()->LoadURL(url, PageTransition::TYPED); 1098 contents->controller()->LoadURL(url, PageTransition::TYPED);
1103 ViewHostMsg_FrameNavigate_Params params1; 1099 ViewHostMsg_FrameNavigate_Params params1;
1104 InitNavigateParams(&params1, 1, url); 1100 InitNavigateParams(&params1, 1, url);
1105 contents->TestDidNavigate(orig_rvh, params1); 1101 contents->TestDidNavigate(orig_rvh, params1);
1106 EXPECT_TRUE(contents->state_is_normal()); 1102 EXPECT_TRUE(contents->state_is_normal());
1107 EXPECT_EQ(orig_rvh, contents->render_view_host()); 1103 EXPECT_EQ(orig_rvh, contents->render_view_host());
1108 1104
(...skipping 12 matching lines...) Expand all
1121 TestRenderViewHost* pending_rvh = contents->pending_rvh(); 1117 TestRenderViewHost* pending_rvh = contents->pending_rvh();
1122 1118
1123 // We won't hear DidNavigate until the onunload handler has finished running. 1119 // We won't hear DidNavigate until the onunload handler has finished running.
1124 // (No way to simulate that here, but it involves a call from RDH to 1120 // (No way to simulate that here, but it involves a call from RDH to
1125 // WebContents::OnCrossSiteResponse.) 1121 // WebContents::OnCrossSiteResponse.)
1126 1122
1127 // DidNavigate from the pending page 1123 // DidNavigate from the pending page
1128 ViewHostMsg_FrameNavigate_Params params2; 1124 ViewHostMsg_FrameNavigate_Params params2;
1129 InitNavigateParams(&params2, 1, url2); 1125 InitNavigateParams(&params2, 1, url2);
1130 contents->TestDidNavigate(pending_rvh, params2); 1126 contents->TestDidNavigate(pending_rvh, params2);
1131 SiteInstance* instance2 = contents->site_instance(); 1127 SiteInstance* instance2 = contents->GetSiteInstance();
1132 EXPECT_TRUE(contents->state_is_normal()); 1128 EXPECT_TRUE(contents->state_is_normal());
1133 EXPECT_EQ(pending_rvh, contents->render_view_host()); 1129 EXPECT_EQ(pending_rvh, contents->render_view_host());
1134 EXPECT_NE(instance1, instance2); 1130 EXPECT_NE(instance1, instance2);
1135 EXPECT_TRUE(contents->pending_rvh() == NULL); 1131 EXPECT_TRUE(contents->pending_rvh() == NULL);
1136 EXPECT_TRUE(contents->original_rvh() == NULL); 1132 EXPECT_TRUE(contents->original_rvh() == NULL);
1137 EXPECT_TRUE(contents->interstitial_rvh() == NULL); 1133 EXPECT_TRUE(contents->interstitial_rvh() == NULL);
1138 } 1134 }
1139 1135
1140 // Test that NavigationEntries have the correct content state after going 1136 // Test that NavigationEntries have the correct content state after going
1141 // forward and back. Prevents regression for bug 1116137. 1137 // forward and back. Prevents regression for bug 1116137.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 ViewHostMsg_FrameNavigate_Params params1; 1182 ViewHostMsg_FrameNavigate_Params params1;
1187 InitNavigateParams(&params1, 1, url); 1183 InitNavigateParams(&params1, 1, url);
1188 contents->TestDidNavigate(orig_rvh, params1); 1184 contents->TestDidNavigate(orig_rvh, params1);
1189 contents->TestDidNavigate(orig_rvh, params1); 1185 contents->TestDidNavigate(orig_rvh, params1);
1190 1186
1191 // Should have a content state here. 1187 // Should have a content state here.
1192 NavigationEntry* entry = contents->controller()->GetLastCommittedEntry(); 1188 NavigationEntry* entry = contents->controller()->GetLastCommittedEntry();
1193 EXPECT_FALSE(entry->content_state().empty()); 1189 EXPECT_FALSE(entry->content_state().empty());
1194 } 1190 }
1195 1191
1196 // Tests that IsInPageNavigation returns appropriate results. Prevents
1197 // regression for bug 1126349.
1198 TEST_F(WebContentsTest, IsInPageNavigation) {
1199 TestRenderViewHost* rvh = contents->rvh();
1200
1201 // Navigate to URL with no refs.
1202 const GURL url("http://www.google.com/home.html");
1203 contents->controller()->LoadURL(url, PageTransition::TYPED);
1204 ViewHostMsg_FrameNavigate_Params params;
1205 InitNavigateParams(&params, 1, url);
1206 contents->TestDidNavigate(rvh, params);
1207
1208 // Reloading the page is not an in-page navigation.
1209 EXPECT_FALSE(contents->TestIsInPageNavigation(url));
1210 const GURL other_url("http://www.google.com/add.html");
1211 EXPECT_FALSE(contents->TestIsInPageNavigation(other_url));
1212 const GURL url_with_ref("http://www.google.com/home.html#my_ref");
1213 EXPECT_TRUE(contents->TestIsInPageNavigation(url_with_ref));
1214
1215 // Navigate to URL with refs.
1216 contents->controller()->LoadURL(url_with_ref, PageTransition::TYPED);
1217 InitNavigateParams(&params, 2, url_with_ref);
1218 contents->TestDidNavigate(rvh, params);
1219
1220 // Reloading the page is not an in-page navigation.
1221 EXPECT_FALSE(contents->TestIsInPageNavigation(url_with_ref));
1222 EXPECT_FALSE(contents->TestIsInPageNavigation(url));
1223 EXPECT_FALSE(contents->TestIsInPageNavigation(other_url));
1224 const GURL other_url_with_ref("http://www.google.com/home.html#my_other_ref");
1225 EXPECT_TRUE(contents->TestIsInPageNavigation(other_url_with_ref));
1226 }
1227
1228 // Tests to see that webkit preferences are properly loaded and copied over 1192 // Tests to see that webkit preferences are properly loaded and copied over
1229 // to a WebPreferences object. 1193 // to a WebPreferences object.
1230 TEST_F(WebContentsTest, WebKitPrefs) { 1194 TEST_F(WebContentsTest, WebKitPrefs) {
1231 WebPreferences webkit_prefs = contents->TestGetWebkitPrefs(); 1195 WebPreferences webkit_prefs = contents->TestGetWebkitPrefs();
1232 1196
1233 // These values have been overridden by the profile preferences. 1197 // These values have been overridden by the profile preferences.
1234 EXPECT_EQ(L"UTF-8", webkit_prefs.default_encoding); 1198 EXPECT_EQ(L"UTF-8", webkit_prefs.default_encoding);
1235 EXPECT_EQ(20, webkit_prefs.default_font_size); 1199 EXPECT_EQ(20, webkit_prefs.default_font_size);
1236 EXPECT_EQ(false, webkit_prefs.text_areas_are_resizable); 1200 EXPECT_EQ(false, webkit_prefs.text_areas_are_resizable);
1237 EXPECT_EQ(true, webkit_prefs.uses_universal_detector); 1201 EXPECT_EQ(true, webkit_prefs.uses_universal_detector);
1238 1202
1239 // These should still be the default values. 1203 // These should still be the default values.
1240 EXPECT_EQ(L"Times New Roman", webkit_prefs.standard_font_family); 1204 EXPECT_EQ(L"Times New Roman", webkit_prefs.standard_font_family);
1241 EXPECT_EQ(true, webkit_prefs.javascript_enabled); 1205 EXPECT_EQ(true, webkit_prefs.javascript_enabled);
1242 } 1206 }
1243 1207
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698