| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "content/browser/frame_host/frame_navigation_entry.h" | 8 #include "content/browser/frame_host/frame_navigation_entry.h" |
| 9 #include "content/browser/frame_host/frame_tree.h" | 9 #include "content/browser/frame_host/frame_tree.h" |
| 10 #include "content/browser/frame_host/navigation_controller_impl.h" | 10 #include "content/browser/frame_host/navigation_controller_impl.h" |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 // Simple load. | 545 // Simple load. |
| 546 FrameNavigateParamsCapturer capturer(root); | 546 FrameNavigateParamsCapturer capturer(root); |
| 547 GURL frame_url(embedded_test_server()->GetURL( | 547 GURL frame_url(embedded_test_server()->GetURL( |
| 548 "/navigation_controller/page_with_links.html")); | 548 "/navigation_controller/page_with_links.html")); |
| 549 NavigateFrameToURL(root, frame_url); | 549 NavigateFrameToURL(root, frame_url); |
| 550 capturer.Wait(); | 550 capturer.Wait(); |
| 551 // TODO(avi,creis): Why is this (and quite a few others below) a "link" | 551 // TODO(avi,creis): Why is this (and quite a few others below) a "link" |
| 552 // transition? Lots of these transitions should be cleaned up. | 552 // transition? Lots of these transitions should be cleaned up. |
| 553 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); | 553 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); |
| 554 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); | 554 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); |
| 555 EXPECT_FALSE(capturer.details().is_in_page); |
| 555 } | 556 } |
| 556 | 557 |
| 557 { | 558 { |
| 558 // Load via a fragment link click. | 559 // Load via a fragment link click. |
| 559 FrameNavigateParamsCapturer capturer(root); | 560 FrameNavigateParamsCapturer capturer(root); |
| 560 std::string script = "document.getElementById('fraglink').click()"; | 561 std::string script = "document.getElementById('fraglink').click()"; |
| 561 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 562 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 562 capturer.Wait(); | 563 capturer.Wait(); |
| 563 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); | 564 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); |
| 564 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); | 565 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); |
| 566 EXPECT_TRUE(capturer.details().is_in_page); |
| 565 } | 567 } |
| 566 | 568 |
| 567 { | 569 { |
| 568 // Load via link click. | 570 // Load via link click. |
| 569 FrameNavigateParamsCapturer capturer(root); | 571 FrameNavigateParamsCapturer capturer(root); |
| 570 std::string script = "document.getElementById('thelink').click()"; | 572 std::string script = "document.getElementById('thelink').click()"; |
| 571 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 573 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 572 capturer.Wait(); | 574 capturer.Wait(); |
| 573 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); | 575 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); |
| 574 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); | 576 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); |
| 577 EXPECT_FALSE(capturer.details().is_in_page); |
| 575 } | 578 } |
| 576 | 579 |
| 577 { | 580 { |
| 578 // location.assign(). | 581 // location.assign(). |
| 579 FrameNavigateParamsCapturer capturer(root); | 582 FrameNavigateParamsCapturer capturer(root); |
| 580 GURL frame_url(embedded_test_server()->GetURL( | 583 GURL frame_url(embedded_test_server()->GetURL( |
| 581 "/navigation_controller/simple_page_2.html")); | 584 "/navigation_controller/simple_page_2.html")); |
| 582 std::string script = "location.assign('" + frame_url.spec() + "')"; | 585 std::string script = "location.assign('" + frame_url.spec() + "')"; |
| 583 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 586 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 584 capturer.Wait(); | 587 capturer.Wait(); |
| 585 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, | 588 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
| 586 capturer.params().transition); | 589 capturer.params().transition); |
| 587 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); | 590 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); |
| 591 EXPECT_FALSE(capturer.details().is_in_page); |
| 588 } | 592 } |
| 589 | 593 |
| 590 { | 594 { |
| 591 // history.pushState(). | 595 // history.pushState(). |
| 592 FrameNavigateParamsCapturer capturer(root); | 596 FrameNavigateParamsCapturer capturer(root); |
| 593 std::string script = | 597 std::string script = |
| 594 "history.pushState({}, 'page 1', 'simple_page_1.html')"; | 598 "history.pushState({}, 'page 1', 'simple_page_1.html')"; |
| 595 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 599 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 596 capturer.Wait(); | 600 capturer.Wait(); |
| 597 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, | 601 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
| 598 capturer.params().transition); | 602 capturer.params().transition); |
| 599 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); | 603 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); |
| 604 EXPECT_TRUE(capturer.details().is_in_page); |
| 600 } | 605 } |
| 601 } | 606 } |
| 602 | 607 |
| 603 // Verify that navigations for NAVIGATION_TYPE_EXISTING_PAGE are correctly | 608 // Verify that navigations for NAVIGATION_TYPE_EXISTING_PAGE are correctly |
| 604 // classified. | 609 // classified. |
| 605 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | 610 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| 606 NavigationTypeClassification_ExistingPage) { | 611 NavigationTypeClassification_ExistingPage) { |
| 607 GURL url1(embedded_test_server()->GetURL( | 612 GURL url1(embedded_test_server()->GetURL( |
| 608 "/navigation_controller/simple_page_1.html")); | 613 "/navigation_controller/simple_page_1.html")); |
| 609 NavigateToURL(shell(), url1); | 614 NavigateToURL(shell(), url1); |
| 610 GURL url2(embedded_test_server()->GetURL( | 615 GURL url2(embedded_test_server()->GetURL( |
| 611 "/navigation_controller/simple_page_2.html")); | 616 "/navigation_controller/simple_page_2.html")); |
| 612 NavigateToURL(shell(), url2); | 617 NavigateToURL(shell(), url2); |
| 613 | 618 |
| 614 FrameTreeNode* root = | 619 FrameTreeNode* root = |
| 615 static_cast<WebContentsImpl*>(shell()->web_contents())-> | 620 static_cast<WebContentsImpl*>(shell()->web_contents())-> |
| 616 GetFrameTree()->root(); | 621 GetFrameTree()->root(); |
| 617 | 622 |
| 618 { | 623 { |
| 619 // Back from the browser side. | 624 // Back from the browser side. |
| 620 FrameNavigateParamsCapturer capturer(root); | 625 FrameNavigateParamsCapturer capturer(root); |
| 621 shell()->web_contents()->GetController().GoBack(); | 626 shell()->web_contents()->GetController().GoBack(); |
| 622 capturer.Wait(); | 627 capturer.Wait(); |
| 623 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 628 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 624 | ui::PAGE_TRANSITION_FORWARD_BACK | 629 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 625 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 630 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 626 capturer.params().transition); | 631 capturer.params().transition); |
| 627 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 632 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 633 EXPECT_FALSE(capturer.details().is_in_page); |
| 628 } | 634 } |
| 629 | 635 |
| 630 { | 636 { |
| 631 // Forward from the browser side. | 637 // Forward from the browser side. |
| 632 FrameNavigateParamsCapturer capturer(root); | 638 FrameNavigateParamsCapturer capturer(root); |
| 633 shell()->web_contents()->GetController().GoForward(); | 639 shell()->web_contents()->GetController().GoForward(); |
| 634 capturer.Wait(); | 640 capturer.Wait(); |
| 635 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 641 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 636 | ui::PAGE_TRANSITION_FORWARD_BACK | 642 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 637 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 643 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 638 capturer.params().transition); | 644 capturer.params().transition); |
| 639 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 645 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 646 EXPECT_FALSE(capturer.details().is_in_page); |
| 640 } | 647 } |
| 641 | 648 |
| 642 { | 649 { |
| 643 // Back from the renderer side. | 650 // Back from the renderer side. |
| 644 FrameNavigateParamsCapturer capturer(root); | 651 FrameNavigateParamsCapturer capturer(root); |
| 645 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), | 652 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), |
| 646 "history.back()")); | 653 "history.back()")); |
| 647 capturer.Wait(); | 654 capturer.Wait(); |
| 648 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 655 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 649 | ui::PAGE_TRANSITION_FORWARD_BACK | 656 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 650 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 657 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 651 capturer.params().transition); | 658 capturer.params().transition); |
| 652 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 659 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 660 EXPECT_FALSE(capturer.details().is_in_page); |
| 653 } | 661 } |
| 654 | 662 |
| 655 { | 663 { |
| 656 // Forward from the renderer side. | 664 // Forward from the renderer side. |
| 657 FrameNavigateParamsCapturer capturer(root); | 665 FrameNavigateParamsCapturer capturer(root); |
| 658 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), | 666 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), |
| 659 "history.forward()")); | 667 "history.forward()")); |
| 660 capturer.Wait(); | 668 capturer.Wait(); |
| 661 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 669 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 662 | ui::PAGE_TRANSITION_FORWARD_BACK | 670 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 663 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 671 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 664 capturer.params().transition); | 672 capturer.params().transition); |
| 665 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 673 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 674 EXPECT_FALSE(capturer.details().is_in_page); |
| 666 } | 675 } |
| 667 | 676 |
| 668 { | 677 { |
| 669 // Back from the renderer side via history.go(). | 678 // Back from the renderer side via history.go(). |
| 670 FrameNavigateParamsCapturer capturer(root); | 679 FrameNavigateParamsCapturer capturer(root); |
| 671 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), | 680 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), |
| 672 "history.go(-1)")); | 681 "history.go(-1)")); |
| 673 capturer.Wait(); | 682 capturer.Wait(); |
| 674 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 683 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 675 | ui::PAGE_TRANSITION_FORWARD_BACK | 684 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 676 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 685 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 677 capturer.params().transition); | 686 capturer.params().transition); |
| 678 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 687 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 688 EXPECT_FALSE(capturer.details().is_in_page); |
| 679 } | 689 } |
| 680 | 690 |
| 681 { | 691 { |
| 682 // Forward from the renderer side via history.go(). | 692 // Forward from the renderer side via history.go(). |
| 683 FrameNavigateParamsCapturer capturer(root); | 693 FrameNavigateParamsCapturer capturer(root); |
| 684 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), | 694 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), |
| 685 "history.go(1)")); | 695 "history.go(1)")); |
| 686 capturer.Wait(); | 696 capturer.Wait(); |
| 687 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 697 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 688 | ui::PAGE_TRANSITION_FORWARD_BACK | 698 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 689 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 699 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 690 capturer.params().transition); | 700 capturer.params().transition); |
| 691 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 701 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 702 EXPECT_FALSE(capturer.details().is_in_page); |
| 692 } | 703 } |
| 693 | 704 |
| 694 { | 705 { |
| 695 // Reload from the browser side. | 706 // Reload from the browser side. |
| 696 FrameNavigateParamsCapturer capturer(root); | 707 FrameNavigateParamsCapturer capturer(root); |
| 697 shell()->web_contents()->GetController().Reload(false); | 708 shell()->web_contents()->GetController().Reload(false); |
| 698 capturer.Wait(); | 709 capturer.Wait(); |
| 699 EXPECT_EQ(ui::PAGE_TRANSITION_RELOAD, capturer.params().transition); | 710 EXPECT_EQ(ui::PAGE_TRANSITION_RELOAD, capturer.params().transition); |
| 700 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 711 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 712 EXPECT_FALSE(capturer.details().is_in_page); |
| 701 } | 713 } |
| 702 | 714 |
| 703 { | 715 { |
| 704 // Reload from the renderer side. | 716 // Reload from the renderer side. |
| 705 FrameNavigateParamsCapturer capturer(root); | 717 FrameNavigateParamsCapturer capturer(root); |
| 706 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), | 718 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), |
| 707 "location.reload()")); | 719 "location.reload()")); |
| 708 capturer.Wait(); | 720 capturer.Wait(); |
| 709 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, | 721 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
| 710 capturer.params().transition); | 722 capturer.params().transition); |
| 711 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 723 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 724 EXPECT_FALSE(capturer.details().is_in_page); |
| 712 } | 725 } |
| 713 | 726 |
| 714 { | 727 { |
| 715 // location.replace(). | 728 // location.replace(). |
| 716 FrameNavigateParamsCapturer capturer(root); | 729 FrameNavigateParamsCapturer capturer(root); |
| 717 GURL frame_url(embedded_test_server()->GetURL( | 730 GURL frame_url(embedded_test_server()->GetURL( |
| 718 "/navigation_controller/simple_page_1.html")); | 731 "/navigation_controller/simple_page_1.html")); |
| 719 std::string script = "location.replace('" + frame_url.spec() + "')"; | 732 std::string script = "location.replace('" + frame_url.spec() + "')"; |
| 720 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 733 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 721 capturer.Wait(); | 734 capturer.Wait(); |
| 722 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, | 735 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
| 723 capturer.params().transition); | 736 capturer.params().transition); |
| 724 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); | 737 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 738 EXPECT_FALSE(capturer.details().is_in_page); |
| 725 } | 739 } |
| 726 } | |
| 727 | 740 |
| 728 // Verify that navigations for NAVIGATION_TYPE_SAME_PAGE are correctly | 741 // Now, various in-page navigations. |
| 729 // classified. | |
| 730 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | |
| 731 NavigationTypeClassification_SamePage) { | |
| 732 GURL url1(embedded_test_server()->GetURL( | |
| 733 "/navigation_controller/simple_page_1.html")); | |
| 734 NavigateToURL(shell(), url1); | |
| 735 | |
| 736 FrameTreeNode* root = | |
| 737 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 738 GetFrameTree()->root(); | |
| 739 | |
| 740 { | |
| 741 // Simple load. | |
| 742 FrameNavigateParamsCapturer capturer(root); | |
| 743 GURL frame_url(embedded_test_server()->GetURL( | |
| 744 "/navigation_controller/simple_page_1.html")); | |
| 745 NavigateFrameToURL(root, frame_url); | |
| 746 capturer.Wait(); | |
| 747 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); | |
| 748 EXPECT_EQ(NAVIGATION_TYPE_SAME_PAGE, capturer.details().type); | |
| 749 } | |
| 750 } | |
| 751 | |
| 752 // Verify that navigations for NAVIGATION_TYPE_IN_PAGE are correctly | |
| 753 // classified. | |
| 754 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | |
| 755 NavigationTypeClassification_InPage) { | |
| 756 GURL url1(embedded_test_server()->GetURL( | |
| 757 "/navigation_controller/simple_page_1.html")); | |
| 758 NavigateToURL(shell(), url1); | |
| 759 | |
| 760 FrameTreeNode* root = | |
| 761 static_cast<WebContentsImpl*>(shell()->web_contents())-> | |
| 762 GetFrameTree()->root(); | |
| 763 | 742 |
| 764 { | 743 { |
| 765 // history.replaceState(). | 744 // history.replaceState(). |
| 766 FrameNavigateParamsCapturer capturer(root); | 745 FrameNavigateParamsCapturer capturer(root); |
| 767 std::string script = | 746 std::string script = |
| 768 "history.replaceState({}, 'page 1', 'simple_page_2.html')"; | 747 "history.replaceState({}, 'page 2', 'simple_page_2.html')"; |
| 769 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 748 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 770 capturer.Wait(); | 749 capturer.Wait(); |
| 771 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); | 750 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT, |
| 772 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 751 capturer.params().transition); |
| 752 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 773 EXPECT_TRUE(capturer.details().is_in_page); | 753 EXPECT_TRUE(capturer.details().is_in_page); |
| 774 } | 754 } |
| 775 | 755 |
| 776 // Back and forward across a fragment navigation. | 756 // Back and forward across a fragment navigation. |
| 777 | 757 |
| 778 GURL url2(embedded_test_server()->GetURL( | 758 GURL url_links(embedded_test_server()->GetURL( |
| 779 "/navigation_controller/page_with_links.html")); | 759 "/navigation_controller/page_with_links.html")); |
| 780 NavigateToURL(shell(), url2); | 760 NavigateToURL(shell(), url_links); |
| 781 std::string script = "document.getElementById('fraglink').click()"; | 761 std::string script = "document.getElementById('fraglink').click()"; |
| 782 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 762 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 783 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 763 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| 784 | 764 |
| 785 { | 765 { |
| 786 // Back. | 766 // Back. |
| 787 FrameNavigateParamsCapturer capturer(root); | 767 FrameNavigateParamsCapturer capturer(root); |
| 788 shell()->web_contents()->GetController().GoBack(); | 768 shell()->web_contents()->GetController().GoBack(); |
| 789 capturer.Wait(); | 769 capturer.Wait(); |
| 790 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 770 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 791 | ui::PAGE_TRANSITION_FORWARD_BACK | 771 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 792 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 772 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 793 capturer.params().transition); | 773 capturer.params().transition); |
| 794 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 774 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 795 EXPECT_TRUE(capturer.details().is_in_page); | 775 EXPECT_TRUE(capturer.details().is_in_page); |
| 796 } | 776 } |
| 797 | 777 |
| 798 { | 778 { |
| 799 // Forward. | 779 // Forward. |
| 800 FrameNavigateParamsCapturer capturer(root); | 780 FrameNavigateParamsCapturer capturer(root); |
| 801 shell()->web_contents()->GetController().GoForward(); | 781 shell()->web_contents()->GetController().GoForward(); |
| 802 capturer.Wait(); | 782 capturer.Wait(); |
| 803 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_FORWARD_BACK, | 783 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_FORWARD_BACK, |
| 804 capturer.params().transition); | 784 capturer.params().transition); |
| 805 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 785 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 806 EXPECT_TRUE(capturer.details().is_in_page); | 786 EXPECT_TRUE(capturer.details().is_in_page); |
| 807 } | 787 } |
| 808 | 788 |
| 809 // Back and forward across a pushState-created navigation. | 789 // Back and forward across a pushState-created navigation. |
| 810 | 790 |
| 811 NavigateToURL(shell(), url1); | 791 NavigateToURL(shell(), url1); |
| 812 script = "history.pushState({}, 'page 2', 'simple_page_2.html')"; | 792 script = "history.pushState({}, 'page 2', 'simple_page_2.html')"; |
| 813 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 793 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 814 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 794 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
| 815 | 795 |
| 816 { | 796 { |
| 817 // Back. | 797 // Back. |
| 818 FrameNavigateParamsCapturer capturer(root); | 798 FrameNavigateParamsCapturer capturer(root); |
| 819 shell()->web_contents()->GetController().GoBack(); | 799 shell()->web_contents()->GetController().GoBack(); |
| 820 capturer.Wait(); | 800 capturer.Wait(); |
| 821 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED | 801 EXPECT_EQ(ui::PAGE_TRANSITION_TYPED |
| 822 | ui::PAGE_TRANSITION_FORWARD_BACK | 802 | ui::PAGE_TRANSITION_FORWARD_BACK |
| 823 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, | 803 | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR, |
| 824 capturer.params().transition); | 804 capturer.params().transition); |
| 825 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 805 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 826 EXPECT_TRUE(capturer.details().is_in_page); | 806 EXPECT_TRUE(capturer.details().is_in_page); |
| 827 } | 807 } |
| 828 | 808 |
| 829 { | 809 { |
| 830 // Forward. | 810 // Forward. |
| 831 FrameNavigateParamsCapturer capturer(root); | 811 FrameNavigateParamsCapturer capturer(root); |
| 832 shell()->web_contents()->GetController().GoForward(); | 812 shell()->web_contents()->GetController().GoForward(); |
| 833 capturer.Wait(); | 813 capturer.Wait(); |
| 834 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_FORWARD_BACK, | 814 EXPECT_EQ(ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_FORWARD_BACK, |
| 835 capturer.params().transition); | 815 capturer.params().transition); |
| 836 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 816 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 837 EXPECT_TRUE(capturer.details().is_in_page); | 817 EXPECT_TRUE(capturer.details().is_in_page); |
| 838 } | 818 } |
| 839 } | 819 } |
| 840 | 820 |
| 821 // Verify that navigations for NAVIGATION_TYPE_SAME_PAGE are correctly |
| 822 // classified. |
| 823 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| 824 NavigationTypeClassification_SamePage) { |
| 825 GURL url1(embedded_test_server()->GetURL( |
| 826 "/navigation_controller/simple_page_1.html")); |
| 827 NavigateToURL(shell(), url1); |
| 828 |
| 829 FrameTreeNode* root = |
| 830 static_cast<WebContentsImpl*>(shell()->web_contents())-> |
| 831 GetFrameTree()->root(); |
| 832 |
| 833 { |
| 834 // Simple load. |
| 835 FrameNavigateParamsCapturer capturer(root); |
| 836 GURL frame_url(embedded_test_server()->GetURL( |
| 837 "/navigation_controller/simple_page_1.html")); |
| 838 NavigateFrameToURL(root, frame_url); |
| 839 capturer.Wait(); |
| 840 EXPECT_EQ(ui::PAGE_TRANSITION_LINK, capturer.params().transition); |
| 841 EXPECT_EQ(NAVIGATION_TYPE_SAME_PAGE, capturer.details().type); |
| 842 } |
| 843 } |
| 844 |
| 841 // Verify that navigations for NAVIGATION_TYPE_NEW_SUBFRAME and | 845 // Verify that navigations for NAVIGATION_TYPE_NEW_SUBFRAME and |
| 842 // NAVIGATION_TYPE_AUTO_SUBFRAME are properly classified. | 846 // NAVIGATION_TYPE_AUTO_SUBFRAME are properly classified. |
| 843 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | 847 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| 844 NavigationTypeClassification_NewAndAutoSubframe) { | 848 NavigationTypeClassification_NewAndAutoSubframe) { |
| 845 GURL main_url(embedded_test_server()->GetURL( | 849 GURL main_url(embedded_test_server()->GetURL( |
| 846 "/navigation_controller/page_with_iframe.html")); | 850 "/navigation_controller/page_with_iframe.html")); |
| 847 NavigateToURL(shell(), main_url); | 851 NavigateToURL(shell(), main_url); |
| 848 | 852 |
| 849 // It is safe to obtain the root frame tree node here, as it doesn't change. | 853 // It is safe to obtain the root frame tree node here, as it doesn't change. |
| 850 FrameTreeNode* root = | 854 FrameTreeNode* root = |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1829 // Now the existing page uses history.replaceState(). | 1833 // Now the existing page uses history.replaceState(). |
| 1830 FrameNavigateParamsCapturer capturer(root); | 1834 FrameNavigateParamsCapturer capturer(root); |
| 1831 capturer.set_wait_for_load(false); | 1835 capturer.set_wait_for_load(false); |
| 1832 std::string script = | 1836 std::string script = |
| 1833 "history.replaceState({}, '', '" + replace_state_filename + "')"; | 1837 "history.replaceState({}, '', '" + replace_state_filename + "')"; |
| 1834 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); | 1838 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); |
| 1835 capturer.Wait(); | 1839 capturer.Wait(); |
| 1836 | 1840 |
| 1837 // The fact that there was a pending entry shouldn't interfere with the | 1841 // The fact that there was a pending entry shouldn't interfere with the |
| 1838 // classification. | 1842 // classification. |
| 1839 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, capturer.details().type); | 1843 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); |
| 1844 EXPECT_TRUE(capturer.details().is_in_page); |
| 1840 } | 1845 } |
| 1841 | 1846 |
| 1842 ResourceDispatcherHost::Get()->SetDelegate(nullptr); | 1847 ResourceDispatcherHost::Get()->SetDelegate(nullptr); |
| 1843 } | 1848 } |
| 1844 | 1849 |
| 1845 } // namespace | 1850 } // namespace |
| 1846 | 1851 |
| 1847 IN_PROC_BROWSER_TEST_F( | 1852 IN_PROC_BROWSER_TEST_F( |
| 1848 NavigationControllerBrowserTest, | 1853 NavigationControllerBrowserTest, |
| 1849 NavigationTypeClassification_On1InPageToXWhile2Pending) { | 1854 NavigationTypeClassification_On1InPageToXWhile2Pending) { |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2119 // tricky. | 2124 // tricky. |
| 2120 EXPECT_EQ(nullptr, controller.GetPendingEntry()); | 2125 EXPECT_EQ(nullptr, controller.GetPendingEntry()); |
| 2121 shell()->web_contents()->Stop(); | 2126 shell()->web_contents()->Stop(); |
| 2122 watcher.Wait(); | 2127 watcher.Wait(); |
| 2123 } | 2128 } |
| 2124 | 2129 |
| 2125 ResourceDispatcherHost::Get()->SetDelegate(nullptr); | 2130 ResourceDispatcherHost::Get()->SetDelegate(nullptr); |
| 2126 } | 2131 } |
| 2127 | 2132 |
| 2128 } // namespace content | 2133 } // namespace content |
| OLD | NEW |