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

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

Issue 135723003: Move DidCommitProvisionalLoad code from RenderView to RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed unit tests and removed WebContents::DidNavigate Created 6 years, 10 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 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/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 NavigationControllerImpl& controller = controller_impl(); 270 NavigationControllerImpl& controller = controller_impl();
271 TestNotificationTracker notifications; 271 TestNotificationTracker notifications;
272 RegisterForAllNavNotifications(&notifications, &controller); 272 RegisterForAllNavNotifications(&notifications, &controller);
273 273
274 const int kNumUrls = 5; 274 const int kNumUrls = 5;
275 std::vector<GURL> urls(kNumUrls); 275 std::vector<GURL> urls(kNumUrls);
276 for (int i = 0; i < kNumUrls; ++i) { 276 for (int i = 0; i < kNumUrls; ++i) {
277 urls[i] = GURL(base::StringPrintf("http://www.a.com/%d", i)); 277 urls[i] = GURL(base::StringPrintf("http://www.a.com/%d", i));
278 } 278 }
279 279
280 test_rvh()->SendNavigate(0, urls[0]); 280 main_test_rfh()->SendNavigate(0, urls[0]);
281 EXPECT_EQ(1U, navigation_entry_committed_counter_); 281 EXPECT_EQ(1U, navigation_entry_committed_counter_);
282 navigation_entry_committed_counter_ = 0; 282 navigation_entry_committed_counter_ = 0;
283 EXPECT_EQ(urls[0], controller.GetVisibleEntry()->GetVirtualURL()); 283 EXPECT_EQ(urls[0], controller.GetVisibleEntry()->GetVirtualURL());
284 EXPECT_FALSE(controller.CanGoBack()); 284 EXPECT_FALSE(controller.CanGoBack());
285 EXPECT_FALSE(controller.CanGoForward()); 285 EXPECT_FALSE(controller.CanGoForward());
286 EXPECT_FALSE(controller.CanGoToOffset(1)); 286 EXPECT_FALSE(controller.CanGoToOffset(1));
287 287
288 for (int i = 1; i <= 4; ++i) { 288 for (int i = 1; i <= 4; ++i) {
289 test_rvh()->SendNavigate(i, urls[i]); 289 main_test_rfh()->SendNavigate(i, urls[i]);
290 EXPECT_EQ(1U, navigation_entry_committed_counter_); 290 EXPECT_EQ(1U, navigation_entry_committed_counter_);
291 navigation_entry_committed_counter_ = 0; 291 navigation_entry_committed_counter_ = 0;
292 EXPECT_EQ(urls[i], controller.GetVisibleEntry()->GetVirtualURL()); 292 EXPECT_EQ(urls[i], controller.GetVisibleEntry()->GetVirtualURL());
293 EXPECT_TRUE(controller.CanGoToOffset(-i)); 293 EXPECT_TRUE(controller.CanGoToOffset(-i));
294 EXPECT_FALSE(controller.CanGoToOffset(-(i + 1))); 294 EXPECT_FALSE(controller.CanGoToOffset(-(i + 1)));
295 EXPECT_FALSE(controller.CanGoToOffset(1)); 295 EXPECT_FALSE(controller.CanGoToOffset(1));
296 } 296 }
297 297
298 // We have loaded 5 pages, and are currently at the last-loaded page. 298 // We have loaded 5 pages, and are currently at the last-loaded page.
299 int url_index = 4; 299 int url_index = 4;
(...skipping 14 matching lines...) Expand all
314 GO_TO_BEGINNING, 314 GO_TO_BEGINNING,
315 GO_TO_END 315 GO_TO_END
316 }; 316 };
317 317
318 for (int test = 0; test < NUM_TESTS; ++test) { 318 for (int test = 0; test < NUM_TESTS; ++test) {
319 int offset = test_offsets[test]; 319 int offset = test_offsets[test];
320 controller.GoToOffset(offset); 320 controller.GoToOffset(offset);
321 url_index += offset; 321 url_index += offset;
322 // Check that the GoToOffset will land on the expected page. 322 // Check that the GoToOffset will land on the expected page.
323 EXPECT_EQ(urls[url_index], controller.GetPendingEntry()->GetVirtualURL()); 323 EXPECT_EQ(urls[url_index], controller.GetPendingEntry()->GetVirtualURL());
324 test_rvh()->SendNavigate(url_index, urls[url_index]); 324 main_test_rfh()->SendNavigate(url_index, urls[url_index]);
325 EXPECT_EQ(1U, navigation_entry_committed_counter_); 325 EXPECT_EQ(1U, navigation_entry_committed_counter_);
326 navigation_entry_committed_counter_ = 0; 326 navigation_entry_committed_counter_ = 0;
327 // Check that we can go to any valid offset into the history. 327 // Check that we can go to any valid offset into the history.
328 for (size_t j = 0; j < urls.size(); ++j) 328 for (size_t j = 0; j < urls.size(); ++j)
329 EXPECT_TRUE(controller.CanGoToOffset(j - url_index)); 329 EXPECT_TRUE(controller.CanGoToOffset(j - url_index));
330 // Check that we can't go beyond the beginning or end of the history. 330 // Check that we can't go beyond the beginning or end of the history.
331 EXPECT_FALSE(controller.CanGoToOffset(-(url_index + 1))); 331 EXPECT_FALSE(controller.CanGoToOffset(-(url_index + 1)));
332 EXPECT_FALSE(controller.CanGoToOffset(urls.size() - url_index)); 332 EXPECT_FALSE(controller.CanGoToOffset(urls.size() - url_index));
333 } 333 }
334 } 334 }
(...skipping 22 matching lines...) Expand all
357 EXPECT_FALSE(controller.CanGoForward()); 357 EXPECT_FALSE(controller.CanGoForward());
358 EXPECT_EQ(contents()->GetMaxPageID(), -1); 358 EXPECT_EQ(contents()->GetMaxPageID(), -1);
359 359
360 // Neither the timestamp nor the status code should have been set yet. 360 // Neither the timestamp nor the status code should have been set yet.
361 EXPECT_TRUE(controller.GetPendingEntry()->GetTimestamp().is_null()); 361 EXPECT_TRUE(controller.GetPendingEntry()->GetTimestamp().is_null());
362 EXPECT_EQ(0, controller.GetPendingEntry()->GetHttpStatusCode()); 362 EXPECT_EQ(0, controller.GetPendingEntry()->GetHttpStatusCode());
363 363
364 // We should have gotten no notifications from the preceeding checks. 364 // We should have gotten no notifications from the preceeding checks.
365 EXPECT_EQ(0U, notifications.size()); 365 EXPECT_EQ(0U, notifications.size());
366 366
367 test_rvh()->SendNavigate(0, url1); 367 main_test_rfh()->SendNavigate(0, url1);
368 EXPECT_EQ(1U, navigation_entry_committed_counter_); 368 EXPECT_EQ(1U, navigation_entry_committed_counter_);
369 navigation_entry_committed_counter_ = 0; 369 navigation_entry_committed_counter_ = 0;
370 370
371 // The load should now be committed. 371 // The load should now be committed.
372 EXPECT_EQ(controller.GetEntryCount(), 1); 372 EXPECT_EQ(controller.GetEntryCount(), 1);
373 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 373 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
374 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 374 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
375 EXPECT_TRUE(controller.GetLastCommittedEntry()); 375 EXPECT_TRUE(controller.GetLastCommittedEntry());
376 EXPECT_FALSE(controller.GetPendingEntry()); 376 EXPECT_FALSE(controller.GetPendingEntry());
377 ASSERT_TRUE(controller.GetVisibleEntry()); 377 ASSERT_TRUE(controller.GetVisibleEntry());
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 438
439 // Set the clock to always return a timestamp of 1. 439 // Set the clock to always return a timestamp of 1.
440 controller.SetGetTimestampCallbackForTest( 440 controller.SetGetTimestampCallbackForTest(
441 base::Bind(&GetFixedTime, base::Time::FromInternalValue(1))); 441 base::Bind(&GetFixedTime, base::Time::FromInternalValue(1)));
442 442
443 const GURL url1("http://foo1"); 443 const GURL url1("http://foo1");
444 const GURL url2("http://foo2"); 444 const GURL url2("http://foo2");
445 445
446 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 446 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
447 447
448 test_rvh()->SendNavigate(0, url1); 448 main_test_rfh()->SendNavigate(0, url1);
449 EXPECT_EQ(1U, navigation_entry_committed_counter_); 449 EXPECT_EQ(1U, navigation_entry_committed_counter_);
450 navigation_entry_committed_counter_ = 0; 450 navigation_entry_committed_counter_ = 0;
451 451
452 // Load another... 452 // Load another...
453 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 453 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
454 454
455 // Simulate the beforeunload ack for the cross-site transition, and then the 455 // Simulate the beforeunload ack for the cross-site transition, and then the
456 // commit. 456 // commit.
457 test_rvh()->SendShouldCloseACK(true); 457 test_rvh()->SendShouldCloseACK(true);
458 test_rvh()->SendNavigate(1, url2); 458 main_test_rfh()->SendNavigate(1, url2);
459 EXPECT_EQ(1U, navigation_entry_committed_counter_); 459 EXPECT_EQ(1U, navigation_entry_committed_counter_);
460 navigation_entry_committed_counter_ = 0; 460 navigation_entry_committed_counter_ = 0;
461 461
462 // The two loads should now be committed. 462 // The two loads should now be committed.
463 ASSERT_EQ(controller.GetEntryCount(), 2); 463 ASSERT_EQ(controller.GetEntryCount(), 2);
464 464
465 // Timestamps should be distinct despite the clock returning the 465 // Timestamps should be distinct despite the clock returning the
466 // same value. 466 // same value.
467 EXPECT_EQ(1u, 467 EXPECT_EQ(1u,
468 controller.GetEntryAtIndex(0)->GetTimestamp().ToInternalValue()); 468 controller.GetEntryAtIndex(0)->GetTimestamp().ToInternalValue());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 // the load commits (because WebCore didn't actually make a new entry). 571 // the load commits (because WebCore didn't actually make a new entry).
572 TEST_F(NavigationControllerTest, LoadURL_SamePage) { 572 TEST_F(NavigationControllerTest, LoadURL_SamePage) {
573 NavigationControllerImpl& controller = controller_impl(); 573 NavigationControllerImpl& controller = controller_impl();
574 TestNotificationTracker notifications; 574 TestNotificationTracker notifications;
575 RegisterForAllNavNotifications(&notifications, &controller); 575 RegisterForAllNavNotifications(&notifications, &controller);
576 576
577 const GURL url1("http://foo1"); 577 const GURL url1("http://foo1");
578 578
579 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 579 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
580 EXPECT_EQ(0U, notifications.size()); 580 EXPECT_EQ(0U, notifications.size());
581 test_rvh()->SendNavigate(0, url1); 581 main_test_rfh()->SendNavigate(0, url1);
582 EXPECT_EQ(1U, navigation_entry_committed_counter_); 582 EXPECT_EQ(1U, navigation_entry_committed_counter_);
583 navigation_entry_committed_counter_ = 0; 583 navigation_entry_committed_counter_ = 0;
584 584
585 ASSERT_TRUE(controller.GetVisibleEntry()); 585 ASSERT_TRUE(controller.GetVisibleEntry());
586 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp(); 586 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp();
587 EXPECT_FALSE(timestamp.is_null()); 587 EXPECT_FALSE(timestamp.is_null());
588 588
589 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 589 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
590 EXPECT_EQ(0U, notifications.size()); 590 EXPECT_EQ(0U, notifications.size());
591 test_rvh()->SendNavigate(0, url1); 591 main_test_rfh()->SendNavigate(0, url1);
592 EXPECT_EQ(1U, navigation_entry_committed_counter_); 592 EXPECT_EQ(1U, navigation_entry_committed_counter_);
593 navigation_entry_committed_counter_ = 0; 593 navigation_entry_committed_counter_ = 0;
594 594
595 // We should not have produced a new session history entry. 595 // We should not have produced a new session history entry.
596 EXPECT_EQ(controller.GetEntryCount(), 1); 596 EXPECT_EQ(controller.GetEntryCount(), 1);
597 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 597 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
598 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 598 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
599 EXPECT_TRUE(controller.GetLastCommittedEntry()); 599 EXPECT_TRUE(controller.GetLastCommittedEntry());
600 EXPECT_FALSE(controller.GetPendingEntry()); 600 EXPECT_FALSE(controller.GetPendingEntry());
601 ASSERT_TRUE(controller.GetVisibleEntry()); 601 ASSERT_TRUE(controller.GetVisibleEntry());
(...skipping 10 matching lines...) Expand all
612 // Load the same page twice, once as a GET and once as a POST. 612 // Load the same page twice, once as a GET and once as a POST.
613 // We should update the post state on the NavigationEntry. 613 // We should update the post state on the NavigationEntry.
614 TEST_F(NavigationControllerTest, LoadURL_SamePage_DifferentMethod) { 614 TEST_F(NavigationControllerTest, LoadURL_SamePage_DifferentMethod) {
615 NavigationControllerImpl& controller = controller_impl(); 615 NavigationControllerImpl& controller = controller_impl();
616 TestNotificationTracker notifications; 616 TestNotificationTracker notifications;
617 RegisterForAllNavNotifications(&notifications, &controller); 617 RegisterForAllNavNotifications(&notifications, &controller);
618 618
619 const GURL url1("http://foo1"); 619 const GURL url1("http://foo1");
620 620
621 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 621 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
622 ViewHostMsg_FrameNavigate_Params params; 622 FrameHostMsg_DidCommitProvisionalLoad_Params params;
623 params.page_id = 0; 623 params.page_id = 0;
624 params.url = url1; 624 params.url = url1;
625 params.transition = PAGE_TRANSITION_TYPED; 625 params.transition = PAGE_TRANSITION_TYPED;
626 params.is_post = true; 626 params.is_post = true;
627 params.post_id = 123; 627 params.post_id = 123;
628 params.page_state = PageState::CreateForTesting(url1, false, 0, 0); 628 params.page_state = PageState::CreateForTesting(url1, false, 0, 0);
629 test_rvh()->SendNavigateWithParams(&params); 629 main_test_rfh()->SendNavigateWithParams(&params);
630 630
631 // The post data should be visible. 631 // The post data should be visible.
632 NavigationEntry* entry = controller.GetVisibleEntry(); 632 NavigationEntry* entry = controller.GetVisibleEntry();
633 ASSERT_TRUE(entry); 633 ASSERT_TRUE(entry);
634 EXPECT_TRUE(entry->GetHasPostData()); 634 EXPECT_TRUE(entry->GetHasPostData());
635 EXPECT_EQ(entry->GetPostID(), 123); 635 EXPECT_EQ(entry->GetPostID(), 123);
636 636
637 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 637 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
638 test_rvh()->SendNavigate(0, url1); 638 main_test_rfh()->SendNavigate(0, url1);
639 639
640 // We should not have produced a new session history entry. 640 // We should not have produced a new session history entry.
641 ASSERT_EQ(controller.GetVisibleEntry(), entry); 641 ASSERT_EQ(controller.GetVisibleEntry(), entry);
642 642
643 // The post data should have been cleared due to the GET. 643 // The post data should have been cleared due to the GET.
644 EXPECT_FALSE(entry->GetHasPostData()); 644 EXPECT_FALSE(entry->GetHasPostData());
645 EXPECT_EQ(entry->GetPostID(), 0); 645 EXPECT_EQ(entry->GetPostID(), 0);
646 } 646 }
647 647
648 // Tests loading a URL but discarding it before the load commits. 648 // Tests loading a URL but discarding it before the load commits.
649 TEST_F(NavigationControllerTest, LoadURL_Discarded) { 649 TEST_F(NavigationControllerTest, LoadURL_Discarded) {
650 NavigationControllerImpl& controller = controller_impl(); 650 NavigationControllerImpl& controller = controller_impl();
651 TestNotificationTracker notifications; 651 TestNotificationTracker notifications;
652 RegisterForAllNavNotifications(&notifications, &controller); 652 RegisterForAllNavNotifications(&notifications, &controller);
653 653
654 const GURL url1("http://foo1"); 654 const GURL url1("http://foo1");
655 const GURL url2("http://foo2"); 655 const GURL url2("http://foo2");
656 656
657 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 657 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
658 EXPECT_EQ(0U, notifications.size()); 658 EXPECT_EQ(0U, notifications.size());
659 test_rvh()->SendNavigate(0, url1); 659 main_test_rfh()->SendNavigate(0, url1);
660 EXPECT_EQ(1U, navigation_entry_committed_counter_); 660 EXPECT_EQ(1U, navigation_entry_committed_counter_);
661 navigation_entry_committed_counter_ = 0; 661 navigation_entry_committed_counter_ = 0;
662 662
663 ASSERT_TRUE(controller.GetVisibleEntry()); 663 ASSERT_TRUE(controller.GetVisibleEntry());
664 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp(); 664 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp();
665 EXPECT_FALSE(timestamp.is_null()); 665 EXPECT_FALSE(timestamp.is_null());
666 666
667 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 667 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
668 controller.DiscardNonCommittedEntries(); 668 controller.DiscardNonCommittedEntries();
669 EXPECT_EQ(0U, notifications.size()); 669 EXPECT_EQ(0U, notifications.size());
(...skipping 16 matching lines...) Expand all
686 // navigates from the web page, and here we test that there is no pending entry. 686 // navigates from the web page, and here we test that there is no pending entry.
687 TEST_F(NavigationControllerTest, LoadURL_NoPending) { 687 TEST_F(NavigationControllerTest, LoadURL_NoPending) {
688 NavigationControllerImpl& controller = controller_impl(); 688 NavigationControllerImpl& controller = controller_impl();
689 TestNotificationTracker notifications; 689 TestNotificationTracker notifications;
690 RegisterForAllNavNotifications(&notifications, &controller); 690 RegisterForAllNavNotifications(&notifications, &controller);
691 691
692 // First make an existing committed entry. 692 // First make an existing committed entry.
693 const GURL kExistingURL1("http://eh"); 693 const GURL kExistingURL1("http://eh");
694 controller.LoadURL( 694 controller.LoadURL(
695 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 695 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
696 test_rvh()->SendNavigate(0, kExistingURL1); 696 main_test_rfh()->SendNavigate(0, kExistingURL1);
697 EXPECT_EQ(1U, navigation_entry_committed_counter_); 697 EXPECT_EQ(1U, navigation_entry_committed_counter_);
698 navigation_entry_committed_counter_ = 0; 698 navigation_entry_committed_counter_ = 0;
699 699
700 // Do a new navigation without making a pending one. 700 // Do a new navigation without making a pending one.
701 const GURL kNewURL("http://see"); 701 const GURL kNewURL("http://see");
702 test_rvh()->SendNavigate(99, kNewURL); 702 main_test_rfh()->SendNavigate(99, kNewURL);
703 703
704 // There should no longer be any pending entry, and the third navigation we 704 // There should no longer be any pending entry, and the third navigation we
705 // just made should be committed. 705 // just made should be committed.
706 EXPECT_EQ(1U, navigation_entry_committed_counter_); 706 EXPECT_EQ(1U, navigation_entry_committed_counter_);
707 navigation_entry_committed_counter_ = 0; 707 navigation_entry_committed_counter_ = 0;
708 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 708 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
709 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 709 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
710 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); 710 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL());
711 } 711 }
712 712
713 // Tests navigating to a new URL when there is a new pending navigation that is 713 // Tests navigating to a new URL when there is a new pending navigation that is
714 // not the one that just loaded. This will happen if the user types in a URL to 714 // not the one that just loaded. This will happen if the user types in a URL to
715 // somewhere slow, and then navigates the current page before the typed URL 715 // somewhere slow, and then navigates the current page before the typed URL
716 // commits. 716 // commits.
717 TEST_F(NavigationControllerTest, LoadURL_NewPending) { 717 TEST_F(NavigationControllerTest, LoadURL_NewPending) {
718 NavigationControllerImpl& controller = controller_impl(); 718 NavigationControllerImpl& controller = controller_impl();
719 TestNotificationTracker notifications; 719 TestNotificationTracker notifications;
720 RegisterForAllNavNotifications(&notifications, &controller); 720 RegisterForAllNavNotifications(&notifications, &controller);
721 721
722 // First make an existing committed entry. 722 // First make an existing committed entry.
723 const GURL kExistingURL1("http://eh"); 723 const GURL kExistingURL1("http://eh");
724 controller.LoadURL( 724 controller.LoadURL(
725 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 725 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
726 test_rvh()->SendNavigate(0, kExistingURL1); 726 main_test_rfh()->SendNavigate(0, kExistingURL1);
727 EXPECT_EQ(1U, navigation_entry_committed_counter_); 727 EXPECT_EQ(1U, navigation_entry_committed_counter_);
728 navigation_entry_committed_counter_ = 0; 728 navigation_entry_committed_counter_ = 0;
729 729
730 // Make a pending entry to somewhere new. 730 // Make a pending entry to somewhere new.
731 const GURL kExistingURL2("http://bee"); 731 const GURL kExistingURL2("http://bee");
732 controller.LoadURL( 732 controller.LoadURL(
733 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 733 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
734 EXPECT_EQ(0U, notifications.size()); 734 EXPECT_EQ(0U, notifications.size());
735 735
736 // After the beforeunload but before it commits, do a new navigation. 736 // After the beforeunload but before it commits, do a new navigation.
(...skipping 16 matching lines...) Expand all
753 // they navigate somewhere new. 753 // they navigate somewhere new.
754 TEST_F(NavigationControllerTest, LoadURL_ExistingPending) { 754 TEST_F(NavigationControllerTest, LoadURL_ExistingPending) {
755 NavigationControllerImpl& controller = controller_impl(); 755 NavigationControllerImpl& controller = controller_impl();
756 TestNotificationTracker notifications; 756 TestNotificationTracker notifications;
757 RegisterForAllNavNotifications(&notifications, &controller); 757 RegisterForAllNavNotifications(&notifications, &controller);
758 758
759 // First make some history. 759 // First make some history.
760 const GURL kExistingURL1("http://foo/eh"); 760 const GURL kExistingURL1("http://foo/eh");
761 controller.LoadURL( 761 controller.LoadURL(
762 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 762 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
763 test_rvh()->SendNavigate(0, kExistingURL1); 763 main_test_rfh()->SendNavigate(0, kExistingURL1);
764 EXPECT_EQ(1U, navigation_entry_committed_counter_); 764 EXPECT_EQ(1U, navigation_entry_committed_counter_);
765 navigation_entry_committed_counter_ = 0; 765 navigation_entry_committed_counter_ = 0;
766 766
767 const GURL kExistingURL2("http://foo/bee"); 767 const GURL kExistingURL2("http://foo/bee");
768 controller.LoadURL( 768 controller.LoadURL(
769 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 769 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
770 test_rvh()->SendNavigate(1, kExistingURL2); 770 main_test_rfh()->SendNavigate(1, kExistingURL2);
771 EXPECT_EQ(1U, navigation_entry_committed_counter_); 771 EXPECT_EQ(1U, navigation_entry_committed_counter_);
772 navigation_entry_committed_counter_ = 0; 772 navigation_entry_committed_counter_ = 0;
773 773
774 // Now make a pending back/forward navigation. The zeroth entry should be 774 // Now make a pending back/forward navigation. The zeroth entry should be
775 // pending. 775 // pending.
776 controller.GoBack(); 776 controller.GoBack();
777 EXPECT_EQ(0U, notifications.size()); 777 EXPECT_EQ(0U, notifications.size());
778 EXPECT_EQ(0, controller.GetPendingEntryIndex()); 778 EXPECT_EQ(0, controller.GetPendingEntryIndex());
779 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 779 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
780 780
781 // Before that commits, do a new navigation. 781 // Before that commits, do a new navigation.
782 const GURL kNewURL("http://foo/see"); 782 const GURL kNewURL("http://foo/see");
783 LoadCommittedDetails details; 783 LoadCommittedDetails details;
784 test_rvh()->SendNavigate(3, kNewURL); 784 main_test_rfh()->SendNavigate(3, kNewURL);
785 785
786 // There should no longer be any pending entry, and the third navigation we 786 // There should no longer be any pending entry, and the third navigation we
787 // just made should be committed. 787 // just made should be committed.
788 EXPECT_EQ(1U, navigation_entry_committed_counter_); 788 EXPECT_EQ(1U, navigation_entry_committed_counter_);
789 navigation_entry_committed_counter_ = 0; 789 navigation_entry_committed_counter_ = 0;
790 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 790 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
791 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 791 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
792 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); 792 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL());
793 } 793 }
794 794
795 // Tests navigating to a new URL when there is a pending back/forward 795 // Tests navigating to a new URL when there is a pending back/forward
796 // navigation to a cross-process, privileged URL. This will happen if the user 796 // navigation to a cross-process, privileged URL. This will happen if the user
797 // hits back, but before that commits, they navigate somewhere new. 797 // hits back, but before that commits, they navigate somewhere new.
798 TEST_F(NavigationControllerTest, LoadURL_PrivilegedPending) { 798 TEST_F(NavigationControllerTest, LoadURL_PrivilegedPending) {
799 NavigationControllerImpl& controller = controller_impl(); 799 NavigationControllerImpl& controller = controller_impl();
800 TestNotificationTracker notifications; 800 TestNotificationTracker notifications;
801 RegisterForAllNavNotifications(&notifications, &controller); 801 RegisterForAllNavNotifications(&notifications, &controller);
802 802
803 // First make some history, starting with a privileged URL. 803 // First make some history, starting with a privileged URL.
804 const GURL kExistingURL1("http://privileged"); 804 const GURL kExistingURL1("http://privileged");
805 controller.LoadURL( 805 controller.LoadURL(
806 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 806 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
807 // Pretend it has bindings so we can tell if we incorrectly copy it. 807 // Pretend it has bindings so we can tell if we incorrectly copy it.
808 test_rvh()->AllowBindings(2); 808 test_rvh()->AllowBindings(2);
809 test_rvh()->SendNavigate(0, kExistingURL1); 809 main_test_rfh()->SendNavigate(0, kExistingURL1);
810 EXPECT_EQ(1U, navigation_entry_committed_counter_); 810 EXPECT_EQ(1U, navigation_entry_committed_counter_);
811 navigation_entry_committed_counter_ = 0; 811 navigation_entry_committed_counter_ = 0;
812 812
813 // Navigate cross-process to a second URL. 813 // Navigate cross-process to a second URL.
814 const GURL kExistingURL2("http://foo/eh"); 814 const GURL kExistingURL2("http://foo/eh");
815 controller.LoadURL( 815 controller.LoadURL(
816 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 816 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
817 test_rvh()->SendShouldCloseACK(true); 817 test_rvh()->SendShouldCloseACK(true);
818 TestRenderViewHost* foo_rvh = static_cast<TestRenderViewHost*>( 818 TestRenderViewHost* foo_rvh = static_cast<TestRenderViewHost*>(
819 contents()->GetPendingRenderViewHost()); 819 contents()->GetPendingRenderViewHost());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 // current page fires history.back(). 852 // current page fires history.back().
853 TEST_F(NavigationControllerTest, LoadURL_BackPreemptsPending) { 853 TEST_F(NavigationControllerTest, LoadURL_BackPreemptsPending) {
854 NavigationControllerImpl& controller = controller_impl(); 854 NavigationControllerImpl& controller = controller_impl();
855 TestNotificationTracker notifications; 855 TestNotificationTracker notifications;
856 RegisterForAllNavNotifications(&notifications, &controller); 856 RegisterForAllNavNotifications(&notifications, &controller);
857 857
858 // First make some history. 858 // First make some history.
859 const GURL kExistingURL1("http://foo/eh"); 859 const GURL kExistingURL1("http://foo/eh");
860 controller.LoadURL( 860 controller.LoadURL(
861 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 861 kExistingURL1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
862 test_rvh()->SendNavigate(0, kExistingURL1); 862 main_test_rfh()->SendNavigate(0, kExistingURL1);
863 EXPECT_EQ(1U, navigation_entry_committed_counter_); 863 EXPECT_EQ(1U, navigation_entry_committed_counter_);
864 navigation_entry_committed_counter_ = 0; 864 navigation_entry_committed_counter_ = 0;
865 865
866 const GURL kExistingURL2("http://foo/bee"); 866 const GURL kExistingURL2("http://foo/bee");
867 controller.LoadURL( 867 controller.LoadURL(
868 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 868 kExistingURL2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
869 test_rvh()->SendNavigate(1, kExistingURL2); 869 main_test_rfh()->SendNavigate(1, kExistingURL2);
870 EXPECT_EQ(1U, navigation_entry_committed_counter_); 870 EXPECT_EQ(1U, navigation_entry_committed_counter_);
871 navigation_entry_committed_counter_ = 0; 871 navigation_entry_committed_counter_ = 0;
872 872
873 // Now make a pending new navigation. 873 // Now make a pending new navigation.
874 const GURL kNewURL("http://foo/see"); 874 const GURL kNewURL("http://foo/see");
875 controller.LoadURL( 875 controller.LoadURL(
876 kNewURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 876 kNewURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
877 EXPECT_EQ(0U, notifications.size()); 877 EXPECT_EQ(0U, notifications.size());
878 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 878 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
879 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 879 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
880 880
881 // Before that commits, a back navigation from the renderer commits. 881 // Before that commits, a back navigation from the renderer commits.
882 test_rvh()->SendNavigate(0, kExistingURL1); 882 main_test_rfh()->SendNavigate(0, kExistingURL1);
883 883
884 // There should no longer be any pending entry, and the back navigation we 884 // There should no longer be any pending entry, and the back navigation we
885 // just made should be committed. 885 // just made should be committed.
886 EXPECT_EQ(1U, navigation_entry_committed_counter_); 886 EXPECT_EQ(1U, navigation_entry_committed_counter_);
887 navigation_entry_committed_counter_ = 0; 887 navigation_entry_committed_counter_ = 0;
888 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 888 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
889 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); 889 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
890 EXPECT_EQ(kExistingURL1, controller.GetVisibleEntry()->GetURL()); 890 EXPECT_EQ(kExistingURL1, controller.GetVisibleEntry()->GetURL());
891 } 891 }
892 892
(...skipping 18 matching lines...) Expand all
911 controller.LoadURL( 911 controller.LoadURL(
912 kNewURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 912 kNewURL, Referrer(), PAGE_TRANSITION_TYPED, std::string());
913 EXPECT_EQ(0U, notifications.size()); 913 EXPECT_EQ(0U, notifications.size());
914 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 914 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
915 EXPECT_TRUE(controller.GetPendingEntry()); 915 EXPECT_TRUE(controller.GetPendingEntry());
916 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); 916 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex());
917 EXPECT_EQ(1, delegate->navigation_state_change_count()); 917 EXPECT_EQ(1, delegate->navigation_state_change_count());
918 918
919 // Before that commits, a document.write and location.reload can cause the 919 // Before that commits, a document.write and location.reload can cause the
920 // renderer to send a FrameNavigate with page_id -1. 920 // renderer to send a FrameNavigate with page_id -1.
921 test_rvh()->SendNavigate(-1, kExistingURL); 921 main_test_rfh()->SendNavigate(-1, kExistingURL);
922 922
923 // This should clear the pending entry and notify of a navigation state 923 // This should clear the pending entry and notify of a navigation state
924 // change, so that we do not keep displaying kNewURL. 924 // change, so that we do not keep displaying kNewURL.
925 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 925 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
926 EXPECT_FALSE(controller.GetPendingEntry()); 926 EXPECT_FALSE(controller.GetPendingEntry());
927 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); 927 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex());
928 EXPECT_EQ(2, delegate->navigation_state_change_count()); 928 EXPECT_EQ(2, delegate->navigation_state_change_count());
929 929
930 contents()->SetDelegate(NULL); 930 contents()->SetDelegate(NULL);
931 } 931 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 // redirect and abort. See http://crbug.com/83031. 988 // redirect and abort. See http://crbug.com/83031.
989 TEST_F(NavigationControllerTest, LoadURL_RedirectAbortDoesntShowPendingURL) { 989 TEST_F(NavigationControllerTest, LoadURL_RedirectAbortDoesntShowPendingURL) {
990 NavigationControllerImpl& controller = controller_impl(); 990 NavigationControllerImpl& controller = controller_impl();
991 TestNotificationTracker notifications; 991 TestNotificationTracker notifications;
992 RegisterForAllNavNotifications(&notifications, &controller); 992 RegisterForAllNavNotifications(&notifications, &controller);
993 993
994 // First make an existing committed entry. 994 // First make an existing committed entry.
995 const GURL kExistingURL("http://foo/eh"); 995 const GURL kExistingURL("http://foo/eh");
996 controller.LoadURL(kExistingURL, content::Referrer(), 996 controller.LoadURL(kExistingURL, content::Referrer(),
997 content::PAGE_TRANSITION_TYPED, std::string()); 997 content::PAGE_TRANSITION_TYPED, std::string());
998 test_rvh()->SendNavigate(0, kExistingURL); 998 main_test_rfh()->SendNavigate(0, kExistingURL);
999 EXPECT_EQ(1U, navigation_entry_committed_counter_); 999 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1000 navigation_entry_committed_counter_ = 0; 1000 navigation_entry_committed_counter_ = 0;
1001 1001
1002 // Set a WebContentsDelegate to listen for state changes. 1002 // Set a WebContentsDelegate to listen for state changes.
1003 scoped_ptr<TestWebContentsDelegate> delegate(new TestWebContentsDelegate()); 1003 scoped_ptr<TestWebContentsDelegate> delegate(new TestWebContentsDelegate());
1004 EXPECT_FALSE(contents()->GetDelegate()); 1004 EXPECT_FALSE(contents()->GetDelegate());
1005 contents()->SetDelegate(delegate.get()); 1005 contents()->SetDelegate(delegate.get());
1006 1006
1007 // Now make a pending new navigation, initiated by the renderer. 1007 // Now make a pending new navigation, initiated by the renderer.
1008 const GURL kNewURL("http://foo/bee"); 1008 const GURL kNewURL("http://foo/bee");
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1115 1115
1116 TEST_F(NavigationControllerTest, Reload) { 1116 TEST_F(NavigationControllerTest, Reload) {
1117 NavigationControllerImpl& controller = controller_impl(); 1117 NavigationControllerImpl& controller = controller_impl();
1118 TestNotificationTracker notifications; 1118 TestNotificationTracker notifications;
1119 RegisterForAllNavNotifications(&notifications, &controller); 1119 RegisterForAllNavNotifications(&notifications, &controller);
1120 1120
1121 const GURL url1("http://foo1"); 1121 const GURL url1("http://foo1");
1122 1122
1123 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1123 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1124 EXPECT_EQ(0U, notifications.size()); 1124 EXPECT_EQ(0U, notifications.size());
1125 test_rvh()->SendNavigate(0, url1); 1125 main_test_rfh()->SendNavigate(0, url1);
1126 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1126 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1127 navigation_entry_committed_counter_ = 0; 1127 navigation_entry_committed_counter_ = 0;
1128 ASSERT_TRUE(controller.GetVisibleEntry()); 1128 ASSERT_TRUE(controller.GetVisibleEntry());
1129 controller.GetVisibleEntry()->SetTitle(base::ASCIIToUTF16("Title")); 1129 controller.GetVisibleEntry()->SetTitle(base::ASCIIToUTF16("Title"));
1130 controller.Reload(true); 1130 controller.Reload(true);
1131 EXPECT_EQ(0U, notifications.size()); 1131 EXPECT_EQ(0U, notifications.size());
1132 1132
1133 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp(); 1133 const base::Time timestamp = controller.GetVisibleEntry()->GetTimestamp();
1134 EXPECT_FALSE(timestamp.is_null()); 1134 EXPECT_FALSE(timestamp.is_null());
1135 1135
1136 // The reload is pending. 1136 // The reload is pending.
1137 EXPECT_EQ(controller.GetEntryCount(), 1); 1137 EXPECT_EQ(controller.GetEntryCount(), 1);
1138 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1138 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1139 EXPECT_EQ(controller.GetPendingEntryIndex(), 0); 1139 EXPECT_EQ(controller.GetPendingEntryIndex(), 0);
1140 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1140 EXPECT_TRUE(controller.GetLastCommittedEntry());
1141 EXPECT_TRUE(controller.GetPendingEntry()); 1141 EXPECT_TRUE(controller.GetPendingEntry());
1142 EXPECT_FALSE(controller.CanGoBack()); 1142 EXPECT_FALSE(controller.CanGoBack());
1143 EXPECT_FALSE(controller.CanGoForward()); 1143 EXPECT_FALSE(controller.CanGoForward());
1144 // Make sure the title has been cleared (will be redrawn just after reload). 1144 // Make sure the title has been cleared (will be redrawn just after reload).
1145 // Avoids a stale cached title when the new page being reloaded has no title. 1145 // Avoids a stale cached title when the new page being reloaded has no title.
1146 // See http://crbug.com/96041. 1146 // See http://crbug.com/96041.
1147 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty()); 1147 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty());
1148 1148
1149 test_rvh()->SendNavigate(0, url1); 1149 main_test_rfh()->SendNavigate(0, url1);
1150 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1150 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1151 navigation_entry_committed_counter_ = 0; 1151 navigation_entry_committed_counter_ = 0;
1152 1152
1153 // Now the reload is committed. 1153 // Now the reload is committed.
1154 EXPECT_EQ(controller.GetEntryCount(), 1); 1154 EXPECT_EQ(controller.GetEntryCount(), 1);
1155 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1155 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1156 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1156 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1157 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1157 EXPECT_TRUE(controller.GetLastCommittedEntry());
1158 EXPECT_FALSE(controller.GetPendingEntry()); 1158 EXPECT_FALSE(controller.GetPendingEntry());
1159 EXPECT_FALSE(controller.CanGoBack()); 1159 EXPECT_FALSE(controller.CanGoBack());
1160 EXPECT_FALSE(controller.CanGoForward()); 1160 EXPECT_FALSE(controller.CanGoForward());
1161 1161
1162 // The timestamp should have been updated. 1162 // The timestamp should have been updated.
1163 ASSERT_TRUE(controller.GetVisibleEntry()); 1163 ASSERT_TRUE(controller.GetVisibleEntry());
1164 EXPECT_GE(controller.GetVisibleEntry()->GetTimestamp(), timestamp); 1164 EXPECT_GE(controller.GetVisibleEntry()->GetTimestamp(), timestamp);
1165 } 1165 }
1166 1166
1167 // Tests what happens when a reload navigation produces a new page. 1167 // Tests what happens when a reload navigation produces a new page.
1168 TEST_F(NavigationControllerTest, Reload_GeneratesNewPage) { 1168 TEST_F(NavigationControllerTest, Reload_GeneratesNewPage) {
1169 NavigationControllerImpl& controller = controller_impl(); 1169 NavigationControllerImpl& controller = controller_impl();
1170 TestNotificationTracker notifications; 1170 TestNotificationTracker notifications;
1171 RegisterForAllNavNotifications(&notifications, &controller); 1171 RegisterForAllNavNotifications(&notifications, &controller);
1172 1172
1173 const GURL url1("http://foo1"); 1173 const GURL url1("http://foo1");
1174 const GURL url2("http://foo2"); 1174 const GURL url2("http://foo2");
1175 1175
1176 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1176 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1177 test_rvh()->SendNavigate(0, url1); 1177 main_test_rfh()->SendNavigate(0, url1);
1178 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1178 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1179 navigation_entry_committed_counter_ = 0; 1179 navigation_entry_committed_counter_ = 0;
1180 1180
1181 controller.Reload(true); 1181 controller.Reload(true);
1182 EXPECT_EQ(0U, notifications.size()); 1182 EXPECT_EQ(0U, notifications.size());
1183 1183
1184 test_rvh()->SendNavigate(1, url2); 1184 main_test_rfh()->SendNavigate(1, url2);
1185 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1185 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1186 navigation_entry_committed_counter_ = 0; 1186 navigation_entry_committed_counter_ = 0;
1187 1187
1188 // Now the reload is committed. 1188 // Now the reload is committed.
1189 EXPECT_EQ(controller.GetEntryCount(), 2); 1189 EXPECT_EQ(controller.GetEntryCount(), 2);
1190 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1190 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1191 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1191 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1192 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1192 EXPECT_TRUE(controller.GetLastCommittedEntry());
1193 EXPECT_FALSE(controller.GetPendingEntry()); 1193 EXPECT_FALSE(controller.GetPendingEntry());
1194 EXPECT_TRUE(controller.CanGoBack()); 1194 EXPECT_TRUE(controller.CanGoBack());
1195 EXPECT_FALSE(controller.CanGoForward()); 1195 EXPECT_FALSE(controller.CanGoForward());
1196 } 1196 }
1197 1197
1198 // This test ensures that when a guest renderer reloads, the reload goes through 1198 // This test ensures that when a guest renderer reloads, the reload goes through
1199 // without ending up in the "we have a wrong process for the URL" branch in 1199 // without ending up in the "we have a wrong process for the URL" branch in
1200 // NavigationControllerImpl::ReloadInternal. 1200 // NavigationControllerImpl::ReloadInternal.
1201 TEST_F(NavigationControllerTest, ReloadWithGuest) { 1201 TEST_F(NavigationControllerTest, ReloadWithGuest) {
1202 NavigationControllerImpl& controller = controller_impl(); 1202 NavigationControllerImpl& controller = controller_impl();
1203 1203
1204 const GURL url1("http://foo1"); 1204 const GURL url1("http://foo1");
1205 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1205 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1206 test_rvh()->SendNavigate(0, url1); 1206 main_test_rfh()->SendNavigate(0, url1);
1207 ASSERT_TRUE(controller.GetVisibleEntry()); 1207 ASSERT_TRUE(controller.GetVisibleEntry());
1208 1208
1209 // Make the entry believe its RenderProcessHost is a guest. 1209 // Make the entry believe its RenderProcessHost is a guest.
1210 NavigationEntryImpl* entry1 = 1210 NavigationEntryImpl* entry1 =
1211 NavigationEntryImpl::FromNavigationEntry(controller.GetVisibleEntry()); 1211 NavigationEntryImpl::FromNavigationEntry(controller.GetVisibleEntry());
1212 reinterpret_cast<MockRenderProcessHost*>( 1212 reinterpret_cast<MockRenderProcessHost*>(
1213 entry1->site_instance()->GetProcess())->SetIsGuest(true); 1213 entry1->site_instance()->GetProcess())->SetIsGuest(true);
1214 1214
1215 // And reload. 1215 // And reload.
1216 controller.Reload(true); 1216 controller.Reload(true);
(...skipping 15 matching lines...) Expand all
1232 TestNotificationTracker notifications; 1232 TestNotificationTracker notifications;
1233 RegisterForAllNavNotifications(&notifications, &controller); 1233 RegisterForAllNavNotifications(&notifications, &controller);
1234 1234
1235 const GURL original_url("http://foo1"); 1235 const GURL original_url("http://foo1");
1236 const GURL final_url("http://foo2"); 1236 const GURL final_url("http://foo2");
1237 1237
1238 // Load up the original URL, but get redirected. 1238 // Load up the original URL, but get redirected.
1239 controller.LoadURL( 1239 controller.LoadURL(
1240 original_url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1240 original_url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1241 EXPECT_EQ(0U, notifications.size()); 1241 EXPECT_EQ(0U, notifications.size());
1242 test_rvh()->SendNavigateWithOriginalRequestURL(0, final_url, original_url); 1242 main_test_rfh()->SendNavigateWithOriginalRequestURL(
1243 0, final_url, original_url);
1243 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1244 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1244 navigation_entry_committed_counter_ = 0; 1245 navigation_entry_committed_counter_ = 0;
1245 1246
1246 // The NavigationEntry should save both the original URL and the final 1247 // The NavigationEntry should save both the original URL and the final
1247 // redirected URL. 1248 // redirected URL.
1248 EXPECT_EQ( 1249 EXPECT_EQ(
1249 original_url, controller.GetVisibleEntry()->GetOriginalRequestURL()); 1250 original_url, controller.GetVisibleEntry()->GetOriginalRequestURL());
1250 EXPECT_EQ(final_url, controller.GetVisibleEntry()->GetURL()); 1251 EXPECT_EQ(final_url, controller.GetVisibleEntry()->GetURL());
1251 1252
1252 // Reload using the original URL. 1253 // Reload using the original URL.
(...skipping 10 matching lines...) Expand all
1263 EXPECT_TRUE(controller.GetPendingEntry()); 1264 EXPECT_TRUE(controller.GetPendingEntry());
1264 EXPECT_FALSE(controller.CanGoBack()); 1265 EXPECT_FALSE(controller.CanGoBack());
1265 EXPECT_FALSE(controller.CanGoForward()); 1266 EXPECT_FALSE(controller.CanGoForward());
1266 1267
1267 // Make sure the title has been cleared (will be redrawn just after reload). 1268 // Make sure the title has been cleared (will be redrawn just after reload).
1268 // Avoids a stale cached title when the new page being reloaded has no title. 1269 // Avoids a stale cached title when the new page being reloaded has no title.
1269 // See http://crbug.com/96041. 1270 // See http://crbug.com/96041.
1270 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty()); 1271 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty());
1271 1272
1272 // Send that the navigation has proceeded; say it got redirected again. 1273 // Send that the navigation has proceeded; say it got redirected again.
1273 test_rvh()->SendNavigate(0, final_url); 1274 main_test_rfh()->SendNavigate(0, final_url);
1274 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1275 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1275 navigation_entry_committed_counter_ = 0; 1276 navigation_entry_committed_counter_ = 0;
1276 1277
1277 // Now the reload is committed. 1278 // Now the reload is committed.
1278 EXPECT_EQ(controller.GetEntryCount(), 1); 1279 EXPECT_EQ(controller.GetEntryCount(), 1);
1279 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1280 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1280 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1281 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1281 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1282 EXPECT_TRUE(controller.GetLastCommittedEntry());
1282 EXPECT_FALSE(controller.GetPendingEntry()); 1283 EXPECT_FALSE(controller.GetPendingEntry());
1283 EXPECT_FALSE(controller.CanGoBack()); 1284 EXPECT_FALSE(controller.CanGoBack());
(...skipping 29 matching lines...) Expand all
1313 pending_entry->set_should_replace_entry(true); 1314 pending_entry->set_should_replace_entry(true);
1314 pending_entry->set_redirect_chain(redirects); 1315 pending_entry->set_redirect_chain(redirects);
1315 pending_entry->set_should_clear_history_list(true); 1316 pending_entry->set_should_clear_history_list(true);
1316 EXPECT_EQ(post_data.get(), pending_entry->GetBrowserInitiatedPostData()); 1317 EXPECT_EQ(post_data.get(), pending_entry->GetBrowserInitiatedPostData());
1317 EXPECT_TRUE(pending_entry->is_renderer_initiated()); 1318 EXPECT_TRUE(pending_entry->is_renderer_initiated());
1318 EXPECT_EQ(transfer_id, pending_entry->transferred_global_request_id()); 1319 EXPECT_EQ(transfer_id, pending_entry->transferred_global_request_id());
1319 EXPECT_TRUE(pending_entry->should_replace_entry()); 1320 EXPECT_TRUE(pending_entry->should_replace_entry());
1320 EXPECT_EQ(1U, pending_entry->redirect_chain().size()); 1321 EXPECT_EQ(1U, pending_entry->redirect_chain().size());
1321 EXPECT_TRUE(pending_entry->should_clear_history_list()); 1322 EXPECT_TRUE(pending_entry->should_clear_history_list());
1322 1323
1323 test_rvh()->SendNavigate(0, url1); 1324 main_test_rfh()->SendNavigate(0, url1);
1324 1325
1325 // Certain values that are only used for pending entries get reset after 1326 // Certain values that are only used for pending entries get reset after
1326 // commit. 1327 // commit.
1327 NavigationEntryImpl* committed_entry = 1328 NavigationEntryImpl* committed_entry =
1328 NavigationEntryImpl::FromNavigationEntry( 1329 NavigationEntryImpl::FromNavigationEntry(
1329 controller.GetLastCommittedEntry()); 1330 controller.GetLastCommittedEntry());
1330 EXPECT_FALSE(committed_entry->GetBrowserInitiatedPostData()); 1331 EXPECT_FALSE(committed_entry->GetBrowserInitiatedPostData());
1331 EXPECT_FALSE(committed_entry->is_renderer_initiated()); 1332 EXPECT_FALSE(committed_entry->is_renderer_initiated());
1332 EXPECT_EQ(GlobalRequestID(-1, -1), 1333 EXPECT_EQ(GlobalRequestID(-1, -1),
1333 committed_entry->transferred_global_request_id()); 1334 committed_entry->transferred_global_request_id());
1334 EXPECT_FALSE(committed_entry->should_replace_entry()); 1335 EXPECT_FALSE(committed_entry->should_replace_entry());
1335 EXPECT_EQ(0U, committed_entry->redirect_chain().size()); 1336 EXPECT_EQ(0U, committed_entry->redirect_chain().size());
1336 EXPECT_FALSE(committed_entry->should_clear_history_list()); 1337 EXPECT_FALSE(committed_entry->should_clear_history_list());
1337 } 1338 }
1338 1339
1339 // Tests what happens when we navigate back successfully 1340 // Tests what happens when we navigate back successfully
1340 TEST_F(NavigationControllerTest, Back) { 1341 TEST_F(NavigationControllerTest, Back) {
1341 NavigationControllerImpl& controller = controller_impl(); 1342 NavigationControllerImpl& controller = controller_impl();
1342 TestNotificationTracker notifications; 1343 TestNotificationTracker notifications;
1343 RegisterForAllNavNotifications(&notifications, &controller); 1344 RegisterForAllNavNotifications(&notifications, &controller);
1344 1345
1345 const GURL url1("http://foo1"); 1346 const GURL url1("http://foo1");
1346 test_rvh()->SendNavigate(0, url1); 1347 main_test_rfh()->SendNavigate(0, url1);
1347 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1348 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1348 navigation_entry_committed_counter_ = 0; 1349 navigation_entry_committed_counter_ = 0;
1349 1350
1350 const GURL url2("http://foo2"); 1351 const GURL url2("http://foo2");
1351 test_rvh()->SendNavigate(1, url2); 1352 main_test_rfh()->SendNavigate(1, url2);
1352 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1353 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1353 navigation_entry_committed_counter_ = 0; 1354 navigation_entry_committed_counter_ = 0;
1354 1355
1355 controller.GoBack(); 1356 controller.GoBack();
1356 EXPECT_EQ(0U, notifications.size()); 1357 EXPECT_EQ(0U, notifications.size());
1357 1358
1358 // We should now have a pending navigation to go back. 1359 // We should now have a pending navigation to go back.
1359 EXPECT_EQ(controller.GetEntryCount(), 2); 1360 EXPECT_EQ(controller.GetEntryCount(), 2);
1360 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1361 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1361 EXPECT_EQ(controller.GetPendingEntryIndex(), 0); 1362 EXPECT_EQ(controller.GetPendingEntryIndex(), 0);
1362 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1363 EXPECT_TRUE(controller.GetLastCommittedEntry());
1363 EXPECT_TRUE(controller.GetPendingEntry()); 1364 EXPECT_TRUE(controller.GetPendingEntry());
1364 EXPECT_FALSE(controller.CanGoBack()); 1365 EXPECT_FALSE(controller.CanGoBack());
1365 EXPECT_FALSE(controller.CanGoToOffset(-1)); 1366 EXPECT_FALSE(controller.CanGoToOffset(-1));
1366 EXPECT_TRUE(controller.CanGoForward()); 1367 EXPECT_TRUE(controller.CanGoForward());
1367 EXPECT_TRUE(controller.CanGoToOffset(1)); 1368 EXPECT_TRUE(controller.CanGoToOffset(1));
1368 EXPECT_FALSE(controller.CanGoToOffset(2)); // Cannot go foward 2 steps. 1369 EXPECT_FALSE(controller.CanGoToOffset(2)); // Cannot go foward 2 steps.
1369 1370
1370 // Timestamp for entry 1 should be on or after that of entry 0. 1371 // Timestamp for entry 1 should be on or after that of entry 0.
1371 EXPECT_FALSE(controller.GetEntryAtIndex(0)->GetTimestamp().is_null()); 1372 EXPECT_FALSE(controller.GetEntryAtIndex(0)->GetTimestamp().is_null());
1372 EXPECT_GE(controller.GetEntryAtIndex(1)->GetTimestamp(), 1373 EXPECT_GE(controller.GetEntryAtIndex(1)->GetTimestamp(),
1373 controller.GetEntryAtIndex(0)->GetTimestamp()); 1374 controller.GetEntryAtIndex(0)->GetTimestamp());
1374 1375
1375 test_rvh()->SendNavigate(0, url2); 1376 main_test_rfh()->SendNavigate(0, url2);
1376 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1377 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1377 navigation_entry_committed_counter_ = 0; 1378 navigation_entry_committed_counter_ = 0;
1378 1379
1379 // The back navigation completed successfully. 1380 // The back navigation completed successfully.
1380 EXPECT_EQ(controller.GetEntryCount(), 2); 1381 EXPECT_EQ(controller.GetEntryCount(), 2);
1381 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1382 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1382 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1383 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1383 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1384 EXPECT_TRUE(controller.GetLastCommittedEntry());
1384 EXPECT_FALSE(controller.GetPendingEntry()); 1385 EXPECT_FALSE(controller.GetPendingEntry());
1385 EXPECT_FALSE(controller.CanGoBack()); 1386 EXPECT_FALSE(controller.CanGoBack());
(...skipping 13 matching lines...) Expand all
1399 NavigationControllerImpl& controller = controller_impl(); 1400 NavigationControllerImpl& controller = controller_impl();
1400 TestNotificationTracker notifications; 1401 TestNotificationTracker notifications;
1401 RegisterForAllNavNotifications(&notifications, &controller); 1402 RegisterForAllNavNotifications(&notifications, &controller);
1402 1403
1403 const GURL url1("http://foo/1"); 1404 const GURL url1("http://foo/1");
1404 const GURL url2("http://foo/2"); 1405 const GURL url2("http://foo/2");
1405 const GURL url3("http://foo/3"); 1406 const GURL url3("http://foo/3");
1406 1407
1407 controller.LoadURL( 1408 controller.LoadURL(
1408 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1409 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1409 test_rvh()->SendNavigate(0, url1); 1410 main_test_rfh()->SendNavigate(0, url1);
1410 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1411 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1411 navigation_entry_committed_counter_ = 0; 1412 navigation_entry_committed_counter_ = 0;
1412 1413
1413 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1414 controller.LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1414 test_rvh()->SendNavigate(1, url2); 1415 main_test_rfh()->SendNavigate(1, url2);
1415 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1416 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1416 navigation_entry_committed_counter_ = 0; 1417 navigation_entry_committed_counter_ = 0;
1417 1418
1418 controller.GoBack(); 1419 controller.GoBack();
1419 EXPECT_EQ(0U, notifications.size()); 1420 EXPECT_EQ(0U, notifications.size());
1420 1421
1421 // We should now have a pending navigation to go back. 1422 // We should now have a pending navigation to go back.
1422 EXPECT_EQ(controller.GetEntryCount(), 2); 1423 EXPECT_EQ(controller.GetEntryCount(), 2);
1423 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1424 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1424 EXPECT_EQ(controller.GetPendingEntryIndex(), 0); 1425 EXPECT_EQ(controller.GetPendingEntryIndex(), 0);
1425 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1426 EXPECT_TRUE(controller.GetLastCommittedEntry());
1426 EXPECT_TRUE(controller.GetPendingEntry()); 1427 EXPECT_TRUE(controller.GetPendingEntry());
1427 EXPECT_FALSE(controller.CanGoBack()); 1428 EXPECT_FALSE(controller.CanGoBack());
1428 EXPECT_TRUE(controller.CanGoForward()); 1429 EXPECT_TRUE(controller.CanGoForward());
1429 1430
1430 test_rvh()->SendNavigate(2, url3); 1431 main_test_rfh()->SendNavigate(2, url3);
1431 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1432 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1432 navigation_entry_committed_counter_ = 0; 1433 navigation_entry_committed_counter_ = 0;
1433 1434
1434 // The back navigation resulted in a completely new navigation. 1435 // The back navigation resulted in a completely new navigation.
1435 // TODO(darin): perhaps this behavior will be confusing to users? 1436 // TODO(darin): perhaps this behavior will be confusing to users?
1436 EXPECT_EQ(controller.GetEntryCount(), 3); 1437 EXPECT_EQ(controller.GetEntryCount(), 3);
1437 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2); 1438 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2);
1438 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1439 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1439 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1440 EXPECT_TRUE(controller.GetLastCommittedEntry());
1440 EXPECT_FALSE(controller.GetPendingEntry()); 1441 EXPECT_FALSE(controller.GetPendingEntry());
1441 EXPECT_TRUE(controller.CanGoBack()); 1442 EXPECT_TRUE(controller.CanGoBack());
1442 EXPECT_FALSE(controller.CanGoForward()); 1443 EXPECT_FALSE(controller.CanGoForward());
1443 } 1444 }
1444 1445
1445 // Receives a back message when there is a new pending navigation entry. 1446 // Receives a back message when there is a new pending navigation entry.
1446 TEST_F(NavigationControllerTest, Back_NewPending) { 1447 TEST_F(NavigationControllerTest, Back_NewPending) {
1447 NavigationControllerImpl& controller = controller_impl(); 1448 NavigationControllerImpl& controller = controller_impl();
1448 TestNotificationTracker notifications; 1449 TestNotificationTracker notifications;
1449 RegisterForAllNavNotifications(&notifications, &controller); 1450 RegisterForAllNavNotifications(&notifications, &controller);
1450 1451
1451 const GURL kUrl1("http://foo1"); 1452 const GURL kUrl1("http://foo1");
1452 const GURL kUrl2("http://foo2"); 1453 const GURL kUrl2("http://foo2");
1453 const GURL kUrl3("http://foo3"); 1454 const GURL kUrl3("http://foo3");
1454 1455
1455 // First navigate two places so we have some back history. 1456 // First navigate two places so we have some back history.
1456 test_rvh()->SendNavigate(0, kUrl1); 1457 main_test_rfh()->SendNavigate(0, kUrl1);
1457 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1458 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1458 navigation_entry_committed_counter_ = 0; 1459 navigation_entry_committed_counter_ = 0;
1459 1460
1460 // controller.LoadURL(kUrl2, PAGE_TRANSITION_TYPED); 1461 // controller.LoadURL(kUrl2, PAGE_TRANSITION_TYPED);
1461 test_rvh()->SendNavigate(1, kUrl2); 1462 main_test_rfh()->SendNavigate(1, kUrl2);
1462 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1463 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1463 navigation_entry_committed_counter_ = 0; 1464 navigation_entry_committed_counter_ = 0;
1464 1465
1465 // Now start a new pending navigation and go back before it commits. 1466 // Now start a new pending navigation and go back before it commits.
1466 controller.LoadURL(kUrl3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1467 controller.LoadURL(kUrl3, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1467 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 1468 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
1468 EXPECT_EQ(kUrl3, controller.GetPendingEntry()->GetURL()); 1469 EXPECT_EQ(kUrl3, controller.GetPendingEntry()->GetURL());
1469 controller.GoBack(); 1470 controller.GoBack();
1470 1471
1471 // The pending navigation should now be the "back" item and the new one 1472 // The pending navigation should now be the "back" item and the new one
1472 // should be gone. 1473 // should be gone.
1473 EXPECT_EQ(0, controller.GetPendingEntryIndex()); 1474 EXPECT_EQ(0, controller.GetPendingEntryIndex());
1474 EXPECT_EQ(kUrl1, controller.GetPendingEntry()->GetURL()); 1475 EXPECT_EQ(kUrl1, controller.GetPendingEntry()->GetURL());
1475 } 1476 }
1476 1477
1477 // Receives a back message when there is a different renavigation already 1478 // Receives a back message when there is a different renavigation already
1478 // pending. 1479 // pending.
1479 TEST_F(NavigationControllerTest, Back_OtherBackPending) { 1480 TEST_F(NavigationControllerTest, Back_OtherBackPending) {
1480 NavigationControllerImpl& controller = controller_impl(); 1481 NavigationControllerImpl& controller = controller_impl();
1481 const GURL kUrl1("http://foo/1"); 1482 const GURL kUrl1("http://foo/1");
1482 const GURL kUrl2("http://foo/2"); 1483 const GURL kUrl2("http://foo/2");
1483 const GURL kUrl3("http://foo/3"); 1484 const GURL kUrl3("http://foo/3");
1484 1485
1485 // First navigate three places so we have some back history. 1486 // First navigate three places so we have some back history.
1486 test_rvh()->SendNavigate(0, kUrl1); 1487 main_test_rfh()->SendNavigate(0, kUrl1);
1487 test_rvh()->SendNavigate(1, kUrl2); 1488 main_test_rfh()->SendNavigate(1, kUrl2);
1488 test_rvh()->SendNavigate(2, kUrl3); 1489 main_test_rfh()->SendNavigate(2, kUrl3);
1489 1490
1490 // With nothing pending, say we get a navigation to the second entry. 1491 // With nothing pending, say we get a navigation to the second entry.
1491 test_rvh()->SendNavigate(1, kUrl2); 1492 main_test_rfh()->SendNavigate(1, kUrl2);
1492 1493
1493 // We know all the entries have the same site instance, so we can just grab 1494 // We know all the entries have the same site instance, so we can just grab
1494 // a random one for looking up other entries. 1495 // a random one for looking up other entries.
1495 SiteInstance* site_instance = 1496 SiteInstance* site_instance =
1496 NavigationEntryImpl::FromNavigationEntry( 1497 NavigationEntryImpl::FromNavigationEntry(
1497 controller.GetLastCommittedEntry())->site_instance(); 1498 controller.GetLastCommittedEntry())->site_instance();
1498 1499
1499 // That second URL should be the last committed and it should have gotten the 1500 // That second URL should be the last committed and it should have gotten the
1500 // new title. 1501 // new title.
1501 EXPECT_EQ(kUrl2, controller.GetEntryWithPageID(site_instance, 1)->GetURL()); 1502 EXPECT_EQ(kUrl2, controller.GetEntryWithPageID(site_instance, 1)->GetURL());
1502 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 1503 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
1503 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 1504 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
1504 1505
1505 // Now go forward to the last item again and say it was committed. 1506 // Now go forward to the last item again and say it was committed.
1506 controller.GoForward(); 1507 controller.GoForward();
1507 test_rvh()->SendNavigate(2, kUrl3); 1508 main_test_rfh()->SendNavigate(2, kUrl3);
1508 1509
1509 // Now start going back one to the second page. It will be pending. 1510 // Now start going back one to the second page. It will be pending.
1510 controller.GoBack(); 1511 controller.GoBack();
1511 EXPECT_EQ(1, controller.GetPendingEntryIndex()); 1512 EXPECT_EQ(1, controller.GetPendingEntryIndex());
1512 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 1513 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
1513 1514
1514 // Not synthesize a totally new back event to the first page. This will not 1515 // Not synthesize a totally new back event to the first page. This will not
1515 // match the pending one. 1516 // match the pending one.
1516 test_rvh()->SendNavigate(0, kUrl1); 1517 main_test_rfh()->SendNavigate(0, kUrl1);
1517 1518
1518 // The committed navigation should clear the pending entry. 1519 // The committed navigation should clear the pending entry.
1519 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 1520 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
1520 1521
1521 // But the navigated entry should be the last committed. 1522 // But the navigated entry should be the last committed.
1522 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); 1523 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
1523 EXPECT_EQ(kUrl1, controller.GetLastCommittedEntry()->GetURL()); 1524 EXPECT_EQ(kUrl1, controller.GetLastCommittedEntry()->GetURL());
1524 } 1525 }
1525 1526
1526 // Tests what happens when we navigate forward successfully. 1527 // Tests what happens when we navigate forward successfully.
1527 TEST_F(NavigationControllerTest, Forward) { 1528 TEST_F(NavigationControllerTest, Forward) {
1528 NavigationControllerImpl& controller = controller_impl(); 1529 NavigationControllerImpl& controller = controller_impl();
1529 TestNotificationTracker notifications; 1530 TestNotificationTracker notifications;
1530 RegisterForAllNavNotifications(&notifications, &controller); 1531 RegisterForAllNavNotifications(&notifications, &controller);
1531 1532
1532 const GURL url1("http://foo1"); 1533 const GURL url1("http://foo1");
1533 const GURL url2("http://foo2"); 1534 const GURL url2("http://foo2");
1534 1535
1535 test_rvh()->SendNavigate(0, url1); 1536 main_test_rfh()->SendNavigate(0, url1);
1536 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1537 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1537 navigation_entry_committed_counter_ = 0; 1538 navigation_entry_committed_counter_ = 0;
1538 1539
1539 test_rvh()->SendNavigate(1, url2); 1540 main_test_rfh()->SendNavigate(1, url2);
1540 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1541 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1541 navigation_entry_committed_counter_ = 0; 1542 navigation_entry_committed_counter_ = 0;
1542 1543
1543 controller.GoBack(); 1544 controller.GoBack();
1544 test_rvh()->SendNavigate(0, url1); 1545 main_test_rfh()->SendNavigate(0, url1);
1545 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1546 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1546 navigation_entry_committed_counter_ = 0; 1547 navigation_entry_committed_counter_ = 0;
1547 1548
1548 controller.GoForward(); 1549 controller.GoForward();
1549 1550
1550 // We should now have a pending navigation to go forward. 1551 // We should now have a pending navigation to go forward.
1551 EXPECT_EQ(controller.GetEntryCount(), 2); 1552 EXPECT_EQ(controller.GetEntryCount(), 2);
1552 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1553 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1553 EXPECT_EQ(controller.GetPendingEntryIndex(), 1); 1554 EXPECT_EQ(controller.GetPendingEntryIndex(), 1);
1554 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1555 EXPECT_TRUE(controller.GetLastCommittedEntry());
1555 EXPECT_TRUE(controller.GetPendingEntry()); 1556 EXPECT_TRUE(controller.GetPendingEntry());
1556 EXPECT_TRUE(controller.CanGoBack()); 1557 EXPECT_TRUE(controller.CanGoBack());
1557 EXPECT_TRUE(controller.CanGoToOffset(-1)); 1558 EXPECT_TRUE(controller.CanGoToOffset(-1));
1558 EXPECT_FALSE(controller.CanGoToOffset(-2)); // Cannot go back 2 steps. 1559 EXPECT_FALSE(controller.CanGoToOffset(-2)); // Cannot go back 2 steps.
1559 EXPECT_FALSE(controller.CanGoForward()); 1560 EXPECT_FALSE(controller.CanGoForward());
1560 EXPECT_FALSE(controller.CanGoToOffset(1)); 1561 EXPECT_FALSE(controller.CanGoToOffset(1));
1561 1562
1562 // Timestamp for entry 0 should be on or after that of entry 1 1563 // Timestamp for entry 0 should be on or after that of entry 1
1563 // (since we went back to it). 1564 // (since we went back to it).
1564 EXPECT_FALSE(controller.GetEntryAtIndex(0)->GetTimestamp().is_null()); 1565 EXPECT_FALSE(controller.GetEntryAtIndex(0)->GetTimestamp().is_null());
1565 EXPECT_GE(controller.GetEntryAtIndex(0)->GetTimestamp(), 1566 EXPECT_GE(controller.GetEntryAtIndex(0)->GetTimestamp(),
1566 controller.GetEntryAtIndex(1)->GetTimestamp()); 1567 controller.GetEntryAtIndex(1)->GetTimestamp());
1567 1568
1568 test_rvh()->SendNavigate(1, url2); 1569 main_test_rfh()->SendNavigate(1, url2);
1569 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1570 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1570 navigation_entry_committed_counter_ = 0; 1571 navigation_entry_committed_counter_ = 0;
1571 1572
1572 // The forward navigation completed successfully. 1573 // The forward navigation completed successfully.
1573 EXPECT_EQ(controller.GetEntryCount(), 2); 1574 EXPECT_EQ(controller.GetEntryCount(), 2);
1574 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1575 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1575 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1576 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1576 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1577 EXPECT_TRUE(controller.GetLastCommittedEntry());
1577 EXPECT_FALSE(controller.GetPendingEntry()); 1578 EXPECT_FALSE(controller.GetPendingEntry());
1578 EXPECT_TRUE(controller.CanGoBack()); 1579 EXPECT_TRUE(controller.CanGoBack());
(...skipping 11 matching lines...) Expand all
1590 // Tests what happens when a forward navigation produces a new page. 1591 // Tests what happens when a forward navigation produces a new page.
1591 TEST_F(NavigationControllerTest, Forward_GeneratesNewPage) { 1592 TEST_F(NavigationControllerTest, Forward_GeneratesNewPage) {
1592 NavigationControllerImpl& controller = controller_impl(); 1593 NavigationControllerImpl& controller = controller_impl();
1593 TestNotificationTracker notifications; 1594 TestNotificationTracker notifications;
1594 RegisterForAllNavNotifications(&notifications, &controller); 1595 RegisterForAllNavNotifications(&notifications, &controller);
1595 1596
1596 const GURL url1("http://foo1"); 1597 const GURL url1("http://foo1");
1597 const GURL url2("http://foo2"); 1598 const GURL url2("http://foo2");
1598 const GURL url3("http://foo3"); 1599 const GURL url3("http://foo3");
1599 1600
1600 test_rvh()->SendNavigate(0, url1); 1601 main_test_rfh()->SendNavigate(0, url1);
1601 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1602 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1602 navigation_entry_committed_counter_ = 0; 1603 navigation_entry_committed_counter_ = 0;
1603 test_rvh()->SendNavigate(1, url2); 1604 main_test_rfh()->SendNavigate(1, url2);
1604 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1605 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1605 navigation_entry_committed_counter_ = 0; 1606 navigation_entry_committed_counter_ = 0;
1606 1607
1607 controller.GoBack(); 1608 controller.GoBack();
1608 test_rvh()->SendNavigate(0, url1); 1609 main_test_rfh()->SendNavigate(0, url1);
1609 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1610 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1610 navigation_entry_committed_counter_ = 0; 1611 navigation_entry_committed_counter_ = 0;
1611 1612
1612 controller.GoForward(); 1613 controller.GoForward();
1613 EXPECT_EQ(0U, notifications.size()); 1614 EXPECT_EQ(0U, notifications.size());
1614 1615
1615 // Should now have a pending navigation to go forward. 1616 // Should now have a pending navigation to go forward.
1616 EXPECT_EQ(controller.GetEntryCount(), 2); 1617 EXPECT_EQ(controller.GetEntryCount(), 2);
1617 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 1618 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
1618 EXPECT_EQ(controller.GetPendingEntryIndex(), 1); 1619 EXPECT_EQ(controller.GetPendingEntryIndex(), 1);
1619 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1620 EXPECT_TRUE(controller.GetLastCommittedEntry());
1620 EXPECT_TRUE(controller.GetPendingEntry()); 1621 EXPECT_TRUE(controller.GetPendingEntry());
1621 EXPECT_TRUE(controller.CanGoBack()); 1622 EXPECT_TRUE(controller.CanGoBack());
1622 EXPECT_FALSE(controller.CanGoForward()); 1623 EXPECT_FALSE(controller.CanGoForward());
1623 1624
1624 test_rvh()->SendNavigate(2, url3); 1625 main_test_rfh()->SendNavigate(2, url3);
1625 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1626 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1626 navigation_entry_committed_counter_ = 0; 1627 navigation_entry_committed_counter_ = 0;
1627 EXPECT_TRUE(notifications.Check1AndReset(NOTIFICATION_NAV_LIST_PRUNED)); 1628 EXPECT_TRUE(notifications.Check1AndReset(NOTIFICATION_NAV_LIST_PRUNED));
1628 1629
1629 EXPECT_EQ(controller.GetEntryCount(), 2); 1630 EXPECT_EQ(controller.GetEntryCount(), 2);
1630 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1631 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1631 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1632 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1632 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1633 EXPECT_TRUE(controller.GetLastCommittedEntry());
1633 EXPECT_FALSE(controller.GetPendingEntry()); 1634 EXPECT_FALSE(controller.GetPendingEntry());
1634 EXPECT_TRUE(controller.CanGoBack()); 1635 EXPECT_TRUE(controller.CanGoBack());
1635 EXPECT_FALSE(controller.CanGoForward()); 1636 EXPECT_FALSE(controller.CanGoForward());
1636 } 1637 }
1637 1638
1638 // Two consequent navigation for the same URL entered in should be considered 1639 // Two consequent navigation for the same URL entered in should be considered
1639 // as SAME_PAGE navigation even when we are redirected to some other page. 1640 // as SAME_PAGE navigation even when we are redirected to some other page.
1640 TEST_F(NavigationControllerTest, Redirect) { 1641 TEST_F(NavigationControllerTest, Redirect) {
1641 NavigationControllerImpl& controller = controller_impl(); 1642 NavigationControllerImpl& controller = controller_impl();
1642 TestNotificationTracker notifications; 1643 TestNotificationTracker notifications;
1643 RegisterForAllNavNotifications(&notifications, &controller); 1644 RegisterForAllNavNotifications(&notifications, &controller);
1644 1645
1645 const GURL url1("http://foo1"); 1646 const GURL url1("http://foo1");
1646 const GURL url2("http://foo2"); // Redirection target 1647 const GURL url2("http://foo2"); // Redirection target
1647 1648
1648 // First request 1649 // First request
1649 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1650 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1650 1651
1651 EXPECT_EQ(0U, notifications.size()); 1652 EXPECT_EQ(0U, notifications.size());
1652 test_rvh()->SendNavigate(0, url2); 1653 main_test_rfh()->SendNavigate(0, url2);
1653 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1654 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1654 navigation_entry_committed_counter_ = 0; 1655 navigation_entry_committed_counter_ = 0;
1655 1656
1656 // Second request 1657 // Second request
1657 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1658 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1658 1659
1659 EXPECT_TRUE(controller.GetPendingEntry()); 1660 EXPECT_TRUE(controller.GetPendingEntry());
1660 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1661 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1661 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 1662 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
1662 1663
1663 ViewHostMsg_FrameNavigate_Params params; 1664 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1664 params.page_id = 0; 1665 params.page_id = 0;
1665 params.url = url2; 1666 params.url = url2;
1666 params.transition = PAGE_TRANSITION_SERVER_REDIRECT; 1667 params.transition = PAGE_TRANSITION_SERVER_REDIRECT;
1667 params.redirects.push_back(GURL("http://foo1")); 1668 params.redirects.push_back(GURL("http://foo1"));
1668 params.redirects.push_back(GURL("http://foo2")); 1669 params.redirects.push_back(GURL("http://foo2"));
1669 params.should_update_history = false; 1670 params.should_update_history = false;
1670 params.gesture = NavigationGestureAuto; 1671 params.gesture = NavigationGestureAuto;
1671 params.is_post = false; 1672 params.is_post = false;
1672 params.page_state = PageState::CreateFromURL(url2); 1673 params.page_state = PageState::CreateFromURL(url2);
1673 1674
(...skipping 25 matching lines...) Expand all
1699 RegisterForAllNavNotifications(&notifications, &controller); 1700 RegisterForAllNavNotifications(&notifications, &controller);
1700 1701
1701 const GURL url1("http://foo1"); 1702 const GURL url1("http://foo1");
1702 const GURL url2("http://foo2"); // Redirection target 1703 const GURL url2("http://foo2"); // Redirection target
1703 1704
1704 // First request as POST 1705 // First request as POST
1705 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1706 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1706 controller.GetVisibleEntry()->SetHasPostData(true); 1707 controller.GetVisibleEntry()->SetHasPostData(true);
1707 1708
1708 EXPECT_EQ(0U, notifications.size()); 1709 EXPECT_EQ(0U, notifications.size());
1709 test_rvh()->SendNavigate(0, url2); 1710 main_test_rfh()->SendNavigate(0, url2);
1710 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1711 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1711 navigation_entry_committed_counter_ = 0; 1712 navigation_entry_committed_counter_ = 0;
1712 1713
1713 // Second request 1714 // Second request
1714 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1715 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1715 1716
1716 EXPECT_TRUE(controller.GetPendingEntry()); 1717 EXPECT_TRUE(controller.GetPendingEntry());
1717 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1718 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1718 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 1719 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
1719 1720
1720 ViewHostMsg_FrameNavigate_Params params; 1721 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1721 params.page_id = 0; 1722 params.page_id = 0;
1722 params.url = url2; 1723 params.url = url2;
1723 params.transition = PAGE_TRANSITION_SERVER_REDIRECT; 1724 params.transition = PAGE_TRANSITION_SERVER_REDIRECT;
1724 params.redirects.push_back(GURL("http://foo1")); 1725 params.redirects.push_back(GURL("http://foo1"));
1725 params.redirects.push_back(GURL("http://foo2")); 1726 params.redirects.push_back(GURL("http://foo2"));
1726 params.should_update_history = false; 1727 params.should_update_history = false;
1727 params.gesture = NavigationGestureAuto; 1728 params.gesture = NavigationGestureAuto;
1728 params.is_post = false; 1729 params.is_post = false;
1729 params.page_state = PageState::CreateFromURL(url2); 1730 params.page_state = PageState::CreateFromURL(url2);
1730 1731
(...skipping 26 matching lines...) Expand all
1757 const GURL url1("http://foo1"); 1758 const GURL url1("http://foo1");
1758 const GURL url2("http://foo2"); // Redirection target 1759 const GURL url2("http://foo2"); // Redirection target
1759 1760
1760 // First request 1761 // First request
1761 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1762 controller.LoadURL(url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1762 1763
1763 EXPECT_TRUE(controller.GetPendingEntry()); 1764 EXPECT_TRUE(controller.GetPendingEntry());
1764 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1765 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1765 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 1766 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
1766 1767
1767 ViewHostMsg_FrameNavigate_Params params; 1768 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1768 params.page_id = 0; 1769 params.page_id = 0;
1769 params.url = url2; 1770 params.url = url2;
1770 params.transition = PAGE_TRANSITION_SERVER_REDIRECT; 1771 params.transition = PAGE_TRANSITION_SERVER_REDIRECT;
1771 params.redirects.push_back(GURL("http://foo1")); 1772 params.redirects.push_back(GURL("http://foo1"));
1772 params.redirects.push_back(GURL("http://foo2")); 1773 params.redirects.push_back(GURL("http://foo2"));
1773 params.should_update_history = false; 1774 params.should_update_history = false;
1774 params.gesture = NavigationGestureAuto; 1775 params.gesture = NavigationGestureAuto;
1775 params.is_post = false; 1776 params.is_post = false;
1776 params.page_state = PageState::CreateFromURL(url2); 1777 params.page_state = PageState::CreateFromURL(url2);
1777 1778
(...skipping 17 matching lines...) Expand all
1795 } 1796 }
1796 1797
1797 // Tests navigation via link click within a subframe. A new navigation entry 1798 // Tests navigation via link click within a subframe. A new navigation entry
1798 // should be created. 1799 // should be created.
1799 TEST_F(NavigationControllerTest, NewSubframe) { 1800 TEST_F(NavigationControllerTest, NewSubframe) {
1800 NavigationControllerImpl& controller = controller_impl(); 1801 NavigationControllerImpl& controller = controller_impl();
1801 TestNotificationTracker notifications; 1802 TestNotificationTracker notifications;
1802 RegisterForAllNavNotifications(&notifications, &controller); 1803 RegisterForAllNavNotifications(&notifications, &controller);
1803 1804
1804 const GURL url1("http://foo1"); 1805 const GURL url1("http://foo1");
1805 test_rvh()->SendNavigate(0, url1); 1806 main_test_rfh()->SendNavigate(0, url1);
1806 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1807 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1807 navigation_entry_committed_counter_ = 0; 1808 navigation_entry_committed_counter_ = 0;
1808 1809
1809 const GURL url2("http://foo2"); 1810 const GURL url2("http://foo2");
1810 ViewHostMsg_FrameNavigate_Params params; 1811 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1811 params.page_id = 1; 1812 params.page_id = 1;
1812 params.url = url2; 1813 params.url = url2;
1813 params.transition = PAGE_TRANSITION_MANUAL_SUBFRAME; 1814 params.transition = PAGE_TRANSITION_MANUAL_SUBFRAME;
1814 params.should_update_history = false; 1815 params.should_update_history = false;
1815 params.gesture = NavigationGestureUser; 1816 params.gesture = NavigationGestureUser;
1816 params.is_post = false; 1817 params.is_post = false;
1817 params.page_state = PageState::CreateFromURL(url2); 1818 params.page_state = PageState::CreateFromURL(url2);
1818 1819
1819 LoadCommittedDetails details; 1820 LoadCommittedDetails details;
1820 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details)); 1821 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details));
(...skipping 15 matching lines...) Expand all
1836 // Some pages create a popup, then write an iframe into it. This causes a 1837 // Some pages create a popup, then write an iframe into it. This causes a
1837 // subframe navigation without having any committed entry. Such navigations 1838 // subframe navigation without having any committed entry. Such navigations
1838 // just get thrown on the ground, but we shouldn't crash. 1839 // just get thrown on the ground, but we shouldn't crash.
1839 TEST_F(NavigationControllerTest, SubframeOnEmptyPage) { 1840 TEST_F(NavigationControllerTest, SubframeOnEmptyPage) {
1840 NavigationControllerImpl& controller = controller_impl(); 1841 NavigationControllerImpl& controller = controller_impl();
1841 TestNotificationTracker notifications; 1842 TestNotificationTracker notifications;
1842 RegisterForAllNavNotifications(&notifications, &controller); 1843 RegisterForAllNavNotifications(&notifications, &controller);
1843 1844
1844 // Navigation controller currently has no entries. 1845 // Navigation controller currently has no entries.
1845 const GURL url("http://foo2"); 1846 const GURL url("http://foo2");
1846 ViewHostMsg_FrameNavigate_Params params; 1847 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1847 params.page_id = 1; 1848 params.page_id = 1;
1848 params.url = url; 1849 params.url = url;
1849 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME; 1850 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME;
1850 params.should_update_history = false; 1851 params.should_update_history = false;
1851 params.gesture = NavigationGestureAuto; 1852 params.gesture = NavigationGestureAuto;
1852 params.is_post = false; 1853 params.is_post = false;
1853 params.page_state = PageState::CreateFromURL(url); 1854 params.page_state = PageState::CreateFromURL(url);
1854 1855
1855 LoadCommittedDetails details; 1856 LoadCommittedDetails details;
1856 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details)); 1857 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details));
1857 EXPECT_EQ(0U, notifications.size()); 1858 EXPECT_EQ(0U, notifications.size());
1858 } 1859 }
1859 1860
1860 // Auto subframes are ones the page loads automatically like ads. They should 1861 // Auto subframes are ones the page loads automatically like ads. They should
1861 // not create new navigation entries. 1862 // not create new navigation entries.
1862 TEST_F(NavigationControllerTest, AutoSubframe) { 1863 TEST_F(NavigationControllerTest, AutoSubframe) {
1863 NavigationControllerImpl& controller = controller_impl(); 1864 NavigationControllerImpl& controller = controller_impl();
1864 TestNotificationTracker notifications; 1865 TestNotificationTracker notifications;
1865 RegisterForAllNavNotifications(&notifications, &controller); 1866 RegisterForAllNavNotifications(&notifications, &controller);
1866 1867
1867 const GURL url1("http://foo1"); 1868 const GURL url1("http://foo1");
1868 test_rvh()->SendNavigate(0, url1); 1869 main_test_rfh()->SendNavigate(0, url1);
1869 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1870 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1870 navigation_entry_committed_counter_ = 0; 1871 navigation_entry_committed_counter_ = 0;
1871 1872
1872 const GURL url2("http://foo2"); 1873 const GURL url2("http://foo2");
1873 ViewHostMsg_FrameNavigate_Params params; 1874 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1874 params.page_id = 0; 1875 params.page_id = 0;
1875 params.url = url2; 1876 params.url = url2;
1876 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME; 1877 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME;
1877 params.should_update_history = false; 1878 params.should_update_history = false;
1878 params.gesture = NavigationGestureUser; 1879 params.gesture = NavigationGestureUser;
1879 params.is_post = false; 1880 params.is_post = false;
1880 params.page_state = PageState::CreateFromURL(url2); 1881 params.page_state = PageState::CreateFromURL(url2);
1881 1882
1882 // Navigating should do nothing. 1883 // Navigating should do nothing.
1883 LoadCommittedDetails details; 1884 LoadCommittedDetails details;
1884 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details)); 1885 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details));
1885 EXPECT_EQ(0U, notifications.size()); 1886 EXPECT_EQ(0U, notifications.size());
1886 1887
1887 // There should still be only one entry. 1888 // There should still be only one entry.
1888 EXPECT_EQ(1, controller.GetEntryCount()); 1889 EXPECT_EQ(1, controller.GetEntryCount());
1889 } 1890 }
1890 1891
1891 // Tests navigation and then going back to a subframe navigation. 1892 // Tests navigation and then going back to a subframe navigation.
1892 TEST_F(NavigationControllerTest, BackSubframe) { 1893 TEST_F(NavigationControllerTest, BackSubframe) {
1893 NavigationControllerImpl& controller = controller_impl(); 1894 NavigationControllerImpl& controller = controller_impl();
1894 TestNotificationTracker notifications; 1895 TestNotificationTracker notifications;
1895 RegisterForAllNavNotifications(&notifications, &controller); 1896 RegisterForAllNavNotifications(&notifications, &controller);
1896 1897
1897 // Main page. 1898 // Main page.
1898 const GURL url1("http://foo1"); 1899 const GURL url1("http://foo1");
1899 test_rvh()->SendNavigate(0, url1); 1900 main_test_rfh()->SendNavigate(0, url1);
1900 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1901 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1901 navigation_entry_committed_counter_ = 0; 1902 navigation_entry_committed_counter_ = 0;
1902 1903
1903 // First manual subframe navigation. 1904 // First manual subframe navigation.
1904 const GURL url2("http://foo2"); 1905 const GURL url2("http://foo2");
1905 ViewHostMsg_FrameNavigate_Params params; 1906 FrameHostMsg_DidCommitProvisionalLoad_Params params;
1906 params.page_id = 1; 1907 params.page_id = 1;
1907 params.url = url2; 1908 params.url = url2;
1908 params.transition = PAGE_TRANSITION_MANUAL_SUBFRAME; 1909 params.transition = PAGE_TRANSITION_MANUAL_SUBFRAME;
1909 params.should_update_history = false; 1910 params.should_update_history = false;
1910 params.gesture = NavigationGestureUser; 1911 params.gesture = NavigationGestureUser;
1911 params.is_post = false; 1912 params.is_post = false;
1912 params.page_state = PageState::CreateFromURL(url2); 1913 params.page_state = PageState::CreateFromURL(url2);
1913 1914
1914 // This should generate a new entry. 1915 // This should generate a new entry.
1915 LoadCommittedDetails details; 1916 LoadCommittedDetails details;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 } 1955 }
1955 1956
1956 TEST_F(NavigationControllerTest, LinkClick) { 1957 TEST_F(NavigationControllerTest, LinkClick) {
1957 NavigationControllerImpl& controller = controller_impl(); 1958 NavigationControllerImpl& controller = controller_impl();
1958 TestNotificationTracker notifications; 1959 TestNotificationTracker notifications;
1959 RegisterForAllNavNotifications(&notifications, &controller); 1960 RegisterForAllNavNotifications(&notifications, &controller);
1960 1961
1961 const GURL url1("http://foo1"); 1962 const GURL url1("http://foo1");
1962 const GURL url2("http://foo2"); 1963 const GURL url2("http://foo2");
1963 1964
1964 test_rvh()->SendNavigate(0, url1); 1965 main_test_rfh()->SendNavigate(0, url1);
1965 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1966 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1966 navigation_entry_committed_counter_ = 0; 1967 navigation_entry_committed_counter_ = 0;
1967 1968
1968 test_rvh()->SendNavigate(1, url2); 1969 main_test_rfh()->SendNavigate(1, url2);
1969 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1970 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1970 navigation_entry_committed_counter_ = 0; 1971 navigation_entry_committed_counter_ = 0;
1971 1972
1972 // Should not have produced a new session history entry. 1973 // Should not have produced a new session history entry.
1973 EXPECT_EQ(controller.GetEntryCount(), 2); 1974 EXPECT_EQ(controller.GetEntryCount(), 2);
1974 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 1975 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
1975 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 1976 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
1976 EXPECT_TRUE(controller.GetLastCommittedEntry()); 1977 EXPECT_TRUE(controller.GetLastCommittedEntry());
1977 EXPECT_FALSE(controller.GetPendingEntry()); 1978 EXPECT_FALSE(controller.GetPendingEntry());
1978 EXPECT_TRUE(controller.CanGoBack()); 1979 EXPECT_TRUE(controller.CanGoBack());
1979 EXPECT_FALSE(controller.CanGoForward()); 1980 EXPECT_FALSE(controller.CanGoForward());
1980 } 1981 }
1981 1982
1982 TEST_F(NavigationControllerTest, InPage) { 1983 TEST_F(NavigationControllerTest, InPage) {
1983 NavigationControllerImpl& controller = controller_impl(); 1984 NavigationControllerImpl& controller = controller_impl();
1984 TestNotificationTracker notifications; 1985 TestNotificationTracker notifications;
1985 RegisterForAllNavNotifications(&notifications, &controller); 1986 RegisterForAllNavNotifications(&notifications, &controller);
1986 1987
1987 // Main page. 1988 // Main page.
1988 const GURL url1("http://foo"); 1989 const GURL url1("http://foo");
1989 test_rvh()->SendNavigate(0, url1); 1990 main_test_rfh()->SendNavigate(0, url1);
1990 EXPECT_EQ(1U, navigation_entry_committed_counter_); 1991 EXPECT_EQ(1U, navigation_entry_committed_counter_);
1991 navigation_entry_committed_counter_ = 0; 1992 navigation_entry_committed_counter_ = 0;
1992 1993
1993 // Ensure main page navigation to same url respects the was_within_same_page 1994 // Ensure main page navigation to same url respects the was_within_same_page
1994 // hint provided in the params. 1995 // hint provided in the params.
1995 ViewHostMsg_FrameNavigate_Params self_params; 1996 FrameHostMsg_DidCommitProvisionalLoad_Params self_params;
1996 self_params.page_id = 0; 1997 self_params.page_id = 0;
1997 self_params.url = url1; 1998 self_params.url = url1;
1998 self_params.transition = PAGE_TRANSITION_LINK; 1999 self_params.transition = PAGE_TRANSITION_LINK;
1999 self_params.should_update_history = false; 2000 self_params.should_update_history = false;
2000 self_params.gesture = NavigationGestureUser; 2001 self_params.gesture = NavigationGestureUser;
2001 self_params.is_post = false; 2002 self_params.is_post = false;
2002 self_params.page_state = PageState::CreateFromURL(url1); 2003 self_params.page_state = PageState::CreateFromURL(url1);
2003 self_params.was_within_same_page = true; 2004 self_params.was_within_same_page = true;
2004 2005
2005 LoadCommittedDetails details; 2006 LoadCommittedDetails details;
2006 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), self_params, 2007 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), self_params,
2007 &details)); 2008 &details));
2008 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2009 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2009 navigation_entry_committed_counter_ = 0; 2010 navigation_entry_committed_counter_ = 0;
2010 EXPECT_TRUE(details.is_in_page); 2011 EXPECT_TRUE(details.is_in_page);
2011 EXPECT_TRUE(details.did_replace_entry); 2012 EXPECT_TRUE(details.did_replace_entry);
2012 EXPECT_EQ(1, controller.GetEntryCount()); 2013 EXPECT_EQ(1, controller.GetEntryCount());
2013 2014
2014 // Fragment navigation to a new page_id. 2015 // Fragment navigation to a new page_id.
2015 const GURL url2("http://foo#a"); 2016 const GURL url2("http://foo#a");
2016 ViewHostMsg_FrameNavigate_Params params; 2017 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2017 params.page_id = 1; 2018 params.page_id = 1;
2018 params.url = url2; 2019 params.url = url2;
2019 params.transition = PAGE_TRANSITION_LINK; 2020 params.transition = PAGE_TRANSITION_LINK;
2020 params.should_update_history = false; 2021 params.should_update_history = false;
2021 params.gesture = NavigationGestureUser; 2022 params.gesture = NavigationGestureUser;
2022 params.is_post = false; 2023 params.is_post = false;
2023 params.page_state = PageState::CreateFromURL(url2); 2024 params.page_state = PageState::CreateFromURL(url2);
2024 params.was_within_same_page = true; 2025 params.was_within_same_page = true;
2025 2026
2026 // This should generate a new entry. 2027 // This should generate a new entry.
2027 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details)); 2028 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details));
2028 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2029 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2029 navigation_entry_committed_counter_ = 0; 2030 navigation_entry_committed_counter_ = 0;
2030 EXPECT_TRUE(details.is_in_page); 2031 EXPECT_TRUE(details.is_in_page);
2031 EXPECT_FALSE(details.did_replace_entry); 2032 EXPECT_FALSE(details.did_replace_entry);
2032 EXPECT_EQ(2, controller.GetEntryCount()); 2033 EXPECT_EQ(2, controller.GetEntryCount());
2033 2034
2034 // Go back one. 2035 // Go back one.
2035 ViewHostMsg_FrameNavigate_Params back_params(params); 2036 FrameHostMsg_DidCommitProvisionalLoad_Params back_params(params);
2036 controller.GoBack(); 2037 controller.GoBack();
2037 back_params.url = url1; 2038 back_params.url = url1;
2038 back_params.page_id = 0; 2039 back_params.page_id = 0;
2039 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), back_params, 2040 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), back_params,
2040 &details)); 2041 &details));
2041 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2042 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2042 navigation_entry_committed_counter_ = 0; 2043 navigation_entry_committed_counter_ = 0;
2043 EXPECT_TRUE(details.is_in_page); 2044 EXPECT_TRUE(details.is_in_page);
2044 EXPECT_EQ(2, controller.GetEntryCount()); 2045 EXPECT_EQ(2, controller.GetEntryCount());
2045 EXPECT_EQ(0, controller.GetCurrentEntryIndex()); 2046 EXPECT_EQ(0, controller.GetCurrentEntryIndex());
2046 EXPECT_EQ(back_params.url, controller.GetVisibleEntry()->GetURL()); 2047 EXPECT_EQ(back_params.url, controller.GetVisibleEntry()->GetURL());
2047 2048
2048 // Go forward 2049 // Go forward
2049 ViewHostMsg_FrameNavigate_Params forward_params(params); 2050 FrameHostMsg_DidCommitProvisionalLoad_Params forward_params(params);
2050 controller.GoForward(); 2051 controller.GoForward();
2051 forward_params.url = url2; 2052 forward_params.url = url2;
2052 forward_params.page_id = 1; 2053 forward_params.page_id = 1;
2053 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), forward_params, 2054 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), forward_params,
2054 &details)); 2055 &details));
2055 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2056 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2056 navigation_entry_committed_counter_ = 0; 2057 navigation_entry_committed_counter_ = 0;
2057 EXPECT_TRUE(details.is_in_page); 2058 EXPECT_TRUE(details.is_in_page);
2058 EXPECT_EQ(2, controller.GetEntryCount()); 2059 EXPECT_EQ(2, controller.GetEntryCount());
2059 EXPECT_EQ(1, controller.GetCurrentEntryIndex()); 2060 EXPECT_EQ(1, controller.GetCurrentEntryIndex());
(...skipping 26 matching lines...) Expand all
2086 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); 2087 EXPECT_EQ(2, controller.GetCurrentEntryIndex());
2087 } 2088 }
2088 2089
2089 TEST_F(NavigationControllerTest, InPage_Replace) { 2090 TEST_F(NavigationControllerTest, InPage_Replace) {
2090 NavigationControllerImpl& controller = controller_impl(); 2091 NavigationControllerImpl& controller = controller_impl();
2091 TestNotificationTracker notifications; 2092 TestNotificationTracker notifications;
2092 RegisterForAllNavNotifications(&notifications, &controller); 2093 RegisterForAllNavNotifications(&notifications, &controller);
2093 2094
2094 // Main page. 2095 // Main page.
2095 const GURL url1("http://foo"); 2096 const GURL url1("http://foo");
2096 test_rvh()->SendNavigate(0, url1); 2097 main_test_rfh()->SendNavigate(0, url1);
2097 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2098 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2098 navigation_entry_committed_counter_ = 0; 2099 navigation_entry_committed_counter_ = 0;
2099 2100
2100 // First navigation. 2101 // First navigation.
2101 const GURL url2("http://foo#a"); 2102 const GURL url2("http://foo#a");
2102 ViewHostMsg_FrameNavigate_Params params; 2103 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2103 params.page_id = 0; // Same page_id 2104 params.page_id = 0; // Same page_id
2104 params.url = url2; 2105 params.url = url2;
2105 params.transition = PAGE_TRANSITION_LINK; 2106 params.transition = PAGE_TRANSITION_LINK;
2106 params.should_update_history = false; 2107 params.should_update_history = false;
2107 params.gesture = NavigationGestureUser; 2108 params.gesture = NavigationGestureUser;
2108 params.is_post = false; 2109 params.is_post = false;
2109 params.page_state = PageState::CreateFromURL(url2); 2110 params.page_state = PageState::CreateFromURL(url2);
2110 2111
2111 // This should NOT generate a new entry, nor prune the list. 2112 // This should NOT generate a new entry, nor prune the list.
2112 LoadCommittedDetails details; 2113 LoadCommittedDetails details;
(...skipping 12 matching lines...) Expand all
2125 // window.location='http://foo3/'; 2126 // window.location='http://foo3/';
2126 // </script> 2127 // </script>
2127 TEST_F(NavigationControllerTest, ClientRedirectAfterInPageNavigation) { 2128 TEST_F(NavigationControllerTest, ClientRedirectAfterInPageNavigation) {
2128 NavigationControllerImpl& controller = controller_impl(); 2129 NavigationControllerImpl& controller = controller_impl();
2129 TestNotificationTracker notifications; 2130 TestNotificationTracker notifications;
2130 RegisterForAllNavNotifications(&notifications, &controller); 2131 RegisterForAllNavNotifications(&notifications, &controller);
2131 2132
2132 // Load an initial page. 2133 // Load an initial page.
2133 { 2134 {
2134 const GURL url("http://foo/"); 2135 const GURL url("http://foo/");
2135 test_rvh()->SendNavigate(0, url); 2136 main_test_rfh()->SendNavigate(0, url);
2136 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2137 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2137 navigation_entry_committed_counter_ = 0; 2138 navigation_entry_committed_counter_ = 0;
2138 } 2139 }
2139 2140
2140 // Navigate to a new page. 2141 // Navigate to a new page.
2141 { 2142 {
2142 const GURL url("http://foo2/"); 2143 const GURL url("http://foo2/");
2143 test_rvh()->SendNavigate(1, url); 2144 main_test_rfh()->SendNavigate(1, url);
2144 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2145 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2145 navigation_entry_committed_counter_ = 0; 2146 navigation_entry_committed_counter_ = 0;
2146 } 2147 }
2147 2148
2148 // Navigate within the page. 2149 // Navigate within the page.
2149 { 2150 {
2150 const GURL url("http://foo2/#a"); 2151 const GURL url("http://foo2/#a");
2151 ViewHostMsg_FrameNavigate_Params params; 2152 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2152 params.page_id = 1; // Same page_id 2153 params.page_id = 1; // Same page_id
2153 params.url = url; 2154 params.url = url;
2154 params.transition = PAGE_TRANSITION_LINK; 2155 params.transition = PAGE_TRANSITION_LINK;
2155 params.redirects.push_back(url); 2156 params.redirects.push_back(url);
2156 params.should_update_history = true; 2157 params.should_update_history = true;
2157 params.gesture = NavigationGestureUnknown; 2158 params.gesture = NavigationGestureUnknown;
2158 params.is_post = false; 2159 params.is_post = false;
2159 params.page_state = PageState::CreateFromURL(url); 2160 params.page_state = PageState::CreateFromURL(url);
2160 2161
2161 // This should NOT generate a new entry, nor prune the list. 2162 // This should NOT generate a new entry, nor prune the list.
2162 LoadCommittedDetails details; 2163 LoadCommittedDetails details;
2163 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details)); 2164 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details));
2164 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2165 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2165 navigation_entry_committed_counter_ = 0; 2166 navigation_entry_committed_counter_ = 0;
2166 EXPECT_TRUE(details.is_in_page); 2167 EXPECT_TRUE(details.is_in_page);
2167 EXPECT_TRUE(details.did_replace_entry); 2168 EXPECT_TRUE(details.did_replace_entry);
2168 EXPECT_EQ(2, controller.GetEntryCount()); 2169 EXPECT_EQ(2, controller.GetEntryCount());
2169 } 2170 }
2170 2171
2171 // Perform a client redirect to a new page. 2172 // Perform a client redirect to a new page.
2172 { 2173 {
2173 const GURL url("http://foo3/"); 2174 const GURL url("http://foo3/");
2174 ViewHostMsg_FrameNavigate_Params params; 2175 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2175 params.page_id = 2; // New page_id 2176 params.page_id = 2; // New page_id
2176 params.url = url; 2177 params.url = url;
2177 params.transition = PAGE_TRANSITION_CLIENT_REDIRECT; 2178 params.transition = PAGE_TRANSITION_CLIENT_REDIRECT;
2178 params.redirects.push_back(GURL("http://foo2/#a")); 2179 params.redirects.push_back(GURL("http://foo2/#a"));
2179 params.redirects.push_back(url); 2180 params.redirects.push_back(url);
2180 params.should_update_history = true; 2181 params.should_update_history = true;
2181 params.gesture = NavigationGestureUnknown; 2182 params.gesture = NavigationGestureUnknown;
2182 params.is_post = false; 2183 params.is_post = false;
2183 params.page_state = PageState::CreateFromURL(url); 2184 params.page_state = PageState::CreateFromURL(url);
2184 2185
2185 // This SHOULD generate a new entry. 2186 // This SHOULD generate a new entry.
2186 LoadCommittedDetails details; 2187 LoadCommittedDetails details;
2187 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details)); 2188 EXPECT_TRUE(controller.RendererDidNavigate(test_rvh(), params, &details));
2188 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2189 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2189 navigation_entry_committed_counter_ = 0; 2190 navigation_entry_committed_counter_ = 0;
2190 EXPECT_FALSE(details.is_in_page); 2191 EXPECT_FALSE(details.is_in_page);
2191 EXPECT_EQ(3, controller.GetEntryCount()); 2192 EXPECT_EQ(3, controller.GetEntryCount());
2192 } 2193 }
2193 2194
2194 // Verify that BACK brings us back to http://foo2/. 2195 // Verify that BACK brings us back to http://foo2/.
2195 { 2196 {
2196 const GURL url("http://foo2/"); 2197 const GURL url("http://foo2/");
2197 controller.GoBack(); 2198 controller.GoBack();
2198 test_rvh()->SendNavigate(1, url); 2199 main_test_rfh()->SendNavigate(1, url);
2199 EXPECT_EQ(1U, navigation_entry_committed_counter_); 2200 EXPECT_EQ(1U, navigation_entry_committed_counter_);
2200 navigation_entry_committed_counter_ = 0; 2201 navigation_entry_committed_counter_ = 0;
2201 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL()); 2202 EXPECT_EQ(url, controller.GetVisibleEntry()->GetURL());
2202 } 2203 }
2203 } 2204 }
2204 2205
2205 // NotificationObserver implementation used in verifying we've received the 2206 // NotificationObserver implementation used in verifying we've received the
2206 // NOTIFICATION_NAV_LIST_PRUNED method. 2207 // NOTIFICATION_NAV_LIST_PRUNED method.
2207 class PrunedListener : public NotificationObserver { 2208 class PrunedListener : public NotificationObserver {
2208 public: 2209 public:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2240 const int kMaxEntryCount = 5; 2241 const int kMaxEntryCount = 5;
2241 2242
2242 NavigationControllerImpl::set_max_entry_count_for_testing(kMaxEntryCount); 2243 NavigationControllerImpl::set_max_entry_count_for_testing(kMaxEntryCount);
2243 2244
2244 int url_index; 2245 int url_index;
2245 // Load up to the max count, all entries should be there. 2246 // Load up to the max count, all entries should be there.
2246 for (url_index = 0; url_index < kMaxEntryCount; url_index++) { 2247 for (url_index = 0; url_index < kMaxEntryCount; url_index++) {
2247 GURL url(base::StringPrintf("http://www.a.com/%d", url_index)); 2248 GURL url(base::StringPrintf("http://www.a.com/%d", url_index));
2248 controller.LoadURL( 2249 controller.LoadURL(
2249 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2250 url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2250 test_rvh()->SendNavigate(url_index, url); 2251 main_test_rfh()->SendNavigate(url_index, url);
2251 } 2252 }
2252 2253
2253 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount); 2254 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount);
2254 2255
2255 // Created a PrunedListener to observe prune notifications. 2256 // Created a PrunedListener to observe prune notifications.
2256 PrunedListener listener(&controller); 2257 PrunedListener listener(&controller);
2257 2258
2258 // Navigate some more. 2259 // Navigate some more.
2259 GURL url(base::StringPrintf("http://www.a.com/%d", url_index)); 2260 GURL url(base::StringPrintf("http://www.a.com/%d", url_index));
2260 controller.LoadURL( 2261 controller.LoadURL(
2261 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2262 url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2262 test_rvh()->SendNavigate(url_index, url); 2263 main_test_rfh()->SendNavigate(url_index, url);
2263 url_index++; 2264 url_index++;
2264 2265
2265 // We should have got a pruned navigation. 2266 // We should have got a pruned navigation.
2266 EXPECT_EQ(1, listener.notification_count_); 2267 EXPECT_EQ(1, listener.notification_count_);
2267 EXPECT_TRUE(listener.details_.from_front); 2268 EXPECT_TRUE(listener.details_.from_front);
2268 EXPECT_EQ(1, listener.details_.count); 2269 EXPECT_EQ(1, listener.details_.count);
2269 2270
2270 // We expect http://www.a.com/0 to be gone. 2271 // We expect http://www.a.com/0 to be gone.
2271 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount); 2272 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount);
2272 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), 2273 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(),
2273 GURL("http:////www.a.com/1")); 2274 GURL("http:////www.a.com/1"));
2274 2275
2275 // More navigations. 2276 // More navigations.
2276 for (int i = 0; i < 3; i++) { 2277 for (int i = 0; i < 3; i++) {
2277 url = GURL(base::StringPrintf("http:////www.a.com/%d", url_index)); 2278 url = GURL(base::StringPrintf("http:////www.a.com/%d", url_index));
2278 controller.LoadURL( 2279 controller.LoadURL(
2279 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2280 url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2280 test_rvh()->SendNavigate(url_index, url); 2281 main_test_rfh()->SendNavigate(url_index, url);
2281 url_index++; 2282 url_index++;
2282 } 2283 }
2283 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount); 2284 EXPECT_EQ(controller.GetEntryCount(), kMaxEntryCount);
2284 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), 2285 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(),
2285 GURL("http:////www.a.com/4")); 2286 GURL("http:////www.a.com/4"));
2286 2287
2287 NavigationControllerImpl::set_max_entry_count_for_testing(original_count); 2288 NavigationControllerImpl::set_max_entry_count_for_testing(original_count);
2288 } 2289 }
2289 2290
2290 // Tests that we can do a restore and navigate to the restored entries and 2291 // Tests that we can do a restore and navigate to the restored entries and
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2331 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE, 2332 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE,
2332 NavigationEntryImpl::FromNavigationEntry 2333 NavigationEntryImpl::FromNavigationEntry
2333 (our_controller.GetEntryAtIndex(0))->restore_type()); 2334 (our_controller.GetEntryAtIndex(0))->restore_type());
2334 EXPECT_TRUE(NavigationEntryImpl::FromNavigationEntry( 2335 EXPECT_TRUE(NavigationEntryImpl::FromNavigationEntry(
2335 our_controller.GetEntryAtIndex(0))->site_instance()); 2336 our_controller.GetEntryAtIndex(0))->site_instance());
2336 2337
2337 // Timestamp should remain the same before the navigation finishes. 2338 // Timestamp should remain the same before the navigation finishes.
2338 EXPECT_EQ(timestamp, our_controller.GetEntryAtIndex(0)->GetTimestamp()); 2339 EXPECT_EQ(timestamp, our_controller.GetEntryAtIndex(0)->GetTimestamp());
2339 2340
2340 // Say we navigated to that entry. 2341 // Say we navigated to that entry.
2341 ViewHostMsg_FrameNavigate_Params params; 2342 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2342 params.page_id = 0; 2343 params.page_id = 0;
2343 params.url = url; 2344 params.url = url;
2344 params.transition = PAGE_TRANSITION_LINK; 2345 params.transition = PAGE_TRANSITION_LINK;
2345 params.should_update_history = false; 2346 params.should_update_history = false;
2346 params.gesture = NavigationGestureUser; 2347 params.gesture = NavigationGestureUser;
2347 params.is_post = false; 2348 params.is_post = false;
2348 params.page_state = PageState::CreateFromURL(url); 2349 params.page_state = PageState::CreateFromURL(url);
2349 LoadCommittedDetails details; 2350 LoadCommittedDetails details;
2350 our_controller.RendererDidNavigate(our_contents->GetRenderViewHost(), params, 2351 our_controller.RendererDidNavigate(our_contents->GetRenderViewHost(), params,
2351 &details); 2352 &details);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2418 fail_load_params.is_main_frame = true; 2419 fail_load_params.is_main_frame = true;
2419 fail_load_params.error_code = net::ERR_ABORTED; 2420 fail_load_params.error_code = net::ERR_ABORTED;
2420 fail_load_params.error_description = base::string16(); 2421 fail_load_params.error_description = base::string16();
2421 fail_load_params.url = url; 2422 fail_load_params.url = url;
2422 fail_load_params.showing_repost_interstitial = false; 2423 fail_load_params.showing_repost_interstitial = false;
2423 main_test_rfh()->OnMessageReceived( 2424 main_test_rfh()->OnMessageReceived(
2424 FrameHostMsg_DidFailProvisionalLoadWithError(0, // routing_id 2425 FrameHostMsg_DidFailProvisionalLoadWithError(0, // routing_id
2425 fail_load_params)); 2426 fail_load_params));
2426 2427
2427 // Now the pending restored entry commits. 2428 // Now the pending restored entry commits.
2428 ViewHostMsg_FrameNavigate_Params params; 2429 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2429 params.page_id = 0; 2430 params.page_id = 0;
2430 params.url = url; 2431 params.url = url;
2431 params.transition = PAGE_TRANSITION_LINK; 2432 params.transition = PAGE_TRANSITION_LINK;
2432 params.should_update_history = false; 2433 params.should_update_history = false;
2433 params.gesture = NavigationGestureUser; 2434 params.gesture = NavigationGestureUser;
2434 params.is_post = false; 2435 params.is_post = false;
2435 params.page_state = PageState::CreateFromURL(url); 2436 params.page_state = PageState::CreateFromURL(url);
2436 LoadCommittedDetails details; 2437 LoadCommittedDetails details;
2437 our_controller.RendererDidNavigate(rvh, params, &details); 2438 our_controller.RendererDidNavigate(rvh, params, &details);
2438 2439
(...skipping 10 matching lines...) Expand all
2449 our_controller.GetEntryAtIndex(0))->restore_type()); 2450 our_controller.GetEntryAtIndex(0))->restore_type());
2450 } 2451 }
2451 2452
2452 // Make sure that the page type and stuff is correct after an interstitial. 2453 // Make sure that the page type and stuff is correct after an interstitial.
2453 TEST_F(NavigationControllerTest, Interstitial) { 2454 TEST_F(NavigationControllerTest, Interstitial) {
2454 NavigationControllerImpl& controller = controller_impl(); 2455 NavigationControllerImpl& controller = controller_impl();
2455 // First navigate somewhere normal. 2456 // First navigate somewhere normal.
2456 const GURL url1("http://foo"); 2457 const GURL url1("http://foo");
2457 controller.LoadURL( 2458 controller.LoadURL(
2458 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2459 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2459 test_rvh()->SendNavigate(0, url1); 2460 main_test_rfh()->SendNavigate(0, url1);
2460 2461
2461 // Now navigate somewhere with an interstitial. 2462 // Now navigate somewhere with an interstitial.
2462 const GURL url2("http://bar"); 2463 const GURL url2("http://bar");
2463 controller.LoadURL( 2464 controller.LoadURL(
2464 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2465 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2465 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2466 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2466 set_page_type(PAGE_TYPE_INTERSTITIAL); 2467 set_page_type(PAGE_TYPE_INTERSTITIAL);
2467 2468
2468 // At this point the interstitial will be displayed and the load will still 2469 // At this point the interstitial will be displayed and the load will still
2469 // be pending. If the user continues, the load will commit. 2470 // be pending. If the user continues, the load will commit.
2470 test_rvh()->SendNavigate(1, url2); 2471 main_test_rfh()->SendNavigate(1, url2);
2471 2472
2472 // The page should be a normal page again. 2473 // The page should be a normal page again.
2473 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); 2474 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL());
2474 EXPECT_EQ(PAGE_TYPE_NORMAL, 2475 EXPECT_EQ(PAGE_TYPE_NORMAL,
2475 controller.GetLastCommittedEntry()->GetPageType()); 2476 controller.GetLastCommittedEntry()->GetPageType());
2476 } 2477 }
2477 2478
2478 TEST_F(NavigationControllerTest, RemoveEntry) { 2479 TEST_F(NavigationControllerTest, RemoveEntry) {
2479 NavigationControllerImpl& controller = controller_impl(); 2480 NavigationControllerImpl& controller = controller_impl();
2480 const GURL url1("http://foo/1"); 2481 const GURL url1("http://foo/1");
2481 const GURL url2("http://foo/2"); 2482 const GURL url2("http://foo/2");
2482 const GURL url3("http://foo/3"); 2483 const GURL url3("http://foo/3");
2483 const GURL url4("http://foo/4"); 2484 const GURL url4("http://foo/4");
2484 const GURL url5("http://foo/5"); 2485 const GURL url5("http://foo/5");
2485 const GURL pending_url("http://foo/pending"); 2486 const GURL pending_url("http://foo/pending");
2486 const GURL default_url("http://foo/default"); 2487 const GURL default_url("http://foo/default");
2487 2488
2488 controller.LoadURL( 2489 controller.LoadURL(
2489 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2490 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2490 test_rvh()->SendNavigate(0, url1); 2491 main_test_rfh()->SendNavigate(0, url1);
2491 controller.LoadURL( 2492 controller.LoadURL(
2492 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2493 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2493 test_rvh()->SendNavigate(1, url2); 2494 main_test_rfh()->SendNavigate(1, url2);
2494 controller.LoadURL( 2495 controller.LoadURL(
2495 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2496 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2496 test_rvh()->SendNavigate(2, url3); 2497 main_test_rfh()->SendNavigate(2, url3);
2497 controller.LoadURL( 2498 controller.LoadURL(
2498 url4, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2499 url4, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2499 test_rvh()->SendNavigate(3, url4); 2500 main_test_rfh()->SendNavigate(3, url4);
2500 controller.LoadURL( 2501 controller.LoadURL(
2501 url5, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2502 url5, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2502 test_rvh()->SendNavigate(4, url5); 2503 main_test_rfh()->SendNavigate(4, url5);
2503 2504
2504 // Try to remove the last entry. Will fail because it is the current entry. 2505 // Try to remove the last entry. Will fail because it is the current entry.
2505 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1)); 2506 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1));
2506 EXPECT_EQ(5, controller.GetEntryCount()); 2507 EXPECT_EQ(5, controller.GetEntryCount());
2507 EXPECT_EQ(4, controller.GetLastCommittedEntryIndex()); 2508 EXPECT_EQ(4, controller.GetLastCommittedEntryIndex());
2508 2509
2509 // Go back, but don't commit yet. Check that we can't delete the current 2510 // Go back, but don't commit yet. Check that we can't delete the current
2510 // and pending entries. 2511 // and pending entries.
2511 controller.GoBack(); 2512 controller.GoBack();
2512 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1)); 2513 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1));
2513 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 2)); 2514 EXPECT_FALSE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 2));
2514 2515
2515 // Now commit and delete the last entry. 2516 // Now commit and delete the last entry.
2516 test_rvh()->SendNavigate(3, url4); 2517 main_test_rfh()->SendNavigate(3, url4);
2517 EXPECT_TRUE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1)); 2518 EXPECT_TRUE(controller.RemoveEntryAtIndex(controller.GetEntryCount() - 1));
2518 EXPECT_EQ(4, controller.GetEntryCount()); 2519 EXPECT_EQ(4, controller.GetEntryCount());
2519 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); 2520 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex());
2520 EXPECT_FALSE(controller.GetPendingEntry()); 2521 EXPECT_FALSE(controller.GetPendingEntry());
2521 2522
2522 // Remove an entry which is not the last committed one. 2523 // Remove an entry which is not the last committed one.
2523 EXPECT_TRUE(controller.RemoveEntryAtIndex(0)); 2524 EXPECT_TRUE(controller.RemoveEntryAtIndex(0));
2524 EXPECT_EQ(3, controller.GetEntryCount()); 2525 EXPECT_EQ(3, controller.GetEntryCount());
2525 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 2526 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
2526 EXPECT_FALSE(controller.GetPendingEntry()); 2527 EXPECT_FALSE(controller.GetPendingEntry());
(...skipping 16 matching lines...) Expand all
2543 const GURL url0("http://foo/0"); 2544 const GURL url0("http://foo/0");
2544 const GURL url1("http://foo/1"); 2545 const GURL url1("http://foo/1");
2545 const GURL url2("http://foo/2"); 2546 const GURL url2("http://foo/2");
2546 const GURL url3("http://foo/3"); 2547 const GURL url3("http://foo/3");
2547 const GURL url3_ref("http://foo/3#bar"); 2548 const GURL url3_ref("http://foo/3#bar");
2548 const GURL url4("http://foo/4"); 2549 const GURL url4("http://foo/4");
2549 const GURL transient_url("http://foo/transient"); 2550 const GURL transient_url("http://foo/transient");
2550 2551
2551 controller.LoadURL( 2552 controller.LoadURL(
2552 url0, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2553 url0, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2553 test_rvh()->SendNavigate(0, url0); 2554 main_test_rfh()->SendNavigate(0, url0);
2554 controller.LoadURL( 2555 controller.LoadURL(
2555 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2556 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2556 test_rvh()->SendNavigate(1, url1); 2557 main_test_rfh()->SendNavigate(1, url1);
2557 2558
2558 notifications.Reset(); 2559 notifications.Reset();
2559 2560
2560 // Adding a transient with no pending entry. 2561 // Adding a transient with no pending entry.
2561 NavigationEntryImpl* transient_entry = new NavigationEntryImpl; 2562 NavigationEntryImpl* transient_entry = new NavigationEntryImpl;
2562 transient_entry->SetURL(transient_url); 2563 transient_entry->SetURL(transient_url);
2563 controller.SetTransientEntry(transient_entry); 2564 controller.SetTransientEntry(transient_entry);
2564 2565
2565 // We should not have received any notifications. 2566 // We should not have received any notifications.
2566 EXPECT_EQ(0U, notifications.size()); 2567 EXPECT_EQ(0U, notifications.size());
2567 2568
2568 // Check our state. 2569 // Check our state.
2569 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2570 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2570 EXPECT_EQ(controller.GetEntryCount(), 3); 2571 EXPECT_EQ(controller.GetEntryCount(), 3);
2571 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); 2572 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1);
2572 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); 2573 EXPECT_EQ(controller.GetPendingEntryIndex(), -1);
2573 EXPECT_TRUE(controller.GetLastCommittedEntry()); 2574 EXPECT_TRUE(controller.GetLastCommittedEntry());
2574 EXPECT_FALSE(controller.GetPendingEntry()); 2575 EXPECT_FALSE(controller.GetPendingEntry());
2575 EXPECT_TRUE(controller.CanGoBack()); 2576 EXPECT_TRUE(controller.CanGoBack());
2576 EXPECT_FALSE(controller.CanGoForward()); 2577 EXPECT_FALSE(controller.CanGoForward());
2577 EXPECT_EQ(contents()->GetMaxPageID(), 1); 2578 EXPECT_EQ(contents()->GetMaxPageID(), 1);
2578 2579
2579 // Navigate. 2580 // Navigate.
2580 controller.LoadURL( 2581 controller.LoadURL(
2581 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2582 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2582 test_rvh()->SendNavigate(2, url2); 2583 main_test_rfh()->SendNavigate(2, url2);
2583 2584
2584 // We should have navigated, transient entry should be gone. 2585 // We should have navigated, transient entry should be gone.
2585 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); 2586 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL());
2586 EXPECT_EQ(controller.GetEntryCount(), 3); 2587 EXPECT_EQ(controller.GetEntryCount(), 3);
2587 2588
2588 // Add a transient again, then navigate with no pending entry this time. 2589 // Add a transient again, then navigate with no pending entry this time.
2589 transient_entry = new NavigationEntryImpl; 2590 transient_entry = new NavigationEntryImpl;
2590 transient_entry->SetURL(transient_url); 2591 transient_entry->SetURL(transient_url);
2591 controller.SetTransientEntry(transient_entry); 2592 controller.SetTransientEntry(transient_entry);
2592 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2593 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2593 test_rvh()->SendNavigate(3, url3); 2594 main_test_rfh()->SendNavigate(3, url3);
2594 // Transient entry should be gone. 2595 // Transient entry should be gone.
2595 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); 2596 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL());
2596 EXPECT_EQ(controller.GetEntryCount(), 4); 2597 EXPECT_EQ(controller.GetEntryCount(), 4);
2597 2598
2598 // Initiate a navigation, add a transient then commit navigation. 2599 // Initiate a navigation, add a transient then commit navigation.
2599 controller.LoadURL( 2600 controller.LoadURL(
2600 url4, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2601 url4, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2601 transient_entry = new NavigationEntryImpl; 2602 transient_entry = new NavigationEntryImpl;
2602 transient_entry->SetURL(transient_url); 2603 transient_entry->SetURL(transient_url);
2603 controller.SetTransientEntry(transient_entry); 2604 controller.SetTransientEntry(transient_entry);
2604 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2605 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2605 test_rvh()->SendNavigate(4, url4); 2606 main_test_rfh()->SendNavigate(4, url4);
2606 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); 2607 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL());
2607 EXPECT_EQ(controller.GetEntryCount(), 5); 2608 EXPECT_EQ(controller.GetEntryCount(), 5);
2608 2609
2609 // Add a transient and go back. This should simply remove the transient. 2610 // Add a transient and go back. This should simply remove the transient.
2610 transient_entry = new NavigationEntryImpl; 2611 transient_entry = new NavigationEntryImpl;
2611 transient_entry->SetURL(transient_url); 2612 transient_entry->SetURL(transient_url);
2612 controller.SetTransientEntry(transient_entry); 2613 controller.SetTransientEntry(transient_entry);
2613 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2614 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2614 EXPECT_TRUE(controller.CanGoBack()); 2615 EXPECT_TRUE(controller.CanGoBack());
2615 EXPECT_FALSE(controller.CanGoForward()); 2616 EXPECT_FALSE(controller.CanGoForward());
2616 controller.GoBack(); 2617 controller.GoBack();
2617 // Transient entry should be gone. 2618 // Transient entry should be gone.
2618 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); 2619 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL());
2619 EXPECT_EQ(controller.GetEntryCount(), 5); 2620 EXPECT_EQ(controller.GetEntryCount(), 5);
2620 test_rvh()->SendNavigate(3, url3); 2621 main_test_rfh()->SendNavigate(3, url3);
2621 2622
2622 // Add a transient and go to an entry before the current one. 2623 // Add a transient and go to an entry before the current one.
2623 transient_entry = new NavigationEntryImpl; 2624 transient_entry = new NavigationEntryImpl;
2624 transient_entry->SetURL(transient_url); 2625 transient_entry->SetURL(transient_url);
2625 controller.SetTransientEntry(transient_entry); 2626 controller.SetTransientEntry(transient_entry);
2626 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2627 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2627 controller.GoToIndex(1); 2628 controller.GoToIndex(1);
2628 // The navigation should have been initiated, transient entry should be gone. 2629 // The navigation should have been initiated, transient entry should be gone.
2629 EXPECT_FALSE(controller.GetTransientEntry()); 2630 EXPECT_FALSE(controller.GetTransientEntry());
2630 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL()); 2631 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL());
2631 // Visible entry does not update for history navigations until commit. 2632 // Visible entry does not update for history navigations until commit.
2632 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); 2633 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL());
2633 test_rvh()->SendNavigate(1, url1); 2634 main_test_rfh()->SendNavigate(1, url1);
2634 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 2635 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
2635 2636
2636 // Add a transient and go to an entry after the current one. 2637 // Add a transient and go to an entry after the current one.
2637 transient_entry = new NavigationEntryImpl; 2638 transient_entry = new NavigationEntryImpl;
2638 transient_entry->SetURL(transient_url); 2639 transient_entry->SetURL(transient_url);
2639 controller.SetTransientEntry(transient_entry); 2640 controller.SetTransientEntry(transient_entry);
2640 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2641 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2641 controller.GoToIndex(3); 2642 controller.GoToIndex(3);
2642 // The navigation should have been initiated, transient entry should be gone. 2643 // The navigation should have been initiated, transient entry should be gone.
2643 // Because of the transient entry that is removed, going to index 3 makes us 2644 // Because of the transient entry that is removed, going to index 3 makes us
2644 // land on url2 (which is visible after the commit). 2645 // land on url2 (which is visible after the commit).
2645 EXPECT_EQ(url2, controller.GetPendingEntry()->GetURL()); 2646 EXPECT_EQ(url2, controller.GetPendingEntry()->GetURL());
2646 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 2647 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
2647 test_rvh()->SendNavigate(2, url2); 2648 main_test_rfh()->SendNavigate(2, url2);
2648 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); 2649 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL());
2649 2650
2650 // Add a transient and go forward. 2651 // Add a transient and go forward.
2651 transient_entry = new NavigationEntryImpl; 2652 transient_entry = new NavigationEntryImpl;
2652 transient_entry->SetURL(transient_url); 2653 transient_entry->SetURL(transient_url);
2653 controller.SetTransientEntry(transient_entry); 2654 controller.SetTransientEntry(transient_entry);
2654 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2655 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2655 EXPECT_TRUE(controller.CanGoForward()); 2656 EXPECT_TRUE(controller.CanGoForward());
2656 controller.GoForward(); 2657 controller.GoForward();
2657 // We should have navigated, transient entry should be gone. 2658 // We should have navigated, transient entry should be gone.
2658 EXPECT_FALSE(controller.GetTransientEntry()); 2659 EXPECT_FALSE(controller.GetTransientEntry());
2659 EXPECT_EQ(url3, controller.GetPendingEntry()->GetURL()); 2660 EXPECT_EQ(url3, controller.GetPendingEntry()->GetURL());
2660 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); 2661 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL());
2661 test_rvh()->SendNavigate(3, url3); 2662 main_test_rfh()->SendNavigate(3, url3);
2662 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); 2663 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL());
2663 2664
2664 // Add a transient and do an in-page navigation, replacing the current entry. 2665 // Add a transient and do an in-page navigation, replacing the current entry.
2665 transient_entry = new NavigationEntryImpl; 2666 transient_entry = new NavigationEntryImpl;
2666 transient_entry->SetURL(transient_url); 2667 transient_entry->SetURL(transient_url);
2667 controller.SetTransientEntry(transient_entry); 2668 controller.SetTransientEntry(transient_entry);
2668 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2669 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2669 test_rvh()->SendNavigate(3, url3_ref); 2670 main_test_rfh()->SendNavigate(3, url3_ref);
2670 // Transient entry should be gone. 2671 // Transient entry should be gone.
2671 EXPECT_FALSE(controller.GetTransientEntry()); 2672 EXPECT_FALSE(controller.GetTransientEntry());
2672 EXPECT_EQ(url3_ref, controller.GetVisibleEntry()->GetURL()); 2673 EXPECT_EQ(url3_ref, controller.GetVisibleEntry()->GetURL());
2673 2674
2674 // Ensure the URLs are correct. 2675 // Ensure the URLs are correct.
2675 EXPECT_EQ(controller.GetEntryCount(), 5); 2676 EXPECT_EQ(controller.GetEntryCount(), 5);
2676 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0); 2677 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0);
2677 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), url1); 2678 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), url1);
2678 EXPECT_EQ(controller.GetEntryAtIndex(2)->GetURL(), url2); 2679 EXPECT_EQ(controller.GetEntryAtIndex(2)->GetURL(), url2);
2679 EXPECT_EQ(controller.GetEntryAtIndex(3)->GetURL(), url3_ref); 2680 EXPECT_EQ(controller.GetEntryAtIndex(3)->GetURL(), url3_ref);
2680 EXPECT_EQ(controller.GetEntryAtIndex(4)->GetURL(), url4); 2681 EXPECT_EQ(controller.GetEntryAtIndex(4)->GetURL(), url4);
2681 } 2682 }
2682 2683
2683 // Test that Reload initiates a new navigation to a transient entry's URL. 2684 // Test that Reload initiates a new navigation to a transient entry's URL.
2684 TEST_F(NavigationControllerTest, ReloadTransient) { 2685 TEST_F(NavigationControllerTest, ReloadTransient) {
2685 NavigationControllerImpl& controller = controller_impl(); 2686 NavigationControllerImpl& controller = controller_impl();
2686 const GURL url0("http://foo/0"); 2687 const GURL url0("http://foo/0");
2687 const GURL url1("http://foo/1"); 2688 const GURL url1("http://foo/1");
2688 const GURL transient_url("http://foo/transient"); 2689 const GURL transient_url("http://foo/transient");
2689 2690
2690 // Load |url0|, and start a pending navigation to |url1|. 2691 // Load |url0|, and start a pending navigation to |url1|.
2691 controller.LoadURL( 2692 controller.LoadURL(
2692 url0, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2693 url0, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2693 test_rvh()->SendNavigate(0, url0); 2694 main_test_rfh()->SendNavigate(0, url0);
2694 controller.LoadURL( 2695 controller.LoadURL(
2695 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2696 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2696 2697
2697 // A transient entry is added, interrupting the navigation. 2698 // A transient entry is added, interrupting the navigation.
2698 NavigationEntryImpl* transient_entry = new NavigationEntryImpl; 2699 NavigationEntryImpl* transient_entry = new NavigationEntryImpl;
2699 transient_entry->SetURL(transient_url); 2700 transient_entry->SetURL(transient_url);
2700 controller.SetTransientEntry(transient_entry); 2701 controller.SetTransientEntry(transient_entry);
2701 EXPECT_TRUE(controller.GetTransientEntry()); 2702 EXPECT_TRUE(controller.GetTransientEntry());
2702 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2703 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2703 2704
2704 // The page is reloaded, which should remove the pending entry for |url1| and 2705 // The page is reloaded, which should remove the pending entry for |url1| and
2705 // the transient entry for |transient_url|, and start a navigation to 2706 // the transient entry for |transient_url|, and start a navigation to
2706 // |transient_url|. 2707 // |transient_url|.
2707 controller.Reload(true); 2708 controller.Reload(true);
2708 EXPECT_FALSE(controller.GetTransientEntry()); 2709 EXPECT_FALSE(controller.GetTransientEntry());
2709 EXPECT_TRUE(controller.GetPendingEntry()); 2710 EXPECT_TRUE(controller.GetPendingEntry());
2710 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); 2711 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL());
2711 ASSERT_EQ(controller.GetEntryCount(), 1); 2712 ASSERT_EQ(controller.GetEntryCount(), 1);
2712 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0); 2713 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0);
2713 2714
2714 // Load of |transient_url| completes. 2715 // Load of |transient_url| completes.
2715 test_rvh()->SendNavigate(1, transient_url); 2716 main_test_rfh()->SendNavigate(1, transient_url);
2716 ASSERT_EQ(controller.GetEntryCount(), 2); 2717 ASSERT_EQ(controller.GetEntryCount(), 2);
2717 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0); 2718 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0);
2718 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), transient_url); 2719 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), transient_url);
2719 } 2720 }
2720 2721
2721 // Ensure that renderer initiated pending entries get replaced, so that we 2722 // Ensure that renderer initiated pending entries get replaced, so that we
2722 // don't show a stale virtual URL when a navigation commits. 2723 // don't show a stale virtual URL when a navigation commits.
2723 // See http://crbug.com/266922. 2724 // See http://crbug.com/266922.
2724 TEST_F(NavigationControllerTest, RendererInitiatedPendingEntries) { 2725 TEST_F(NavigationControllerTest, RendererInitiatedPendingEntries) {
2725 NavigationControllerImpl& controller = controller_impl(); 2726 NavigationControllerImpl& controller = controller_impl();
(...skipping 18 matching lines...) Expand all
2744 EXPECT_TRUE( 2745 EXPECT_TRUE(
2745 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2746 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2746 is_renderer_initiated()); 2747 is_renderer_initiated());
2747 2748
2748 // If the user clicks another link, we should replace the pending entry. 2749 // If the user clicks another link, we should replace the pending entry.
2749 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url2); 2750 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url2);
2750 EXPECT_EQ(url2, controller.GetPendingEntry()->GetURL()); 2751 EXPECT_EQ(url2, controller.GetPendingEntry()->GetURL());
2751 EXPECT_EQ(url2, controller.GetPendingEntry()->GetVirtualURL()); 2752 EXPECT_EQ(url2, controller.GetPendingEntry()->GetVirtualURL());
2752 2753
2753 // Once it commits, the URL and virtual URL should reflect the actual page. 2754 // Once it commits, the URL and virtual URL should reflect the actual page.
2754 test_rvh()->SendNavigate(0, url2); 2755 main_test_rfh()->SendNavigate(0, url2);
2755 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); 2756 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL());
2756 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetVirtualURL()); 2757 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetVirtualURL());
2757 2758
2758 // We should not replace the pending entry for an error URL. 2759 // We should not replace the pending entry for an error URL.
2759 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url1); 2760 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url1);
2760 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL()); 2761 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL());
2761 navigator->DidStartProvisionalLoad( 2762 navigator->DidStartProvisionalLoad(
2762 main_test_rfh(), 1, -1, true, GURL(kUnreachableWebDataURL)); 2763 main_test_rfh(), 1, -1, true, GURL(kUnreachableWebDataURL));
2763 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL()); 2764 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL());
2764 2765
2765 // We should remember if the pending entry will replace the current one. 2766 // We should remember if the pending entry will replace the current one.
2766 // http://crbug.com/308444. 2767 // http://crbug.com/308444.
2767 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url1); 2768 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url1);
2768 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2769 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2769 set_should_replace_entry(true); 2770 set_should_replace_entry(true);
2770 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url2); 2771 navigator->DidStartProvisionalLoad(main_test_rfh(), 1, -1, true, url2);
2771 EXPECT_TRUE( 2772 EXPECT_TRUE(
2772 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2773 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2773 should_replace_entry()); 2774 should_replace_entry());
2774 // TODO(nasko): Until OnNavigate is moved to RenderFrameHost, we need 2775 // TODO(nasko): Until OnNavigate is moved to RenderFrameHost, we need
2775 // to go through the RenderViewHost. The TestRenderViewHost routes navigations 2776 // to go through the RenderViewHost. The TestRenderViewHost routes navigations
2776 // to the main frame. 2777 // to the main frame.
2777 test_rvh()->SendNavigate(0, url2); 2778 main_test_rfh()->SendNavigate(0, url2);
2778 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); 2779 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL());
2779 } 2780 }
2780 2781
2781 // Tests that the URLs for renderer-initiated navigations are not displayed to 2782 // Tests that the URLs for renderer-initiated navigations are not displayed to
2782 // the user until the navigation commits, to prevent URL spoof attacks. 2783 // the user until the navigation commits, to prevent URL spoof attacks.
2783 // See http://crbug.com/99016. 2784 // See http://crbug.com/99016.
2784 TEST_F(NavigationControllerTest, DontShowRendererURLUntilCommit) { 2785 TEST_F(NavigationControllerTest, DontShowRendererURLUntilCommit) {
2785 NavigationControllerImpl& controller = controller_impl(); 2786 NavigationControllerImpl& controller = controller_impl();
2786 TestNotificationTracker notifications; 2787 TestNotificationTracker notifications;
2787 RegisterForAllNavNotifications(&notifications, &controller); 2788 RegisterForAllNavNotifications(&notifications, &controller);
2788 2789
2789 const GURL url0("http://foo/0"); 2790 const GURL url0("http://foo/0");
2790 const GURL url1("http://foo/1"); 2791 const GURL url1("http://foo/1");
2791 2792
2792 // For typed navigations (browser-initiated), both pending and visible entries 2793 // For typed navigations (browser-initiated), both pending and visible entries
2793 // should update before commit. 2794 // should update before commit.
2794 controller.LoadURL(url0, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2795 controller.LoadURL(url0, Referrer(), PAGE_TRANSITION_TYPED, std::string());
2795 EXPECT_EQ(url0, controller.GetPendingEntry()->GetURL()); 2796 EXPECT_EQ(url0, controller.GetPendingEntry()->GetURL());
2796 EXPECT_EQ(url0, controller.GetVisibleEntry()->GetURL()); 2797 EXPECT_EQ(url0, controller.GetVisibleEntry()->GetURL());
2797 test_rvh()->SendNavigate(0, url0); 2798 main_test_rfh()->SendNavigate(0, url0);
2798 2799
2799 // For link clicks (renderer-initiated navigations), the pending entry should 2800 // For link clicks (renderer-initiated navigations), the pending entry should
2800 // update before commit but the visible should not. 2801 // update before commit but the visible should not.
2801 NavigationController::LoadURLParams load_url_params(url1); 2802 NavigationController::LoadURLParams load_url_params(url1);
2802 load_url_params.is_renderer_initiated = true; 2803 load_url_params.is_renderer_initiated = true;
2803 controller.LoadURLWithParams(load_url_params); 2804 controller.LoadURLWithParams(load_url_params);
2804 EXPECT_EQ(url0, controller.GetVisibleEntry()->GetURL()); 2805 EXPECT_EQ(url0, controller.GetVisibleEntry()->GetURL());
2805 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL()); 2806 EXPECT_EQ(url1, controller.GetPendingEntry()->GetURL());
2806 EXPECT_TRUE( 2807 EXPECT_TRUE(
2807 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2808 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2808 is_renderer_initiated()); 2809 is_renderer_initiated());
2809 2810
2810 // After commit, both visible should be updated, there should be no pending 2811 // After commit, both visible should be updated, there should be no pending
2811 // entry, and we should no longer treat the entry as renderer-initiated. 2812 // entry, and we should no longer treat the entry as renderer-initiated.
2812 test_rvh()->SendNavigate(1, url1); 2813 main_test_rfh()->SendNavigate(1, url1);
2813 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 2814 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
2814 EXPECT_FALSE(controller.GetPendingEntry()); 2815 EXPECT_FALSE(controller.GetPendingEntry());
2815 EXPECT_FALSE( 2816 EXPECT_FALSE(
2816 NavigationEntryImpl::FromNavigationEntry( 2817 NavigationEntryImpl::FromNavigationEntry(
2817 controller.GetLastCommittedEntry())->is_renderer_initiated()); 2818 controller.GetLastCommittedEntry())->is_renderer_initiated());
2818 2819
2819 notifications.Reset(); 2820 notifications.Reset();
2820 } 2821 }
2821 2822
2822 // Tests that the URLs for renderer-initiated navigations in new tabs are 2823 // Tests that the URLs for renderer-initiated navigations in new tabs are
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2875 load_url_params.is_renderer_initiated = true; 2876 load_url_params.is_renderer_initiated = true;
2876 controller.LoadURLWithParams(load_url_params); 2877 controller.LoadURLWithParams(load_url_params);
2877 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 2878 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
2878 EXPECT_TRUE( 2879 EXPECT_TRUE(
2879 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> 2880 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())->
2880 is_renderer_initiated()); 2881 is_renderer_initiated());
2881 EXPECT_TRUE(controller.IsInitialNavigation()); 2882 EXPECT_TRUE(controller.IsInitialNavigation());
2882 EXPECT_FALSE(test_rvh()->has_accessed_initial_document()); 2883 EXPECT_FALSE(test_rvh()->has_accessed_initial_document());
2883 2884
2884 // Simulate a commit and then starting a new pending navigation. 2885 // Simulate a commit and then starting a new pending navigation.
2885 test_rvh()->SendNavigate(0, url1); 2886 main_test_rfh()->SendNavigate(0, url1);
2886 NavigationController::LoadURLParams load_url2_params(url2); 2887 NavigationController::LoadURLParams load_url2_params(url2);
2887 load_url2_params.transition_type = PAGE_TRANSITION_LINK; 2888 load_url2_params.transition_type = PAGE_TRANSITION_LINK;
2888 load_url2_params.is_renderer_initiated = true; 2889 load_url2_params.is_renderer_initiated = true;
2889 controller.LoadURLWithParams(load_url2_params); 2890 controller.LoadURLWithParams(load_url2_params);
2890 2891
2891 // We should not consider this an initial navigation, and thus should 2892 // We should not consider this an initial navigation, and thus should
2892 // not show the pending URL. 2893 // not show the pending URL.
2893 EXPECT_FALSE(test_rvh()->has_accessed_initial_document()); 2894 EXPECT_FALSE(test_rvh()->has_accessed_initial_document());
2894 EXPECT_FALSE(controller.IsInitialNavigation()); 2895 EXPECT_FALSE(controller.IsInitialNavigation());
2895 EXPECT_TRUE(controller.GetVisibleEntry()); 2896 EXPECT_TRUE(controller.GetVisibleEntry());
2896 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL()); 2897 EXPECT_EQ(url1, controller.GetVisibleEntry()->GetURL());
2897 2898
2898 notifications.Reset(); 2899 notifications.Reset();
2899 } 2900 }
2900 2901
2901 // Tests that IsInPageNavigation returns appropriate results. Prevents 2902 // Tests that IsInPageNavigation returns appropriate results. Prevents
2902 // regression for bug 1126349. 2903 // regression for bug 1126349.
2903 TEST_F(NavigationControllerTest, IsInPageNavigation) { 2904 TEST_F(NavigationControllerTest, IsInPageNavigation) {
2904 NavigationControllerImpl& controller = controller_impl(); 2905 NavigationControllerImpl& controller = controller_impl();
2905 // Navigate to URL with no refs. 2906 // Navigate to URL with no refs.
2906 const GURL url("http://www.google.com/home.html"); 2907 const GURL url("http://www.google.com/home.html");
2907 test_rvh()->SendNavigate(0, url); 2908 main_test_rfh()->SendNavigate(0, url);
2908 2909
2909 // Reloading the page is not an in-page navigation. 2910 // Reloading the page is not an in-page navigation.
2910 EXPECT_FALSE(controller.IsURLInPageNavigation(url)); 2911 EXPECT_FALSE(controller.IsURLInPageNavigation(url));
2911 const GURL other_url("http://www.google.com/add.html"); 2912 const GURL other_url("http://www.google.com/add.html");
2912 EXPECT_FALSE(controller.IsURLInPageNavigation(other_url)); 2913 EXPECT_FALSE(controller.IsURLInPageNavigation(other_url));
2913 const GURL url_with_ref("http://www.google.com/home.html#my_ref"); 2914 const GURL url_with_ref("http://www.google.com/home.html#my_ref");
2914 EXPECT_TRUE(controller.IsURLInPageNavigation(url_with_ref)); 2915 EXPECT_TRUE(controller.IsURLInPageNavigation(url_with_ref));
2915 2916
2916 // Navigate to URL with refs. 2917 // Navigate to URL with refs.
2917 test_rvh()->SendNavigate(1, url_with_ref); 2918 main_test_rfh()->SendNavigate(1, url_with_ref);
2918 2919
2919 // Reloading the page is not an in-page navigation. 2920 // Reloading the page is not an in-page navigation.
2920 EXPECT_FALSE(controller.IsURLInPageNavigation(url_with_ref)); 2921 EXPECT_FALSE(controller.IsURLInPageNavigation(url_with_ref));
2921 EXPECT_FALSE(controller.IsURLInPageNavigation(url)); 2922 EXPECT_FALSE(controller.IsURLInPageNavigation(url));
2922 EXPECT_FALSE(controller.IsURLInPageNavigation(other_url)); 2923 EXPECT_FALSE(controller.IsURLInPageNavigation(other_url));
2923 const GURL other_url_with_ref("http://www.google.com/home.html#my_other_ref"); 2924 const GURL other_url_with_ref("http://www.google.com/home.html#my_other_ref");
2924 EXPECT_TRUE(controller.IsURLInPageNavigation(other_url_with_ref)); 2925 EXPECT_TRUE(controller.IsURLInPageNavigation(other_url_with_ref));
2925 2926
2926 // Going to the same url again will be considered in-page 2927 // Going to the same url again will be considered in-page
2927 // if the renderer says it is even if the navigation type isn't IN_PAGE. 2928 // if the renderer says it is even if the navigation type isn't IN_PAGE.
2928 EXPECT_TRUE(controller.IsURLInPageNavigation(url_with_ref, true, 2929 EXPECT_TRUE(controller.IsURLInPageNavigation(url_with_ref, true,
2929 NAVIGATION_TYPE_UNKNOWN)); 2930 NAVIGATION_TYPE_UNKNOWN));
2930 2931
2931 // Going back to the non ref url will be considered in-page if the navigation 2932 // Going back to the non ref url will be considered in-page if the navigation
2932 // type is IN_PAGE. 2933 // type is IN_PAGE.
2933 EXPECT_TRUE(controller.IsURLInPageNavigation(url, true, 2934 EXPECT_TRUE(controller.IsURLInPageNavigation(url, true,
2934 NAVIGATION_TYPE_IN_PAGE)); 2935 NAVIGATION_TYPE_IN_PAGE));
2935 } 2936 }
2936 2937
2937 // Some pages can have subframes with the same base URL (minus the reference) as 2938 // Some pages can have subframes with the same base URL (minus the reference) as
2938 // the main page. Even though this is hard, it can happen, and we don't want 2939 // the main page. Even though this is hard, it can happen, and we don't want
2939 // these subframe navigations to affect the toplevel document. They should 2940 // these subframe navigations to affect the toplevel document. They should
2940 // instead be ignored. http://crbug.com/5585 2941 // instead be ignored. http://crbug.com/5585
2941 TEST_F(NavigationControllerTest, SameSubframe) { 2942 TEST_F(NavigationControllerTest, SameSubframe) {
2942 NavigationControllerImpl& controller = controller_impl(); 2943 NavigationControllerImpl& controller = controller_impl();
2943 // Navigate the main frame. 2944 // Navigate the main frame.
2944 const GURL url("http://www.google.com/"); 2945 const GURL url("http://www.google.com/");
2945 test_rvh()->SendNavigate(0, url); 2946 main_test_rfh()->SendNavigate(0, url);
2946 2947
2947 // We should be at the first navigation entry. 2948 // We should be at the first navigation entry.
2948 EXPECT_EQ(controller.GetEntryCount(), 1); 2949 EXPECT_EQ(controller.GetEntryCount(), 1);
2949 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); 2950 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0);
2950 2951
2951 // Navigate a subframe that would normally count as in-page. 2952 // Navigate a subframe that would normally count as in-page.
2952 const GURL subframe("http://www.google.com/#"); 2953 const GURL subframe("http://www.google.com/#");
2953 ViewHostMsg_FrameNavigate_Params params; 2954 FrameHostMsg_DidCommitProvisionalLoad_Params params;
2954 params.page_id = 0; 2955 params.page_id = 0;
2955 params.url = subframe; 2956 params.url = subframe;
2956 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME; 2957 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME;
2957 params.should_update_history = false; 2958 params.should_update_history = false;
2958 params.gesture = NavigationGestureAuto; 2959 params.gesture = NavigationGestureAuto;
2959 params.is_post = false; 2960 params.is_post = false;
2960 params.page_state = PageState::CreateFromURL(subframe); 2961 params.page_state = PageState::CreateFromURL(subframe);
2961 LoadCommittedDetails details; 2962 LoadCommittedDetails details;
2962 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details)); 2963 EXPECT_FALSE(controller.RendererDidNavigate(test_rvh(), params, &details));
2963 2964
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 NavigateAndCommit(url1); 3059 NavigateAndCommit(url1);
3059 3060
3060 // Now start a pending load to a totally different page, but don't commit it. 3061 // Now start a pending load to a totally different page, but don't commit it.
3061 const GURL url2("http://bar/"); 3062 const GURL url2("http://bar/");
3062 controller.LoadURL( 3063 controller.LoadURL(
3063 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 3064 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
3064 3065
3065 // Send a subframe update from the first page, as if one had just 3066 // Send a subframe update from the first page, as if one had just
3066 // automatically loaded. Auto subframes don't increment the page ID. 3067 // automatically loaded. Auto subframes don't increment the page ID.
3067 const GURL url1_sub("http://foo/subframe"); 3068 const GURL url1_sub("http://foo/subframe");
3068 ViewHostMsg_FrameNavigate_Params params; 3069 FrameHostMsg_DidCommitProvisionalLoad_Params params;
3069 params.page_id = controller.GetLastCommittedEntry()->GetPageID(); 3070 params.page_id = controller.GetLastCommittedEntry()->GetPageID();
3070 params.url = url1_sub; 3071 params.url = url1_sub;
3071 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME; 3072 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME;
3072 params.should_update_history = false; 3073 params.should_update_history = false;
3073 params.gesture = NavigationGestureAuto; 3074 params.gesture = NavigationGestureAuto;
3074 params.is_post = false; 3075 params.is_post = false;
3075 params.page_state = PageState::CreateFromURL(url1_sub); 3076 params.page_state = PageState::CreateFromURL(url1_sub);
3076 LoadCommittedDetails details; 3077 LoadCommittedDetails details;
3077 3078
3078 // This should return false meaning that nothing was actually updated. 3079 // This should return false meaning that nothing was actually updated.
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
3733 3734
3734 // We should only have the last committed and pending entries at this point, 3735 // We should only have the last committed and pending entries at this point,
3735 // and the pending entry should still not be in the entry list. 3736 // and the pending entry should still not be in the entry list.
3736 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); 3737 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
3737 EXPECT_EQ(url2, controller.GetEntryAtIndex(0)->GetURL()); 3738 EXPECT_EQ(url2, controller.GetEntryAtIndex(0)->GetURL());
3738 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 3739 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
3739 EXPECT_TRUE(controller.GetPendingEntry()); 3740 EXPECT_TRUE(controller.GetPendingEntry());
3740 EXPECT_EQ(1, controller.GetEntryCount()); 3741 EXPECT_EQ(1, controller.GetEntryCount());
3741 3742
3742 // Try to commit the pending entry. 3743 // Try to commit the pending entry.
3743 test_rvh()->SendNavigate(2, url3); 3744 main_test_rfh()->SendNavigate(2, url3);
3744 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 3745 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
3745 EXPECT_FALSE(controller.GetPendingEntry()); 3746 EXPECT_FALSE(controller.GetPendingEntry());
3746 EXPECT_EQ(2, controller.GetEntryCount()); 3747 EXPECT_EQ(2, controller.GetEntryCount());
3747 EXPECT_EQ(url3, controller.GetEntryAtIndex(1)->GetURL()); 3748 EXPECT_EQ(url3, controller.GetEntryAtIndex(1)->GetURL());
3748 } 3749 }
3749 3750
3750 // Test to ensure that when we do a history navigation back to the current 3751 // Test to ensure that when we do a history navigation back to the current
3751 // committed page (e.g., going forward to a slow-loading page, then pressing 3752 // committed page (e.g., going forward to a slow-loading page, then pressing
3752 // the back button), we just stop the navigation to prevent the throbber from 3753 // the back button), we just stop the navigation to prevent the throbber from
3753 // running continuously. Otherwise, the RenderViewHost forces the throbber to 3754 // running continuously. Otherwise, the RenderViewHost forces the throbber to
(...skipping 21 matching lines...) Expand all
3775 TEST_F(NavigationControllerTest, IsInitialNavigation) { 3776 TEST_F(NavigationControllerTest, IsInitialNavigation) {
3776 NavigationControllerImpl& controller = controller_impl(); 3777 NavigationControllerImpl& controller = controller_impl();
3777 TestNotificationTracker notifications; 3778 TestNotificationTracker notifications;
3778 RegisterForAllNavNotifications(&notifications, &controller); 3779 RegisterForAllNavNotifications(&notifications, &controller);
3779 3780
3780 // Initial state. 3781 // Initial state.
3781 EXPECT_TRUE(controller.IsInitialNavigation()); 3782 EXPECT_TRUE(controller.IsInitialNavigation());
3782 3783
3783 // After commit, it stays false. 3784 // After commit, it stays false.
3784 const GURL url1("http://foo1"); 3785 const GURL url1("http://foo1");
3785 test_rvh()->SendNavigate(0, url1); 3786 main_test_rfh()->SendNavigate(0, url1);
3786 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3787 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3787 navigation_entry_committed_counter_ = 0; 3788 navigation_entry_committed_counter_ = 0;
3788 EXPECT_FALSE(controller.IsInitialNavigation()); 3789 EXPECT_FALSE(controller.IsInitialNavigation());
3789 3790
3790 // After starting a new navigation, it stays false. 3791 // After starting a new navigation, it stays false.
3791 const GURL url2("http://foo2"); 3792 const GURL url2("http://foo2");
3792 controller.LoadURL( 3793 controller.LoadURL(
3793 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 3794 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
3794 } 3795 }
3795 3796
3796 // Check that the favicon is not reused across a client redirect. 3797 // Check that the favicon is not reused across a client redirect.
3797 // (crbug.com/28515) 3798 // (crbug.com/28515)
3798 TEST_F(NavigationControllerTest, ClearFaviconOnRedirect) { 3799 TEST_F(NavigationControllerTest, ClearFaviconOnRedirect) {
3799 const GURL kPageWithFavicon("http://withfavicon.html"); 3800 const GURL kPageWithFavicon("http://withfavicon.html");
3800 const GURL kPageWithoutFavicon("http://withoutfavicon.html"); 3801 const GURL kPageWithoutFavicon("http://withoutfavicon.html");
3801 const GURL kIconURL("http://withfavicon.ico"); 3802 const GURL kIconURL("http://withfavicon.ico");
3802 const gfx::Image kDefaultFavicon = FaviconStatus().image; 3803 const gfx::Image kDefaultFavicon = FaviconStatus().image;
3803 3804
3804 NavigationControllerImpl& controller = controller_impl(); 3805 NavigationControllerImpl& controller = controller_impl();
3805 TestNotificationTracker notifications; 3806 TestNotificationTracker notifications;
3806 RegisterForAllNavNotifications(&notifications, &controller); 3807 RegisterForAllNavNotifications(&notifications, &controller);
3807 3808
3808 test_rvh()->SendNavigate(0, kPageWithFavicon); 3809 main_test_rfh()->SendNavigate(0, kPageWithFavicon);
3809 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3810 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3810 navigation_entry_committed_counter_ = 0; 3811 navigation_entry_committed_counter_ = 0;
3811 3812
3812 NavigationEntry* entry = controller.GetLastCommittedEntry(); 3813 NavigationEntry* entry = controller.GetLastCommittedEntry();
3813 EXPECT_TRUE(entry); 3814 EXPECT_TRUE(entry);
3814 EXPECT_EQ(kPageWithFavicon, entry->GetURL()); 3815 EXPECT_EQ(kPageWithFavicon, entry->GetURL());
3815 3816
3816 // Simulate Chromium having set the favicon for |kPageWithFavicon|. 3817 // Simulate Chromium having set the favicon for |kPageWithFavicon|.
3817 content::FaviconStatus& favicon_status = entry->GetFavicon(); 3818 content::FaviconStatus& favicon_status = entry->GetFavicon();
3818 favicon_status.image = CreateImage(SK_ColorWHITE); 3819 favicon_status.image = CreateImage(SK_ColorWHITE);
3819 favicon_status.url = kIconURL; 3820 favicon_status.url = kIconURL;
3820 favicon_status.valid = true; 3821 favicon_status.valid = true;
3821 EXPECT_FALSE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image)); 3822 EXPECT_FALSE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image));
3822 3823
3823 test_rvh()->SendNavigateWithTransition( 3824 main_test_rfh()->SendNavigateWithTransition(
3824 0, // same page ID. 3825 0, // same page ID.
3825 kPageWithoutFavicon, 3826 kPageWithoutFavicon,
3826 PAGE_TRANSITION_CLIENT_REDIRECT); 3827 PAGE_TRANSITION_CLIENT_REDIRECT);
3827 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3828 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3828 navigation_entry_committed_counter_ = 0; 3829 navigation_entry_committed_counter_ = 0;
3829 3830
3830 entry = controller.GetLastCommittedEntry(); 3831 entry = controller.GetLastCommittedEntry();
3831 EXPECT_TRUE(entry); 3832 EXPECT_TRUE(entry);
3832 EXPECT_EQ(kPageWithoutFavicon, entry->GetURL()); 3833 EXPECT_EQ(kPageWithoutFavicon, entry->GetURL());
3833 3834
3834 EXPECT_TRUE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image)); 3835 EXPECT_TRUE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image));
3835 } 3836 }
3836 3837
3837 // Check that the favicon is not cleared for NavigationEntries which were 3838 // Check that the favicon is not cleared for NavigationEntries which were
3838 // previously navigated to. 3839 // previously navigated to.
3839 TEST_F(NavigationControllerTest, BackNavigationDoesNotClearFavicon) { 3840 TEST_F(NavigationControllerTest, BackNavigationDoesNotClearFavicon) {
3840 const GURL kUrl1("http://www.a.com/1"); 3841 const GURL kUrl1("http://www.a.com/1");
3841 const GURL kUrl2("http://www.a.com/2"); 3842 const GURL kUrl2("http://www.a.com/2");
3842 const GURL kIconURL("http://www.a.com/1/favicon.ico"); 3843 const GURL kIconURL("http://www.a.com/1/favicon.ico");
3843 3844
3844 NavigationControllerImpl& controller = controller_impl(); 3845 NavigationControllerImpl& controller = controller_impl();
3845 TestNotificationTracker notifications; 3846 TestNotificationTracker notifications;
3846 RegisterForAllNavNotifications(&notifications, &controller); 3847 RegisterForAllNavNotifications(&notifications, &controller);
3847 3848
3848 test_rvh()->SendNavigate(0, kUrl1); 3849 main_test_rfh()->SendNavigate(0, kUrl1);
3849 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3850 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3850 navigation_entry_committed_counter_ = 0; 3851 navigation_entry_committed_counter_ = 0;
3851 3852
3852 // Simulate Chromium having set the favicon for |kUrl1|. 3853 // Simulate Chromium having set the favicon for |kUrl1|.
3853 gfx::Image favicon_image = CreateImage(SK_ColorWHITE); 3854 gfx::Image favicon_image = CreateImage(SK_ColorWHITE);
3854 content::NavigationEntry* entry = controller.GetLastCommittedEntry(); 3855 content::NavigationEntry* entry = controller.GetLastCommittedEntry();
3855 EXPECT_TRUE(entry); 3856 EXPECT_TRUE(entry);
3856 content::FaviconStatus& favicon_status = entry->GetFavicon(); 3857 content::FaviconStatus& favicon_status = entry->GetFavicon();
3857 favicon_status.image = favicon_image; 3858 favicon_status.image = favicon_image;
3858 favicon_status.url = kIconURL; 3859 favicon_status.url = kIconURL;
3859 favicon_status.valid = true; 3860 favicon_status.valid = true;
3860 3861
3861 // Navigate to another page and go back to the original page. 3862 // Navigate to another page and go back to the original page.
3862 test_rvh()->SendNavigate(1, kUrl2); 3863 main_test_rfh()->SendNavigate(1, kUrl2);
3863 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3864 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3864 navigation_entry_committed_counter_ = 0; 3865 navigation_entry_committed_counter_ = 0;
3865 test_rvh()->SendNavigateWithTransition( 3866 main_test_rfh()->SendNavigateWithTransition(
3866 0, 3867 0,
3867 kUrl1, 3868 kUrl1,
3868 PAGE_TRANSITION_FORWARD_BACK); 3869 PAGE_TRANSITION_FORWARD_BACK);
3869 EXPECT_EQ(1U, navigation_entry_committed_counter_); 3870 EXPECT_EQ(1U, navigation_entry_committed_counter_);
3870 navigation_entry_committed_counter_ = 0; 3871 navigation_entry_committed_counter_ = 0;
3871 3872
3872 // Verify that the favicon for the page at |kUrl1| was not cleared. 3873 // Verify that the favicon for the page at |kUrl1| was not cleared.
3873 entry = controller.GetEntryAtIndex(0); 3874 entry = controller.GetEntryAtIndex(0);
3874 EXPECT_TRUE(entry); 3875 EXPECT_TRUE(entry);
3875 EXPECT_EQ(kUrl1, entry->GetURL()); 3876 EXPECT_EQ(kUrl1, entry->GetURL());
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
4015 EXPECT_EQ(1, controller.GetEntryCount()); 4016 EXPECT_EQ(1, controller.GetEntryCount());
4016 EXPECT_EQ(0, controller.GetCurrentEntryIndex()); 4017 EXPECT_EQ(0, controller.GetCurrentEntryIndex());
4017 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); 4018 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
4018 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); 4019 EXPECT_EQ(-1, controller.GetPendingEntryIndex());
4019 EXPECT_FALSE(controller.CanGoBack()); 4020 EXPECT_FALSE(controller.CanGoBack());
4020 EXPECT_FALSE(controller.CanGoForward()); 4021 EXPECT_FALSE(controller.CanGoForward());
4021 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); 4022 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL());
4022 } 4023 }
4023 4024
4024 } // namespace content 4025 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698