OLD | NEW |
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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 [session_controller_ commitPendingItem]; | 466 [session_controller_ commitPendingItem]; |
467 | 467 |
468 EXPECT_EQ(1U, [session_controller_ items].size()); | 468 EXPECT_EQ(1U, [session_controller_ items].size()); |
469 EXPECT_EQ(GURL("http://www.url.com/"), | 469 EXPECT_EQ(GURL("http://www.url.com/"), |
470 [session_controller_ URLForItemAtIndex:0U]); | 470 [session_controller_ URLForItemAtIndex:0U]); |
471 EXPECT_EQ([session_controller_ items].front().get(), | 471 EXPECT_EQ([session_controller_ items].front().get(), |
472 [session_controller_ currentItem]); | 472 [session_controller_ currentItem]); |
473 } | 473 } |
474 | 474 |
475 // Tests inserting session controller state. | 475 // Tests inserting session controller state. |
476 TEST_F(CRWSessionControllerTest, InsertState) { | 476 TEST_F(CRWSessionControllerTest, CopyState) { |
477 // Add 1 committed and 1 pending item to target controller. | 477 // Add 1 committed and 1 pending item to target controller. |
478 [session_controller_ | 478 [session_controller_ |
479 addPendingItem:GURL("http://www.url.com/2") | 479 addPendingItem:GURL("http://www.url.com/2") |
480 referrer:web::Referrer() | 480 referrer:web::Referrer() |
481 transition:ui::PAGE_TRANSITION_TYPED | 481 transition:ui::PAGE_TRANSITION_TYPED |
482 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 482 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
483 [session_controller_ commitPendingItem]; | 483 [session_controller_ commitPendingItem]; |
484 [session_controller_ | 484 [session_controller_ |
485 addPendingItem:GURL("http://www.url.com/3") | 485 addPendingItem:GURL("http://www.url.com/3") |
486 referrer:web::Referrer() | 486 referrer:web::Referrer() |
(...skipping 10 matching lines...) Expand all Loading... |
497 transition:ui::PAGE_TRANSITION_TYPED | 497 transition:ui::PAGE_TRANSITION_TYPED |
498 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 498 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
499 [other_session_controller commitPendingItem]; | 499 [other_session_controller commitPendingItem]; |
500 [other_session_controller | 500 [other_session_controller |
501 addPendingItem:GURL("http://www.url.com/1") | 501 addPendingItem:GURL("http://www.url.com/1") |
502 referrer:web::Referrer() | 502 referrer:web::Referrer() |
503 transition:ui::PAGE_TRANSITION_TYPED | 503 transition:ui::PAGE_TRANSITION_TYPED |
504 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 504 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
505 | 505 |
506 // Insert and verify the state of target session controller. | 506 // Insert and verify the state of target session controller. |
| 507 EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]); |
507 [session_controller_ | 508 [session_controller_ |
508 insertStateFromSessionController:other_session_controller.get()]; | 509 copyStateFromSessionControllerAndPrune:other_session_controller.get()]; |
509 | 510 |
510 EXPECT_EQ(2U, [session_controller_ items].size()); | 511 EXPECT_EQ(2U, [session_controller_ items].size()); |
511 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); | 512 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); |
512 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); | 513 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); |
513 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); | 514 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); |
514 | 515 |
515 EXPECT_EQ(GURL("http://www.url.com/0"), | 516 EXPECT_EQ(GURL("http://www.url.com/0"), |
516 [session_controller_ URLForItemAtIndex:0]); | 517 [session_controller_ URLForItemAtIndex:0]); |
517 EXPECT_EQ(GURL("http://www.url.com/2"), | 518 EXPECT_EQ(GURL("http://www.url.com/2"), |
518 [session_controller_ URLForItemAtIndex:1]); | 519 [session_controller_ URLForItemAtIndex:1]); |
519 EXPECT_EQ(GURL("http://www.url.com/3"), | 520 EXPECT_EQ(GURL("http://www.url.com/3"), |
520 [session_controller_ pendingItem]->GetURL()); | 521 [session_controller_ pendingItem]->GetURL()); |
521 } | 522 } |
522 | 523 |
523 // Tests inserting session controller state from empty session controller. | 524 // Tests inserting session controller state from empty session controller. |
524 TEST_F(CRWSessionControllerTest, InsertStateFromEmptySessionController) { | 525 TEST_F(CRWSessionControllerTest, CopyStateFromEmptySessionController) { |
525 // Add 2 committed items to target controller. | 526 // Add 2 committed items to target controller. |
526 [session_controller_ | 527 [session_controller_ |
527 addPendingItem:GURL("http://www.url.com/0") | 528 addPendingItem:GURL("http://www.url.com/0") |
528 referrer:web::Referrer() | 529 referrer:web::Referrer() |
529 transition:ui::PAGE_TRANSITION_TYPED | 530 transition:ui::PAGE_TRANSITION_TYPED |
530 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 531 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
531 [session_controller_ commitPendingItem]; | 532 [session_controller_ commitPendingItem]; |
532 [session_controller_ | 533 [session_controller_ |
533 addPendingItem:GURL("http://www.url.com/1") | 534 addPendingItem:GURL("http://www.url.com/1") |
534 referrer:web::Referrer() | 535 referrer:web::Referrer() |
535 transition:ui::PAGE_TRANSITION_TYPED | 536 transition:ui::PAGE_TRANSITION_TYPED |
536 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 537 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
537 [session_controller_ commitPendingItem]; | 538 [session_controller_ commitPendingItem]; |
538 | 539 |
539 // Create empty source session controller. | 540 // Create empty source session controller. |
540 base::scoped_nsobject<CRWSessionController> other_session_controller( | 541 base::scoped_nsobject<CRWSessionController> other_session_controller( |
541 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ | 542 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ |
542 openedByDOM:NO]); | 543 openedByDOM:NO]); |
543 | 544 |
544 // Insert and verify the state of target session controller. | 545 // Insert and verify the state of target session controller. |
| 546 EXPECT_TRUE([session_controller_ canPruneAllButLastCommittedItem]); |
545 [session_controller_ | 547 [session_controller_ |
546 insertStateFromSessionController:other_session_controller.get()]; | 548 copyStateFromSessionControllerAndPrune:other_session_controller.get()]; |
547 EXPECT_EQ(2U, [session_controller_ items].size()); | 549 EXPECT_EQ(2U, [session_controller_ items].size()); |
548 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); | 550 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); |
549 EXPECT_EQ(0, [session_controller_ previousNavigationIndex]); | 551 EXPECT_EQ(0, [session_controller_ previousNavigationIndex]); |
550 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); | 552 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); |
551 EXPECT_FALSE([session_controller_ pendingItem]); | 553 EXPECT_FALSE([session_controller_ pendingItem]); |
552 EXPECT_EQ(GURL("http://www.url.com/0"), | 554 EXPECT_EQ(GURL("http://www.url.com/0"), |
553 [session_controller_ URLForItemAtIndex:0]); | 555 [session_controller_ URLForItemAtIndex:0]); |
554 EXPECT_EQ(GURL("http://www.url.com/1"), | 556 EXPECT_EQ(GURL("http://www.url.com/1"), |
555 [session_controller_ URLForItemAtIndex:1]); | 557 [session_controller_ URLForItemAtIndex:1]); |
556 } | 558 } |
557 | 559 |
558 // Tests inserting session controller state to empty session controller. | 560 // Tests that |-copyStateFromSessionControllerAndPrune:| is a no-op when the |
559 TEST_F(CRWSessionControllerTest, InsertStateToEmptySessionController) { | 561 // receiver has no last committed item. |
560 // Create source session controller with 2 committed items and one | 562 TEST_F(CRWSessionControllerTest, CopyStateToEmptySessionController) { |
561 // pending item. | 563 EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]); |
| 564 |
| 565 // Create source session controller with 1 committed item. |
562 base::scoped_nsobject<CRWSessionController> other_session_controller( | 566 base::scoped_nsobject<CRWSessionController> other_session_controller( |
563 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ | 567 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ |
564 openedByDOM:NO]); | 568 openedByDOM:NO]); |
565 [other_session_controller | 569 [other_session_controller |
566 addPendingItem:GURL("http://www.url.com/0") | 570 addPendingItem:GURL("http://www.url.com/0") |
567 referrer:web::Referrer() | 571 referrer:web::Referrer() |
568 transition:ui::PAGE_TRANSITION_TYPED | 572 transition:ui::PAGE_TRANSITION_TYPED |
569 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 573 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
570 [other_session_controller commitPendingItem]; | 574 [other_session_controller commitPendingItem]; |
571 [other_session_controller | 575 [other_session_controller |
572 addPendingItem:GURL("http://www.url.com/1") | 576 addPendingItem:GURL("http://www.url.com/1") |
573 referrer:web::Referrer() | 577 referrer:web::Referrer() |
574 transition:ui::PAGE_TRANSITION_TYPED | 578 transition:ui::PAGE_TRANSITION_TYPED |
575 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 579 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
576 [other_session_controller commitPendingItem]; | |
577 [other_session_controller | |
578 addPendingItem:GURL("http://www.url.com/2") | |
579 referrer:web::Referrer() | |
580 transition:ui::PAGE_TRANSITION_TYPED | |
581 initiationType:web::NavigationInitiationType::USER_INITIATED]; | |
582 | 580 |
583 // Insert and verify the state of target session controller. | 581 // Attempt to copy |other_session_controller|'s state and verify that |
| 582 // |session_controller_| is unchanged. |
584 [session_controller_ | 583 [session_controller_ |
585 insertStateFromSessionController:other_session_controller.get()]; | 584 copyStateFromSessionControllerAndPrune:other_session_controller]; |
586 | 585 EXPECT_TRUE([session_controller_ items].empty()); |
587 EXPECT_EQ(2U, [session_controller_ items].size()); | 586 EXPECT_EQ(-1, [session_controller_ currentNavigationIndex]); |
588 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); | |
589 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); | 587 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); |
| 588 EXPECT_FALSE([session_controller_ currentItem]); |
| 589 EXPECT_FALSE([session_controller_ pendingItem]); |
590 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); | 590 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); |
591 EXPECT_FALSE([session_controller_ pendingItem]); | |
592 EXPECT_EQ(GURL("http://www.url.com/0"), | |
593 [session_controller_ URLForItemAtIndex:0]); | |
594 EXPECT_EQ(GURL("http://www.url.com/1"), | |
595 [session_controller_ URLForItemAtIndex:1]); | |
596 } | 591 } |
597 | 592 |
598 // Tests inserting session controller state. Verifies that pending item index | 593 // Tests that |-copyStateFromSessionControllerAndPrune:| is a no-op during a |
599 // remains valid. | 594 // pending history navigation. |
600 TEST_F(CRWSessionControllerTest, | 595 TEST_F(CRWSessionControllerTest, CopyStateDuringPendingHistoryNavigation) { |
601 InsertStateWithPendingItemIndexInTargetController) { | 596 // Add 1 committed and 1 pending item to target controller. |
602 // Add 2 committed items and make the first item pending. | 597 [session_controller_ |
| 598 addPendingItem:GURL("http://www.url.com/1") |
| 599 referrer:web::Referrer() |
| 600 transition:ui::PAGE_TRANSITION_TYPED |
| 601 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
| 602 [session_controller_ commitPendingItem]; |
603 [session_controller_ | 603 [session_controller_ |
604 addPendingItem:GURL("http://www.url.com/2") | 604 addPendingItem:GURL("http://www.url.com/2") |
605 referrer:web::Referrer() | 605 referrer:web::Referrer() |
606 transition:ui::PAGE_TRANSITION_TYPED | 606 transition:ui::PAGE_TRANSITION_TYPED |
607 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 607 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
608 [session_controller_ commitPendingItem]; | 608 [session_controller_ commitPendingItem]; |
| 609 |
| 610 // Create source session controller with 1 committed item. |
| 611 base::scoped_nsobject<CRWSessionController> other_session_controller( |
| 612 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ |
| 613 openedByDOM:NO]); |
| 614 [other_session_controller |
| 615 addPendingItem:GURL("http://www.url.com/0") |
| 616 referrer:web::Referrer() |
| 617 transition:ui::PAGE_TRANSITION_TYPED |
| 618 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
| 619 [other_session_controller commitPendingItem]; |
| 620 [other_session_controller |
| 621 addPendingItem:GURL("http://www.url.com/1") |
| 622 referrer:web::Referrer() |
| 623 transition:ui::PAGE_TRANSITION_TYPED |
| 624 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
| 625 |
| 626 // Set the pending item index to the first item. |
| 627 [session_controller_ setPendingItemIndex:0]; |
| 628 EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]); |
| 629 |
| 630 // Attempt to copy |other_session_controller|'s state and verify that |
| 631 // |session_controller_| is unchanged. |
609 [session_controller_ | 632 [session_controller_ |
610 addPendingItem:GURL("http://www.url.com/3") | 633 copyStateFromSessionControllerAndPrune:other_session_controller]; |
| 634 EXPECT_EQ(2U, [session_controller_ items].size()); |
| 635 EXPECT_EQ(1, [session_controller_ currentNavigationIndex]); |
| 636 EXPECT_EQ(0, [session_controller_ previousNavigationIndex]); |
| 637 EXPECT_EQ(0, [session_controller_ pendingItemIndex]); |
| 638 EXPECT_TRUE([session_controller_ pendingItem]); |
| 639 EXPECT_EQ([session_controller_ previousItem], |
| 640 [session_controller_ pendingItem]); |
| 641 } |
| 642 |
| 643 // Tests that |-copyStateFromSessionControllerAndPrune:| is a when a transient |
| 644 // NavigationItem exists. |
| 645 TEST_F(CRWSessionControllerTest, CopyStateWithTransientItem) { |
| 646 // Add 1 committed and 1 pending item to target controller. |
| 647 [session_controller_ |
| 648 addPendingItem:GURL("http://www.url.com/1") |
611 referrer:web::Referrer() | 649 referrer:web::Referrer() |
612 transition:ui::PAGE_TRANSITION_TYPED | 650 transition:ui::PAGE_TRANSITION_TYPED |
613 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 651 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
614 [session_controller_ commitPendingItem]; | 652 [session_controller_ commitPendingItem]; |
615 [session_controller_ setPendingItemIndex:0]; | 653 GURL second_url = GURL("http://www.url.com/2"); |
| 654 [session_controller_ |
| 655 addPendingItem:second_url |
| 656 referrer:web::Referrer() |
| 657 transition:ui::PAGE_TRANSITION_TYPED |
| 658 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
| 659 [session_controller_ addTransientItemWithURL:second_url]; |
616 | 660 |
617 // Create source session controller with 1 committed item. | 661 // Create source session controller with 1 committed item. |
618 base::scoped_nsobject<CRWSessionController> other_session_controller( | 662 base::scoped_nsobject<CRWSessionController> other_session_controller( |
619 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ | 663 [[CRWSessionController alloc] initWithBrowserState:&browser_state_ |
620 openedByDOM:NO]); | 664 openedByDOM:NO]); |
621 [other_session_controller | 665 [other_session_controller |
622 addPendingItem:GURL("http://www.url.com/0") | 666 addPendingItem:GURL("http://www.url.com/0") |
623 referrer:web::Referrer() | 667 referrer:web::Referrer() |
624 transition:ui::PAGE_TRANSITION_TYPED | 668 transition:ui::PAGE_TRANSITION_TYPED |
625 initiationType:web::NavigationInitiationType::USER_INITIATED]; | 669 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
626 [other_session_controller commitPendingItem]; | 670 [other_session_controller commitPendingItem]; |
| 671 [other_session_controller |
| 672 addPendingItem:GURL("http://www.url.com/1") |
| 673 referrer:web::Referrer() |
| 674 transition:ui::PAGE_TRANSITION_TYPED |
| 675 initiationType:web::NavigationInitiationType::USER_INITIATED]; |
627 | 676 |
628 // Insert and verify the state of target session controller. | 677 // Attempt to copy |other_session_controller|'s state and verify that |
| 678 // |session_controller_| is unchanged. |
| 679 EXPECT_FALSE([session_controller_ canPruneAllButLastCommittedItem]); |
629 [session_controller_ | 680 [session_controller_ |
630 insertStateFromSessionController:other_session_controller.get()]; | 681 copyStateFromSessionControllerAndPrune:other_session_controller]; |
631 | 682 EXPECT_EQ(1U, [session_controller_ items].size()); |
632 EXPECT_EQ(3U, [session_controller_ items].size()); | 683 EXPECT_EQ(0, [session_controller_ currentNavigationIndex]); |
633 EXPECT_EQ(2, [session_controller_ currentNavigationIndex]); | |
634 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); | 684 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); |
635 EXPECT_EQ(1, [session_controller_ pendingItemIndex]); | 685 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); |
636 EXPECT_EQ(GURL("http://www.url.com/0"), | 686 EXPECT_TRUE([session_controller_ pendingItem]); |
637 [session_controller_ URLForItemAtIndex:0]); | 687 EXPECT_TRUE([session_controller_ transientItem]); |
638 EXPECT_EQ(GURL("http://www.url.com/2"), | 688 EXPECT_EQ([session_controller_ transientItem], |
639 [session_controller_ URLForItemAtIndex:1]); | 689 [session_controller_ currentItem]); |
640 EXPECT_EQ(GURL("http://www.url.com/2"), | |
641 [session_controller_ pendingItem]->GetURL()); | |
642 } | 690 } |
643 | 691 |
644 // Tests state of an empty session controller. | 692 // Tests state of an empty session controller. |
645 TEST_F(CRWSessionControllerTest, EmptyController) { | 693 TEST_F(CRWSessionControllerTest, EmptyController) { |
646 EXPECT_TRUE([session_controller_ items].empty()); | 694 EXPECT_TRUE([session_controller_ items].empty()); |
647 EXPECT_EQ(-1, [session_controller_ currentNavigationIndex]); | 695 EXPECT_EQ(-1, [session_controller_ currentNavigationIndex]); |
648 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); | 696 EXPECT_EQ(-1, [session_controller_ previousNavigationIndex]); |
649 EXPECT_FALSE([session_controller_ currentItem]); | 697 EXPECT_FALSE([session_controller_ currentItem]); |
650 EXPECT_FALSE([session_controller_ pendingItem]); | 698 EXPECT_FALSE([session_controller_ pendingItem]); |
651 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); | 699 EXPECT_EQ(-1, [session_controller_ pendingItemIndex]); |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 [session_controller_ | 1152 [session_controller_ |
1105 addPendingItem:GURL("http://www.example.com/0") | 1153 addPendingItem:GURL("http://www.example.com/0") |
1106 referrer:MakeReferrer("http://www.example.com/b") | 1154 referrer:MakeReferrer("http://www.example.com/b") |
1107 transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT | 1155 transition:ui::PAGE_TRANSITION_CLIENT_REDIRECT |
1108 initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; | 1156 initiationType:web::NavigationInitiationType::RENDERER_INITIATED]; |
1109 [session_controller_ commitPendingItem]; | 1157 [session_controller_ commitPendingItem]; |
1110 EXPECT_EQ(0U, [session_controller_ backwardItems].size()); | 1158 EXPECT_EQ(0U, [session_controller_ backwardItems].size()); |
1111 } | 1159 } |
1112 | 1160 |
1113 } // anonymous namespace | 1161 } // anonymous namespace |
OLD | NEW |