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

Side by Side Diff: ios/web/navigation/crw_session_controller_unittest.mm

Issue 2482983003: Reland: [ios] Refactored back-forward navigation in CRWSessionController. (Closed)
Patch Set: Fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/web/navigation/crw_session_controller.h" 5 #import "ios/web/navigation/crw_session_controller.h"
6 6
7 #import <Foundation/Foundation.h> 7 #import <Foundation/Foundation.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 367
368 EXPECT_EQ(1U, [[session_controller_ entries] count]); 368 EXPECT_EQ(1U, [[session_controller_ entries] count]);
369 EXPECT_EQ( 369 EXPECT_EQ(
370 GURL("http://www.url.com/"), 370 GURL("http://www.url.com/"),
371 [session_controller_ URLForSessionAtIndex:0U]); 371 [session_controller_ URLForSessionAtIndex:0U]);
372 EXPECT_EQ( 372 EXPECT_EQ(
373 [[session_controller_ entries] objectAtIndex:0U], 373 [[session_controller_ entries] objectAtIndex:0U],
374 [session_controller_ currentEntry]); 374 [session_controller_ currentEntry]);
375 } 375 }
376 376
377 // Tests going back from the second and last entry to the first one.
377 TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) { 378 TEST_F(CRWSessionControllerTest, GoBackFromTheEnd) {
378 [session_controller_ 379 [session_controller_
379 addPendingEntry:GURL("http://www.url.com") 380 addPendingEntry:GURL("http://www.url.com")
380 referrer:MakeReferrer("http://www.referer.com") 381 referrer:MakeReferrer("http://www.referer.com")
381 transition:ui::PAGE_TRANSITION_TYPED 382 transition:ui::PAGE_TRANSITION_TYPED
382 rendererInitiated:NO]; 383 rendererInitiated:NO];
383 [session_controller_ commitPendingEntry]; 384 [session_controller_ commitPendingEntry];
384 [session_controller_ 385 [session_controller_
385 addPendingEntry:GURL("http://www.url2.com") 386 addPendingEntry:GURL("http://www.url2.com")
386 referrer:MakeReferrer("http://www.referer.com") 387 referrer:MakeReferrer("http://www.referer.com")
387 transition:ui::PAGE_TRANSITION_TYPED 388 transition:ui::PAGE_TRANSITION_TYPED
388 rendererInitiated:NO]; 389 rendererInitiated:NO];
389 [session_controller_ commitPendingEntry]; 390 [session_controller_ commitPendingEntry];
390 391
391 [session_controller_ goBack]; 392 [session_controller_ goBack];
392 393
393 EXPECT_EQ(2U, [[session_controller_ entries] count]); 394 ASSERT_EQ(2U, [[session_controller_ entries] count]);
394 EXPECT_EQ( 395 EXPECT_EQ(
395 GURL("http://www.url.com/"), 396 GURL("http://www.url.com/"),
396 [session_controller_ URLForSessionAtIndex:0U]); 397 [session_controller_ URLForSessionAtIndex:0U]);
397 EXPECT_EQ( 398 EXPECT_EQ(
398 GURL("http://www.url2.com/"), 399 GURL("http://www.url2.com/"),
399 [session_controller_ URLForSessionAtIndex:1U]); 400 [session_controller_ URLForSessionAtIndex:1U]);
400 EXPECT_EQ( 401 EXPECT_EQ(
401 [[session_controller_ entries] objectAtIndex:0U], 402 [[session_controller_ entries] objectAtIndex:0U],
402 [session_controller_ currentEntry]); 403 [session_controller_ currentEntry]);
404 EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
405 [session_controller_ previousEntry]);
403 } 406 }
404 407
408 // Tests going back twice from the second and last entry to the first one.
405 TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) { 409 TEST_F(CRWSessionControllerTest, GoBackFromTheBeginning) {
406 [session_controller_ 410 [session_controller_
407 addPendingEntry:GURL("http://www.url.com") 411 addPendingEntry:GURL("http://www.url.com")
408 referrer:MakeReferrer("http://www.referer.com") 412 referrer:MakeReferrer("http://www.referer.com")
409 transition:ui::PAGE_TRANSITION_TYPED 413 transition:ui::PAGE_TRANSITION_TYPED
410 rendererInitiated:NO]; 414 rendererInitiated:NO];
411 [session_controller_ commitPendingEntry]; 415 [session_controller_ commitPendingEntry];
412 [session_controller_ 416 [session_controller_
413 addPendingEntry:GURL("http://www.url2.com") 417 addPendingEntry:GURL("http://www.url2.com")
414 referrer:MakeReferrer("http://www.referer.com") 418 referrer:MakeReferrer("http://www.referer.com")
415 transition:ui::PAGE_TRANSITION_TYPED 419 transition:ui::PAGE_TRANSITION_TYPED
416 rendererInitiated:NO]; 420 rendererInitiated:NO];
417 [session_controller_ commitPendingEntry]; 421 [session_controller_ commitPendingEntry];
418 422
419 [session_controller_ goBack]; 423 [session_controller_ goBack];
420 [session_controller_ goBack]; 424 [session_controller_ goBack];
421 425
422 EXPECT_EQ(2U, [[session_controller_ entries] count]); 426 EXPECT_EQ(2U, [[session_controller_ entries] count]);
423 EXPECT_EQ( 427 EXPECT_EQ(
424 GURL("http://www.url.com/"), 428 GURL("http://www.url.com/"),
425 [session_controller_ URLForSessionAtIndex:0U]); 429 [session_controller_ URLForSessionAtIndex:0U]);
426 EXPECT_EQ( 430 EXPECT_EQ(
427 GURL("http://www.url2.com/"), 431 GURL("http://www.url2.com/"),
428 [session_controller_ URLForSessionAtIndex:1U]); 432 [session_controller_ URLForSessionAtIndex:1U]);
429 EXPECT_EQ( 433 EXPECT_EQ(
430 [[session_controller_ entries] objectAtIndex:0U], 434 [[session_controller_ entries] objectAtIndex:0U],
431 [session_controller_ currentEntry]); 435 [session_controller_ currentEntry]);
436 EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
437 [session_controller_ previousEntry]);
432 } 438 }
433 439
434 TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) { 440 TEST_F(CRWSessionControllerTest, GoBackFromTheMiddle) {
435 [session_controller_ 441 [session_controller_
436 addPendingEntry:GURL("http://www.url.com") 442 addPendingEntry:GURL("http://www.url.com")
437 referrer:MakeReferrer("http://www.referer.com") 443 referrer:MakeReferrer("http://www.referer.com")
438 transition:ui::PAGE_TRANSITION_TYPED 444 transition:ui::PAGE_TRANSITION_TYPED
439 rendererInitiated:NO]; 445 rendererInitiated:NO];
440 [session_controller_ commitPendingEntry]; 446 [session_controller_ commitPendingEntry];
441 [session_controller_ 447 [session_controller_
(...skipping 27 matching lines...) Expand all
469 [session_controller_ URLForSessionAtIndex:1U]); 475 [session_controller_ URLForSessionAtIndex:1U]);
470 EXPECT_EQ( 476 EXPECT_EQ(
471 GURL("http://www.url3.com/"), 477 GURL("http://www.url3.com/"),
472 [session_controller_ URLForSessionAtIndex:2U]); 478 [session_controller_ URLForSessionAtIndex:2U]);
473 EXPECT_EQ( 479 EXPECT_EQ(
474 GURL("http://www.url4.com/"), 480 GURL("http://www.url4.com/"),
475 [session_controller_ URLForSessionAtIndex:3U]); 481 [session_controller_ URLForSessionAtIndex:3U]);
476 EXPECT_EQ( 482 EXPECT_EQ(
477 [[session_controller_ entries] objectAtIndex:1U], 483 [[session_controller_ entries] objectAtIndex:1U],
478 [session_controller_ currentEntry]); 484 [session_controller_ currentEntry]);
485 EXPECT_EQ([[session_controller_ entries] objectAtIndex:2U],
486 [session_controller_ previousEntry]);
479 } 487 }
480 488
481 TEST_F(CRWSessionControllerTest, GoBackAndRemove) { 489 TEST_F(CRWSessionControllerTest, GoBackAndRemove) {
482 [session_controller_ 490 [session_controller_
483 addPendingEntry:GURL("http://www.url.com") 491 addPendingEntry:GURL("http://www.url.com")
484 referrer:MakeReferrer("http://www.referer.com") 492 referrer:MakeReferrer("http://www.referer.com")
485 transition:ui::PAGE_TRANSITION_TYPED 493 transition:ui::PAGE_TRANSITION_TYPED
486 rendererInitiated:NO]; 494 rendererInitiated:NO];
487 [session_controller_ commitPendingEntry]; 495 [session_controller_ commitPendingEntry];
488 [session_controller_ 496 [session_controller_
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 531
524 [session_controller_ goForward]; 532 [session_controller_ goForward];
525 533
526 EXPECT_EQ(1U, [[session_controller_ entries] count]); 534 EXPECT_EQ(1U, [[session_controller_ entries] count]);
527 EXPECT_EQ( 535 EXPECT_EQ(
528 GURL("http://www.url.com/"), 536 GURL("http://www.url.com/"),
529 [session_controller_ URLForSessionAtIndex:0U]); 537 [session_controller_ URLForSessionAtIndex:0U]);
530 EXPECT_EQ( 538 EXPECT_EQ(
531 [[session_controller_ entries] objectAtIndex:0U], 539 [[session_controller_ entries] objectAtIndex:0U],
532 [session_controller_ currentEntry]); 540 [session_controller_ currentEntry]);
541 EXPECT_EQ([[session_controller_ entries] objectAtIndex:0U],
542 [session_controller_ currentEntry]);
533 } 543 }
534 544
535 TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) { 545 TEST_F(CRWSessionControllerTest, GoForewardFromTheEnd) {
536 [session_controller_ 546 [session_controller_
537 addPendingEntry:GURL("http://www.url.com") 547 addPendingEntry:GURL("http://www.url.com")
538 referrer:MakeReferrer("http://www.referer.com") 548 referrer:MakeReferrer("http://www.referer.com")
539 transition:ui::PAGE_TRANSITION_TYPED 549 transition:ui::PAGE_TRANSITION_TYPED
540 rendererInitiated:NO]; 550 rendererInitiated:NO];
541 [session_controller_ commitPendingEntry]; 551 [session_controller_ commitPendingEntry];
542 [session_controller_ 552 [session_controller_
543 addPendingEntry:GURL("http://www.url2.com") 553 addPendingEntry:GURL("http://www.url2.com")
544 referrer:MakeReferrer("http://www.referer.com") 554 referrer:MakeReferrer("http://www.referer.com")
545 transition:ui::PAGE_TRANSITION_TYPED 555 transition:ui::PAGE_TRANSITION_TYPED
546 rendererInitiated:NO]; 556 rendererInitiated:NO];
547 [session_controller_ commitPendingEntry]; 557 [session_controller_ commitPendingEntry];
548 558
549 [session_controller_ goForward]; 559 [session_controller_ goForward];
550 560
551 EXPECT_EQ(2U, [[session_controller_ entries] count]); 561 EXPECT_EQ(2U, [[session_controller_ entries] count]);
552 EXPECT_EQ( 562 EXPECT_EQ(
553 GURL("http://www.url.com/"), 563 GURL("http://www.url.com/"),
554 [session_controller_ URLForSessionAtIndex:0U]); 564 [session_controller_ URLForSessionAtIndex:0U]);
555 EXPECT_EQ( 565 EXPECT_EQ(
556 GURL("http://www.url2.com/"), 566 GURL("http://www.url2.com/"),
557 [session_controller_ URLForSessionAtIndex:1U]); 567 [session_controller_ URLForSessionAtIndex:1U]);
558 EXPECT_EQ( 568 EXPECT_EQ(
559 [[session_controller_ entries] objectAtIndex:1U], 569 [[session_controller_ entries] objectAtIndex:1U],
560 [session_controller_ currentEntry]); 570 [session_controller_ currentEntry]);
571 EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
572 [session_controller_ currentEntry]);
561 } 573 }
562 574
563 TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) { 575 TEST_F(CRWSessionControllerTest, GoForewardFromTheBeginning) {
564 [session_controller_ 576 [session_controller_
565 addPendingEntry:GURL("http://www.url.com") 577 addPendingEntry:GURL("http://www.url.com")
566 referrer:MakeReferrer("http://www.referer.com") 578 referrer:MakeReferrer("http://www.referer.com")
567 transition:ui::PAGE_TRANSITION_TYPED 579 transition:ui::PAGE_TRANSITION_TYPED
568 rendererInitiated:NO]; 580 rendererInitiated:NO];
569 [session_controller_ commitPendingEntry]; 581 [session_controller_ commitPendingEntry];
570 [session_controller_ 582 [session_controller_
571 addPendingEntry:GURL("http://www.url2.com") 583 addPendingEntry:GURL("http://www.url2.com")
572 referrer:MakeReferrer("http://www.referer.com") 584 referrer:MakeReferrer("http://www.referer.com")
573 transition:ui::PAGE_TRANSITION_TYPED 585 transition:ui::PAGE_TRANSITION_TYPED
574 rendererInitiated:NO]; 586 rendererInitiated:NO];
575 [session_controller_ commitPendingEntry]; 587 [session_controller_ commitPendingEntry];
576 588
577 [session_controller_ goBack]; 589 [session_controller_ goBack];
578 [session_controller_ goForward]; 590 [session_controller_ goForward];
579 591
580 EXPECT_EQ(2U, [[session_controller_ entries] count]); 592 EXPECT_EQ(2U, [[session_controller_ entries] count]);
581 EXPECT_EQ( 593 EXPECT_EQ(
582 GURL("http://www.url.com/"), 594 GURL("http://www.url.com/"),
583 [session_controller_ URLForSessionAtIndex:0U]); 595 [session_controller_ URLForSessionAtIndex:0U]);
584 EXPECT_EQ( 596 EXPECT_EQ(
585 GURL("http://www.url2.com/"), 597 GURL("http://www.url2.com/"),
586 [session_controller_ URLForSessionAtIndex:1U]); 598 [session_controller_ URLForSessionAtIndex:1U]);
587 EXPECT_EQ( 599 EXPECT_EQ(
588 [[session_controller_ entries] objectAtIndex:1U], 600 [[session_controller_ entries] objectAtIndex:1U],
589 [session_controller_ currentEntry]); 601 [session_controller_ currentEntry]);
602 EXPECT_EQ([[session_controller_ entries] objectAtIndex:0U],
603 [session_controller_ previousEntry]);
590 } 604 }
591 605
592 TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) { 606 TEST_F(CRWSessionControllerTest, GoForwardFromTheMiddle) {
593 [session_controller_ 607 [session_controller_
594 addPendingEntry:GURL("http://www.url.com") 608 addPendingEntry:GURL("http://www.url.com")
595 referrer:MakeReferrer("http://www.referer.com") 609 referrer:MakeReferrer("http://www.referer.com")
596 transition:ui::PAGE_TRANSITION_TYPED 610 transition:ui::PAGE_TRANSITION_TYPED
597 rendererInitiated:NO]; 611 rendererInitiated:NO];
598 [session_controller_ commitPendingEntry]; 612 [session_controller_ commitPendingEntry];
599 [session_controller_ 613 [session_controller_
(...skipping 28 matching lines...) Expand all
628 [session_controller_ URLForSessionAtIndex:1U]); 642 [session_controller_ URLForSessionAtIndex:1U]);
629 EXPECT_EQ( 643 EXPECT_EQ(
630 GURL("http://www.url3.com/"), 644 GURL("http://www.url3.com/"),
631 [session_controller_ URLForSessionAtIndex:2U]); 645 [session_controller_ URLForSessionAtIndex:2U]);
632 EXPECT_EQ( 646 EXPECT_EQ(
633 GURL("http://www.url4.com/"), 647 GURL("http://www.url4.com/"),
634 [session_controller_ URLForSessionAtIndex:3U]); 648 [session_controller_ URLForSessionAtIndex:3U]);
635 EXPECT_EQ( 649 EXPECT_EQ(
636 [[session_controller_ entries] objectAtIndex:2U], 650 [[session_controller_ entries] objectAtIndex:2U],
637 [session_controller_ currentEntry]); 651 [session_controller_ currentEntry]);
652 EXPECT_EQ([[session_controller_ entries] objectAtIndex:1U],
653 [session_controller_ previousEntry]);
654 }
655
656 // Tests going delta, including out of range cases.
657 TEST_F(CRWSessionControllerTest, GoDelta) {
658 [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
659 referrer:MakeReferrer("http://www.example.com/a")
660 transition:ui::PAGE_TRANSITION_LINK
661 rendererInitiated:NO];
662 [session_controller_ commitPendingEntry];
663 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
664 referrer:MakeReferrer("http://www.example.com/r")
665 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
666 rendererInitiated:NO];
667 [session_controller_ commitPendingEntry];
668 [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
669 referrer:MakeReferrer("http://www.example.com/b")
670 transition:ui::PAGE_TRANSITION_LINK
671 rendererInitiated:NO];
672 [session_controller_ commitPendingEntry];
673 [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
674 referrer:MakeReferrer("http://www.example.com/c")
675 transition:ui::PAGE_TRANSITION_LINK
676 rendererInitiated:NO];
677 [session_controller_ commitPendingEntry];
678 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
679 referrer:MakeReferrer("http://www.example.com/r")
680 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
681 rendererInitiated:NO];
682 [session_controller_ commitPendingEntry];
683 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
684 ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
685 NSArray* entries = [session_controller_ entries];
686 ASSERT_EQ(5U, entries.count);
687
688 // Try going forward, which should not be possible.
689 EXPECT_FALSE([session_controller_ canGoDelta:1]);
690 [session_controller_ goDelta:1];
691 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
692 ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
693
694 // Try going back 3 entries, which should not be possible as there are only 2
695 // non-redirect entries.
696 EXPECT_FALSE([session_controller_ canGoDelta:-3]);
697 [session_controller_ goDelta:-3];
698 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
699 ASSERT_EQ(3, [session_controller_ previousNavigationIndex]);
700 [session_controller_ goToEntry:entries[4]];
701
702 // Go back 2 entries.
703 EXPECT_TRUE([session_controller_ canGoDelta:-2]);
704 [session_controller_ goDelta:-2];
705 ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
706 ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
707
708 // Try going back 1 entry which should not be possible, because back entry had
709 // redirect response.
710 EXPECT_FALSE([session_controller_ canGoDelta:-1]);
711 [session_controller_ goDelta:-1];
712 ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
713 ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
714
715 // Try going forward 3 entries which should not be possible, because there are
716 // only 2 non-redirect entries in forward entries.
717 EXPECT_FALSE([session_controller_ canGoDelta:3]);
718 [session_controller_ goDelta:3];
719 ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
720 ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
721 [session_controller_ goToEntry:entries[1]];
722
723 // Go forward 2 entries.
724 EXPECT_TRUE([session_controller_ canGoDelta:2]);
725 [session_controller_ goDelta:2];
726 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
727 ASSERT_EQ(1, [session_controller_ previousNavigationIndex]);
728
729 // Now add a transient entry and go back 2 entries.
730 [session_controller_ addTransientEntryWithURL:GURL("http://www.example.com")];
731 EXPECT_TRUE([session_controller_ canGoDelta:-2]);
732 [session_controller_ goDelta:-2];
733 ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
734 ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
735
736 // Try going back 2 entries which should not be possible, because there is
737 // only one non-redirect back entry.
738 EXPECT_FALSE([session_controller_ canGoDelta:-2]);
739 [session_controller_ goDelta:-2];
740 ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
741 ASSERT_EQ(4, [session_controller_ previousNavigationIndex]);
742 [session_controller_ goToEntry:entries[2]];
743
744 // Go back 1 entry.
745 EXPECT_TRUE([session_controller_ canGoDelta:-1]);
746 [session_controller_ goDelta:-1];
747 ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
748 ASSERT_EQ(2, [session_controller_ previousNavigationIndex]);
749
750 // Go forward 1 entry.
751 EXPECT_TRUE([session_controller_ canGoDelta:1]);
752 [session_controller_ goDelta:1];
753 ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
754 ASSERT_EQ(1, [session_controller_ previousNavigationIndex]);
638 } 755 }
639 756
640 TEST_F(CRWSessionControllerTest, CanGoBackWithoutCommitedEntry) { 757 TEST_F(CRWSessionControllerTest, CanGoBackWithoutCommitedEntry) {
641 EXPECT_FALSE([session_controller_ canGoBack]); 758 EXPECT_FALSE([session_controller_ canGoBack]);
759 EXPECT_FALSE([session_controller_ canGoDelta:-1]);
642 } 760 }
643 761
644 // Tests that |canGoBack| returns NO if there is a transient entry, but no 762 // Tests that |canGoBack| returns NO if there is a transient entry, but no
645 // committed entries. 763 // committed entries.
646 TEST_F(CRWSessionControllerTest, CanGoBackWithTransientEntry) { 764 TEST_F(CRWSessionControllerTest, CanGoBackWithTransientEntry) {
647 [session_controller_ addTransientEntryWithURL:GURL("http://www.url.com")]; 765 [session_controller_ addTransientEntryWithURL:GURL("http://www.url.com")];
648 766
649 EXPECT_FALSE([session_controller_ canGoBack]); 767 EXPECT_FALSE([session_controller_ canGoBack]);
650 } 768 }
651 769
(...skipping 12 matching lines...) Expand all
664 782
665 TEST_F(CRWSessionControllerTest, CanGoBackWithSingleCommitedEntry) { 783 TEST_F(CRWSessionControllerTest, CanGoBackWithSingleCommitedEntry) {
666 [session_controller_ 784 [session_controller_
667 addPendingEntry:GURL("http://www.url.com") 785 addPendingEntry:GURL("http://www.url.com")
668 referrer:MakeReferrer("http://www.referer.com") 786 referrer:MakeReferrer("http://www.referer.com")
669 transition:ui::PAGE_TRANSITION_TYPED 787 transition:ui::PAGE_TRANSITION_TYPED
670 rendererInitiated:NO]; 788 rendererInitiated:NO];
671 [session_controller_ commitPendingEntry]; 789 [session_controller_ commitPendingEntry];
672 790
673 EXPECT_FALSE([session_controller_ canGoBack]); 791 EXPECT_FALSE([session_controller_ canGoBack]);
792 EXPECT_FALSE([session_controller_ canGoDelta:-1]);
674 } 793 }
675 794
676 TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) { 795 TEST_F(CRWSessionControllerTest, CanGoBackWithMultipleCommitedEntries) {
677 [session_controller_ 796 [session_controller_
678 addPendingEntry:GURL("http://www.url.com") 797 addPendingEntry:GURL("http://www.url.com")
679 referrer:MakeReferrer("http://www.referer.com") 798 referrer:MakeReferrer("http://www.referer.com")
680 transition:ui::PAGE_TRANSITION_TYPED 799 transition:ui::PAGE_TRANSITION_TYPED
681 rendererInitiated:NO]; 800 rendererInitiated:NO];
682 [session_controller_ commitPendingEntry]; 801 [session_controller_ commitPendingEntry];
683 [session_controller_ 802 [session_controller_
684 addPendingEntry:GURL("http://www.url1.com") 803 addPendingEntry:GURL("http://www.url1.com")
685 referrer:MakeReferrer("http://www.referer.com") 804 referrer:MakeReferrer("http://www.referer.com")
686 transition:ui::PAGE_TRANSITION_TYPED 805 transition:ui::PAGE_TRANSITION_TYPED
687 rendererInitiated:NO]; 806 rendererInitiated:NO];
688 [session_controller_ commitPendingEntry]; 807 [session_controller_ commitPendingEntry];
689 [session_controller_ 808 [session_controller_
690 addPendingEntry:GURL("http://www.url2.com") 809 addPendingEntry:GURL("http://www.url2.com")
691 referrer:MakeReferrer("http://www.referer.com") 810 referrer:MakeReferrer("http://www.referer.com")
692 transition:ui::PAGE_TRANSITION_TYPED 811 transition:ui::PAGE_TRANSITION_TYPED
693 rendererInitiated:NO]; 812 rendererInitiated:NO];
694 [session_controller_ commitPendingEntry]; 813 [session_controller_ commitPendingEntry];
695 814
696 EXPECT_TRUE([session_controller_ canGoBack]); 815 EXPECT_TRUE([session_controller_ canGoBack]);
816 EXPECT_TRUE([session_controller_ canGoDelta:-1]);
697 817
698 [session_controller_ goBack]; 818 [session_controller_ goBack];
699 EXPECT_TRUE([session_controller_ canGoBack]); 819 EXPECT_TRUE([session_controller_ canGoBack]);
820 EXPECT_TRUE([session_controller_ canGoDelta:-1]);
700 821
701 [session_controller_ goBack]; 822 [session_controller_ goBack];
702 EXPECT_FALSE([session_controller_ canGoBack]); 823 EXPECT_FALSE([session_controller_ canGoBack]);
824 EXPECT_FALSE([session_controller_ canGoDelta:-1]);
703 825
704 [session_controller_ goBack]; 826 [session_controller_ goBack];
705 EXPECT_FALSE([session_controller_ canGoBack]); 827 EXPECT_FALSE([session_controller_ canGoBack]);
828 EXPECT_FALSE([session_controller_ canGoDelta:-1]);
706 829
707 [session_controller_ goForward]; 830 [session_controller_ goForward];
708 EXPECT_TRUE([session_controller_ canGoBack]); 831 EXPECT_TRUE([session_controller_ canGoBack]);
832 EXPECT_TRUE([session_controller_ canGoDelta:-1]);
833 }
834
835 // Tests that going forward is not possible if there is a pending entry.
836 TEST_F(CRWSessionControllerTest, CanGoForwardWithPendingEntry) {
837 [session_controller_ addPendingEntry:GURL("http://www.url.com")
838 referrer:MakeReferrer("http://www.referer.com")
839 transition:ui::PAGE_TRANSITION_TYPED
840 rendererInitiated:NO];
841 [session_controller_ commitPendingEntry];
842 [session_controller_ addPendingEntry:GURL("http://www.url1.com")
843 referrer:MakeReferrer("http://www.referer.com")
844 transition:ui::PAGE_TRANSITION_TYPED
845 rendererInitiated:NO];
846 [session_controller_ commitPendingEntry];
847 [session_controller_ goBack];
848 [session_controller_ addPendingEntry:GURL("http://www.url2.com")
849 referrer:MakeReferrer("http://www.referer.com")
850 transition:ui::PAGE_TRANSITION_TYPED
851 rendererInitiated:NO];
852
853 // Pending entry should not allow going forward.
854 EXPECT_FALSE([session_controller_ canGoForward]);
855 EXPECT_FALSE([session_controller_ canGoDelta:1]);
709 } 856 }
710 857
711 TEST_F(CRWSessionControllerTest, CanGoForwardWithoutCommitedEntry) { 858 TEST_F(CRWSessionControllerTest, CanGoForwardWithoutCommitedEntry) {
712 EXPECT_FALSE([session_controller_ canGoForward]); 859 EXPECT_FALSE([session_controller_ canGoForward]);
860 EXPECT_FALSE([session_controller_ canGoDelta:1]);
713 } 861 }
714 862
715 TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) { 863 TEST_F(CRWSessionControllerTest, CanGoForwardWithSingleCommitedEntry) {
716 [session_controller_ 864 [session_controller_
717 addPendingEntry:GURL("http://www.url.com") 865 addPendingEntry:GURL("http://www.url.com")
718 referrer:MakeReferrer("http://www.referer.com") 866 referrer:MakeReferrer("http://www.referer.com")
719 transition:ui::PAGE_TRANSITION_TYPED 867 transition:ui::PAGE_TRANSITION_TYPED
720 rendererInitiated:NO]; 868 rendererInitiated:NO];
721 [session_controller_ commitPendingEntry]; 869 [session_controller_ commitPendingEntry];
722 870
723 EXPECT_FALSE([session_controller_ canGoForward]); 871 EXPECT_FALSE([session_controller_ canGoForward]);
872 EXPECT_FALSE([session_controller_ canGoDelta:1]);
724 } 873 }
725 874
726 TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) { 875 TEST_F(CRWSessionControllerTest, CanGoForwardWithMultipleCommitedEntries) {
727 [session_controller_ 876 [session_controller_
728 addPendingEntry:GURL("http://www.url.com") 877 addPendingEntry:GURL("http://www.url.com")
729 referrer:MakeReferrer("http://www.referer.com") 878 referrer:MakeReferrer("http://www.referer.com")
730 transition:ui::PAGE_TRANSITION_TYPED 879 transition:ui::PAGE_TRANSITION_TYPED
731 rendererInitiated:NO]; 880 rendererInitiated:NO];
732 [session_controller_ commitPendingEntry]; 881 [session_controller_ commitPendingEntry];
733 [session_controller_ 882 [session_controller_
734 addPendingEntry:GURL("http://www.url1.com") 883 addPendingEntry:GURL("http://www.url1.com")
735 referrer:MakeReferrer("http://www.referer.com") 884 referrer:MakeReferrer("http://www.referer.com")
736 transition:ui::PAGE_TRANSITION_TYPED 885 transition:ui::PAGE_TRANSITION_TYPED
737 rendererInitiated:NO]; 886 rendererInitiated:NO];
738 [session_controller_ commitPendingEntry]; 887 [session_controller_ commitPendingEntry];
739 [session_controller_ 888 [session_controller_
740 addPendingEntry:GURL("http://www.url2.com") 889 addPendingEntry:GURL("http://www.url2.com")
741 referrer:MakeReferrer("http://www.referer.com") 890 referrer:MakeReferrer("http://www.referer.com")
742 transition:ui::PAGE_TRANSITION_TYPED 891 transition:ui::PAGE_TRANSITION_TYPED
743 rendererInitiated:NO]; 892 rendererInitiated:NO];
744 [session_controller_ commitPendingEntry]; 893 [session_controller_ commitPendingEntry];
745 894
746 EXPECT_FALSE([session_controller_ canGoForward]); 895 EXPECT_FALSE([session_controller_ canGoForward]);
896 EXPECT_FALSE([session_controller_ canGoDelta:1]);
747 897
748 [session_controller_ goBack]; 898 [session_controller_ goBack];
749 EXPECT_TRUE([session_controller_ canGoForward]); 899 EXPECT_TRUE([session_controller_ canGoForward]);
900 EXPECT_TRUE([session_controller_ canGoDelta:1]);
750 901
751 [session_controller_ goBack]; 902 [session_controller_ goBack];
752 EXPECT_TRUE([session_controller_ canGoForward]); 903 EXPECT_TRUE([session_controller_ canGoForward]);
904 EXPECT_TRUE([session_controller_ canGoDelta:1]);
753 905
754 [session_controller_ goForward]; 906 [session_controller_ goForward];
755 EXPECT_TRUE([session_controller_ canGoForward]); 907 EXPECT_TRUE([session_controller_ canGoForward]);
908 EXPECT_TRUE([session_controller_ canGoDelta:1]);
756 909
757 [session_controller_ goForward]; 910 [session_controller_ goForward];
758 EXPECT_FALSE([session_controller_ canGoForward]); 911 EXPECT_FALSE([session_controller_ canGoForward]);
912 EXPECT_FALSE([session_controller_ canGoDelta:1]);
759 } 913 }
760 914
761 // Helper to create a NavigationItem. Caller is responsible for freeing 915 // Helper to create a NavigationItem. Caller is responsible for freeing
762 // the memory. 916 // the memory.
763 web::NavigationItem* CreateNavigationItem(const std::string& url, 917 web::NavigationItem* CreateNavigationItem(const std::string& url,
764 const std::string& referrer, 918 const std::string& referrer,
765 NSString* title) { 919 NSString* title) {
766 web::Referrer referrer_object(GURL(referrer), 920 web::Referrer referrer_object(GURL(referrer),
767 web::ReferrerPolicyDefault); 921 web::ReferrerPolicyDefault);
768 web::NavigationItemImpl* navigation_item = new web::NavigationItemImpl(); 922 web::NavigationItemImpl* navigation_item = new web::NavigationItemImpl();
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex); 1201 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
1048 1202
1049 // Remove an entry and attempt to go it. Ensure it outlives the removal. 1203 // Remove an entry and attempt to go it. Ensure it outlives the removal.
1050 base::scoped_nsobject<CRWSessionEntry> entry3( 1204 base::scoped_nsobject<CRWSessionEntry> entry3(
1051 [[session_controller_.get().entries objectAtIndex:3] retain]); 1205 [[session_controller_.get().entries objectAtIndex:3] retain]);
1052 [session_controller_ removeEntryAtIndex:3]; 1206 [session_controller_ removeEntryAtIndex:3];
1053 [session_controller_ goToEntry:entry3]; 1207 [session_controller_ goToEntry:entry3];
1054 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex); 1208 EXPECT_EQ(1, session_controller_.get().currentNavigationIndex);
1055 } 1209 }
1056 1210
1211 // Tests -[CRWSessionController indexOfEntryForDelta:] API for positive,
1212 // negative and zero delta. Tested session controller will have redirect entries
1213 // to make sure they are appropriately skipped.
1214 TEST_F(CRWSessionControllerTest, IndexOfEntryForDelta) {
1215 [session_controller_ addPendingEntry:GURL("http://www.example.com/0")
1216 referrer:MakeReferrer("http://www.example.com/a")
1217 transition:ui::PAGE_TRANSITION_LINK
1218 rendererInitiated:NO];
1219 [session_controller_ commitPendingEntry];
1220 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
1221 referrer:MakeReferrer("http://www.example.com/r")
1222 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
1223 rendererInitiated:NO];
1224 [session_controller_ commitPendingEntry];
1225 [session_controller_ addPendingEntry:GURL("http://www.example.com/1")
1226 referrer:MakeReferrer("http://www.example.com/b")
1227 transition:ui::PAGE_TRANSITION_LINK
1228 rendererInitiated:NO];
1229 [session_controller_ commitPendingEntry];
1230 [session_controller_ addPendingEntry:GURL("http://www.example.com/2")
1231 referrer:MakeReferrer("http://www.example.com/c")
1232 transition:ui::PAGE_TRANSITION_LINK
1233 rendererInitiated:NO];
1234 [session_controller_ commitPendingEntry];
1235 [session_controller_ addPendingEntry:GURL("http://www.example.com/redirect")
1236 referrer:MakeReferrer("http://www.example.com/r")
1237 transition:ui::PAGE_TRANSITION_IS_REDIRECT_MASK
1238 rendererInitiated:NO];
1239 [session_controller_ commitPendingEntry];
1240 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
1241 ASSERT_EQ(5U, [[session_controller_ entries] count]);
1242
1243 // Go to entry at index 1 and test API from that state.
1244 NSArray* entries = [session_controller_ entries];
1245 [session_controller_ goToEntry:entries[1]];
1246 ASSERT_EQ(1, [session_controller_ currentNavigationIndex]);
1247 EXPECT_EQ(-1, [session_controller_ indexOfEntryForDelta:-1]);
1248 EXPECT_EQ(-2, [session_controller_ indexOfEntryForDelta:-2]);
1249 EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:1]);
1250 EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:2]);
1251 EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:3]);
1252
1253 // Go to entry at index 2 and test API from that state.
1254 [session_controller_ goToEntry:entries[2]];
1255 ASSERT_EQ(2, [session_controller_ currentNavigationIndex]);
1256 EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-1]);
1257 EXPECT_EQ(-1, [session_controller_ indexOfEntryForDelta:-2]);
1258 EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:1]);
1259 EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:2]);
1260
1261 // Go to entry at index 4 and test API from that state.
1262 [session_controller_ goToEntry:entries[4]];
1263 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
1264 EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:-1]);
1265 EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-2]);
1266 EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:1]);
1267 EXPECT_EQ(6, [session_controller_ indexOfEntryForDelta:2]);
1268
1269 // Now try with existing transient entry.
1270 [session_controller_ addTransientEntryWithURL:GURL("http://www.example.com")];
1271 ASSERT_EQ(5U, [[session_controller_ entries] count]);
1272 ASSERT_EQ(4, [session_controller_ currentNavigationIndex]);
1273 EXPECT_EQ(4, [session_controller_ indexOfEntryForDelta:-1]);
1274 EXPECT_EQ(2, [session_controller_ indexOfEntryForDelta:-2]);
1275 EXPECT_EQ(1, [session_controller_ indexOfEntryForDelta:-3]);
1276 EXPECT_EQ(5, [session_controller_ indexOfEntryForDelta:1]);
1277 EXPECT_EQ(6, [session_controller_ indexOfEntryForDelta:2]);
1278 }
1279
1057 } // anonymous namespace 1280 } // anonymous namespace
OLDNEW
« ios/web/navigation/crw_session_controller.mm ('K') | « ios/web/navigation/crw_session_controller.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698