| 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 |