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

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

Issue 2682193002: Convert NavigationController unit and browser tests to use the new navigation callbacks. (Closed)
Patch Set: merge Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/browser/frame_host/navigation_controller_impl.h" 5 #include "content/browser/frame_host/navigation_controller_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "base/sequenced_task_runner.h" 17 #include "base/sequenced_task_runner.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
20 #include "base/test/histogram_tester.h" 20 #include "base/test/histogram_tester.h"
21 #include "base/threading/sequenced_task_runner_handle.h" 21 #include "base/threading/sequenced_task_runner_handle.h"
22 #include "content/browser/frame_host/frame_navigation_entry.h" 22 #include "content/browser/frame_host/frame_navigation_entry.h"
23 #include "content/browser/frame_host/frame_tree.h" 23 #include "content/browser/frame_host/frame_tree.h"
24 #include "content/browser/frame_host/navigation_entry_impl.h" 24 #include "content/browser/frame_host/navigation_entry_impl.h"
25 #include "content/browser/frame_host/navigation_handle_impl.h"
25 #include "content/browser/loader/resource_dispatcher_host_impl.h" 26 #include "content/browser/loader/resource_dispatcher_host_impl.h"
26 #include "content/browser/web_contents/web_contents_impl.h" 27 #include "content/browser/web_contents/web_contents_impl.h"
27 #include "content/common/frame_messages.h" 28 #include "content/common/frame_messages.h"
28 #include "content/common/page_state_serialization.h" 29 #include "content/common/page_state_serialization.h"
29 #include "content/common/site_isolation_policy.h" 30 #include "content/common/site_isolation_policy.h"
30 #include "content/public/browser/navigation_controller.h" 31 #include "content/public/browser/navigation_controller.h"
31 #include "content/public/browser/navigation_handle.h"
32 #include "content/public/browser/render_view_host.h" 32 #include "content/public/browser/render_view_host.h"
33 #include "content/public/browser/resource_dispatcher_host.h" 33 #include "content/public/browser/resource_dispatcher_host.h"
34 #include "content/public/browser/resource_dispatcher_host_delegate.h" 34 #include "content/public/browser/resource_dispatcher_host_delegate.h"
35 #include "content/public/browser/resource_throttle.h" 35 #include "content/public/browser/resource_throttle.h"
36 #include "content/public/browser/web_contents.h" 36 #include "content/public/browser/web_contents.h"
37 #include "content/public/browser/web_contents_delegate.h" 37 #include "content/public/browser/web_contents_delegate.h"
38 #include "content/public/browser/web_contents_observer.h" 38 #include "content/public/browser/web_contents_observer.h"
39 #include "content/public/common/bindings_policy.h" 39 #include "content/public/common/bindings_policy.h"
40 #include "content/public/common/browser_side_navigation_policy.h" 40 #include "content/public/common/browser_side_navigation_policy.h"
41 #include "content/public/common/renderer_preferences.h" 41 #include "content/public/common/renderer_preferences.h"
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 571
572 namespace { 572 namespace {
573 573
574 class NoNavigationsObserver : public WebContentsObserver { 574 class NoNavigationsObserver : public WebContentsObserver {
575 public: 575 public:
576 // Observes navigation for the specified |web_contents|. 576 // Observes navigation for the specified |web_contents|.
577 explicit NoNavigationsObserver(WebContents* web_contents) 577 explicit NoNavigationsObserver(WebContents* web_contents)
578 : WebContentsObserver(web_contents) {} 578 : WebContentsObserver(web_contents) {}
579 579
580 private: 580 private:
581 void DidNavigateAnyFrame(RenderFrameHost* render_frame_host, 581 void DidFinishNavigation(NavigationHandle* navigation_handle) override {
582 const LoadCommittedDetails& details, 582 if (!navigation_handle->HasCommitted())
583 const FrameNavigateParams& params) override { 583 return;
584 FAIL() << "No navigations should occur"; 584 FAIL() << "No navigations should occur";
585 } 585 }
586 }; 586 };
587 587
588 class FrameNavigateParamsCapturer : public WebContentsObserver { 588 class FrameNavigateParamsCapturer : public WebContentsObserver {
589 public: 589 public:
590 // Observes navigation for the specified |node|. 590 // Observes navigation for the specified |node|.
591 explicit FrameNavigateParamsCapturer(FrameTreeNode* node) 591 explicit FrameNavigateParamsCapturer(FrameTreeNode* node)
592 : WebContentsObserver( 592 : WebContentsObserver(
593 node->current_frame_host()->delegate()->GetAsWebContents()), 593 node->current_frame_host()->delegate()->GetAsWebContents()),
594 frame_tree_node_id_(node->frame_tree_node_id()), 594 frame_tree_node_id_(node->frame_tree_node_id()),
595 navigations_remaining_(1), 595 navigations_remaining_(1),
596 wait_for_load_(true), 596 wait_for_load_(true),
597 message_loop_runner_(new MessageLoopRunner) {} 597 message_loop_runner_(new MessageLoopRunner) {}
598 598
599 void set_navigations_remaining(int count) { 599 void set_navigations_remaining(int count) {
600 navigations_remaining_ = count; 600 navigations_remaining_ = count;
601 } 601 }
602 602
603 void set_wait_for_load(bool ignore) { 603 void set_wait_for_load(bool ignore) {
604 wait_for_load_ = ignore; 604 wait_for_load_ = ignore;
605 } 605 }
606 606
607 void Wait() { 607 void Wait() {
608 message_loop_runner_->Run(); 608 message_loop_runner_->Run();
609 } 609 }
610 610
611 const FrameNavigateParams& params() const { 611 ui::PageTransition transition() {
612 EXPECT_EQ(1U, params_.size()); 612 EXPECT_EQ(1U, transitions_.size());
613 return params_[0]; 613 return transitions_[0];
614 } 614 }
615 615
616 const std::vector<FrameNavigateParams>& all_params() const { 616 NavigationType navigation_type() {
617 return params_; 617 EXPECT_EQ(1U, navigation_types_.size());
618 return navigation_types_[0];
618 } 619 }
619 620
620 const LoadCommittedDetails& details() const { 621 bool is_in_page() {
621 EXPECT_EQ(1U, details_.size()); 622 EXPECT_EQ(1U, is_in_pages_.size());
622 return details_[0]; 623 return is_in_pages_[0];
623 } 624 }
624 625
625 const std::vector<LoadCommittedDetails>& all_details() const { 626 const std::vector<ui::PageTransition>& transitions() { return transitions_; }
626 return details_; 627 const std::vector<GURL>& urls() { return urls_; }
628 const std::vector<NavigationType>& navigation_types() {
629 return navigation_types_;
627 } 630 }
631 const std::vector<bool>& is_in_pages() { return is_in_pages_; }
628 632
629 private: 633 private:
630 void DidNavigateAnyFrame(RenderFrameHost* render_frame_host, 634 void DidFinishNavigation(NavigationHandle* navigation_handle) override {
631 const LoadCommittedDetails& details, 635 if (!navigation_handle->HasCommitted())
632 const FrameNavigateParams& params) override { 636 return;
633 RenderFrameHostImpl* rfh = 637
634 static_cast<RenderFrameHostImpl*>(render_frame_host); 638 if (navigation_handle->GetFrameTreeNodeId() != frame_tree_node_id_)
635 if (rfh->frame_tree_node()->frame_tree_node_id() != frame_tree_node_id_)
636 return; 639 return;
637 640
638 --navigations_remaining_; 641 --navigations_remaining_;
639 params_.push_back(params); 642 transitions_.push_back(navigation_handle->GetPageTransition());
640 details_.push_back(details); 643 urls_.push_back(navigation_handle->GetURL());
644 navigation_types_.push_back(
645 static_cast<NavigationHandleImpl*>(navigation_handle)
646 ->navigation_type());
647 is_in_pages_.push_back(navigation_handle->IsSamePage());
641 if (!navigations_remaining_ && 648 if (!navigations_remaining_ &&
642 (!web_contents()->IsLoading() || !wait_for_load_)) 649 (!web_contents()->IsLoading() || !wait_for_load_))
643 message_loop_runner_->Quit(); 650 message_loop_runner_->Quit();
644 } 651 }
645 652
646 void DidStopLoading() override { 653 void DidStopLoading() override {
647 if (!navigations_remaining_) 654 if (!navigations_remaining_)
648 message_loop_runner_->Quit(); 655 message_loop_runner_->Quit();
649 } 656 }
650 657
651 // The id of the FrameTreeNode whose navigations to observe. 658 // The id of the FrameTreeNode whose navigations to observe.
652 int frame_tree_node_id_; 659 int frame_tree_node_id_;
653 660
654 // How many navigations remain to capture. 661 // How many navigations remain to capture.
655 int navigations_remaining_; 662 int navigations_remaining_;
656 663
657 // Whether to also wait for the load to complete. 664 // Whether to also wait for the load to complete.
658 bool wait_for_load_; 665 bool wait_for_load_;
659 666
660 // The params of the navigations. 667 std::vector<ui::PageTransition> transitions_;
661 std::vector<FrameNavigateParams> params_; 668 std::vector<GURL> urls_;
662 669 std::vector<NavigationType> navigation_types_;
663 // The details of the navigations. 670 std::vector<bool> is_in_pages_;
664 std::vector<LoadCommittedDetails> details_;
665 671
666 // The MessageLoopRunner used to spin the message loop. 672 // The MessageLoopRunner used to spin the message loop.
667 scoped_refptr<MessageLoopRunner> message_loop_runner_; 673 scoped_refptr<MessageLoopRunner> message_loop_runner_;
668 }; 674 };
669 675
670 class LoadCommittedCapturer : public WebContentsObserver { 676 class LoadCommittedCapturer : public WebContentsObserver {
671 public: 677 public:
672 // Observes the load commit for the specified |node|. 678 // Observes the load commit for the specified |node|.
673 explicit LoadCommittedCapturer(FrameTreeNode* node) 679 explicit LoadCommittedCapturer(FrameTreeNode* node)
674 : WebContentsObserver( 680 : WebContentsObserver(
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 FrameTreeNode* root = 915 FrameTreeNode* root =
910 static_cast<WebContentsImpl*>(shell()->web_contents())-> 916 static_cast<WebContentsImpl*>(shell()->web_contents())->
911 GetFrameTree()->root(); 917 GetFrameTree()->root();
912 918
913 // Navigate to a page that fails to load. It must result in an error page, the 919 // Navigate to a page that fails to load. It must result in an error page, the
914 // NEW_PAGE navigation type, and an addition to the history list. 920 // NEW_PAGE navigation type, and an addition to the history list.
915 { 921 {
916 FrameNavigateParamsCapturer capturer(root); 922 FrameNavigateParamsCapturer capturer(root);
917 NavigateFrameToURL(root, error_url); 923 NavigateFrameToURL(root, error_url);
918 capturer.Wait(); 924 capturer.Wait();
919 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 925 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
920 NavigationEntry* entry = controller.GetLastCommittedEntry(); 926 NavigationEntry* entry = controller.GetLastCommittedEntry();
921 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); 927 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType());
922 EXPECT_EQ(2, controller.GetEntryCount()); 928 EXPECT_EQ(2, controller.GetEntryCount());
923 } 929 }
924 930
925 // Navigate again to the page that fails to load. It must result in an error 931 // Navigate again to the page that fails to load. It must result in an error
926 // page, the EXISTING_PAGE navigation type, and no addition to the history 932 // page, the EXISTING_PAGE navigation type, and no addition to the history
927 // list. We do not use SAME_PAGE here; that case only differs in that it 933 // list. We do not use SAME_PAGE here; that case only differs in that it
928 // clears the pending entry, and there is no pending entry after a load 934 // clears the pending entry, and there is no pending entry after a load
929 // failure. 935 // failure.
930 { 936 {
931 FrameNavigateParamsCapturer capturer(root); 937 FrameNavigateParamsCapturer capturer(root);
932 NavigateFrameToURL(root, error_url); 938 NavigateFrameToURL(root, error_url);
933 capturer.Wait(); 939 capturer.Wait();
934 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 940 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
935 NavigationEntry* entry = controller.GetLastCommittedEntry(); 941 NavigationEntry* entry = controller.GetLastCommittedEntry();
936 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); 942 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType());
937 EXPECT_EQ(2, controller.GetEntryCount()); 943 EXPECT_EQ(2, controller.GetEntryCount());
938 } 944 }
939 945
940 // Make a new entry ... 946 // Make a new entry ...
941 EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL))); 947 EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL)));
942 EXPECT_EQ(3, controller.GetEntryCount()); 948 EXPECT_EQ(3, controller.GetEntryCount());
943 949
944 // ... and replace it with a failed load. 950 // ... and replace it with a failed load.
945 // TODO(creis): Make this be NEW_PAGE along with the other location.replace 951 // TODO(creis): Make this be NEW_PAGE along with the other location.replace
946 // cases. There isn't much impact to having this be EXISTING_PAGE for now. 952 // cases. There isn't much impact to having this be EXISTING_PAGE for now.
947 // See https://crbug.com/596707. 953 // See https://crbug.com/596707.
948 { 954 {
949 FrameNavigateParamsCapturer capturer(root); 955 FrameNavigateParamsCapturer capturer(root);
950 RendererLocationReplace(shell(), error_url); 956 RendererLocationReplace(shell(), error_url);
951 capturer.Wait(); 957 capturer.Wait();
952 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 958 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
953 NavigationEntry* entry = controller.GetLastCommittedEntry(); 959 NavigationEntry* entry = controller.GetLastCommittedEntry();
954 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); 960 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType());
955 EXPECT_EQ(3, controller.GetEntryCount()); 961 EXPECT_EQ(3, controller.GetEntryCount());
956 } 962 }
957 963
958 // Make a new web ui page to force a process swap ... 964 // Make a new web ui page to force a process swap ...
959 GURL web_ui_page(std::string(kChromeUIScheme) + "://" + 965 GURL web_ui_page(std::string(kChromeUIScheme) + "://" +
960 std::string(kChromeUIGpuHost)); 966 std::string(kChromeUIGpuHost));
961 EXPECT_TRUE(NavigateToURL(shell(), web_ui_page)); 967 EXPECT_TRUE(NavigateToURL(shell(), web_ui_page));
962 EXPECT_EQ(4, controller.GetEntryCount()); 968 EXPECT_EQ(4, controller.GetEntryCount());
963 969
964 // ... and replace it with a failed load. (It is NEW_PAGE for the reason noted 970 // ... and replace it with a failed load. (It is NEW_PAGE for the reason noted
965 // above.) 971 // above.)
966 { 972 {
967 FrameNavigateParamsCapturer capturer(root); 973 FrameNavigateParamsCapturer capturer(root);
968 RendererLocationReplace(shell(), error_url); 974 RendererLocationReplace(shell(), error_url);
969 capturer.Wait(); 975 capturer.Wait();
970 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 976 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
971 NavigationEntry* entry = controller.GetLastCommittedEntry(); 977 NavigationEntry* entry = controller.GetLastCommittedEntry();
972 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType()); 978 EXPECT_EQ(PAGE_TYPE_ERROR, entry->GetPageType());
973 EXPECT_EQ(4, controller.GetEntryCount()); 979 EXPECT_EQ(4, controller.GetEntryCount());
974 } 980 }
975 } 981 }
976 982
977 // Various tests for navigation type classifications. TODO(avi): It's rather 983 // Various tests for navigation type classifications. TODO(avi): It's rather
978 // bogus that the same info is in two different enums; http://crbug.com/453555. 984 // bogus that the same info is in two different enums; http://crbug.com/453555.
979 985
980 // Verify that navigations for NAVIGATION_TYPE_NEW_PAGE are correctly 986 // Verify that navigations for NAVIGATION_TYPE_NEW_PAGE are correctly
981 // classified. 987 // classified.
982 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 988 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
983 NavigationTypeClassification_NewPage) { 989 NavigationTypeClassification_NewPage) {
984 EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL))); 990 EXPECT_TRUE(NavigateToURL(shell(), GURL(url::kAboutBlankURL)));
985 991
986 FrameTreeNode* root = 992 FrameTreeNode* root =
987 static_cast<WebContentsImpl*>(shell()->web_contents())-> 993 static_cast<WebContentsImpl*>(shell()->web_contents())->
988 GetFrameTree()->root(); 994 GetFrameTree()->root();
989 995
990 { 996 {
991 // Simple load. 997 // Simple load.
992 FrameNavigateParamsCapturer capturer(root); 998 FrameNavigateParamsCapturer capturer(root);
993 GURL frame_url(embedded_test_server()->GetURL( 999 GURL frame_url(embedded_test_server()->GetURL(
994 "/navigation_controller/page_with_links.html")); 1000 "/navigation_controller/page_with_links.html"));
995 NavigateFrameToURL(root, frame_url); 1001 NavigateFrameToURL(root, frame_url);
996 capturer.Wait(); 1002 capturer.Wait();
997 // TODO(avi,creis): Why is this (and quite a few others below) a "link" 1003 // TODO(avi,creis): Why is this (and quite a few others below) a "link"
998 // transition? Lots of these transitions should be cleaned up. 1004 // transition? Lots of these transitions should be cleaned up.
999 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1005 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1000 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1006 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1001 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1007 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1002 EXPECT_FALSE(capturer.details().is_in_page); 1008 EXPECT_FALSE(capturer.is_in_page());
1003 } 1009 }
1004 1010
1005 { 1011 {
1006 // Load via a fragment link click. 1012 // Load via a fragment link click.
1007 FrameNavigateParamsCapturer capturer(root); 1013 FrameNavigateParamsCapturer capturer(root);
1008 std::string script = "document.getElementById('fraglink').click()"; 1014 std::string script = "document.getElementById('fraglink').click()";
1009 EXPECT_TRUE(ExecuteScript(root, script)); 1015 EXPECT_TRUE(ExecuteScript(root, script));
1010 capturer.Wait(); 1016 capturer.Wait();
1011 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1017 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1012 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1018 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1013 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1019 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1014 EXPECT_TRUE(capturer.details().is_in_page); 1020 EXPECT_TRUE(capturer.is_in_page());
1015 } 1021 }
1016 1022
1017 { 1023 {
1018 // Load via link click. 1024 // Load via link click.
1019 FrameNavigateParamsCapturer capturer(root); 1025 FrameNavigateParamsCapturer capturer(root);
1020 std::string script = "document.getElementById('thelink').click()"; 1026 std::string script = "document.getElementById('thelink').click()";
1021 EXPECT_TRUE(ExecuteScript(root, script)); 1027 EXPECT_TRUE(ExecuteScript(root, script));
1022 capturer.Wait(); 1028 capturer.Wait();
1023 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1029 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1024 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1030 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1025 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1031 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1026 EXPECT_FALSE(capturer.details().is_in_page); 1032 EXPECT_FALSE(capturer.is_in_page());
1027 } 1033 }
1028 1034
1029 { 1035 {
1030 // location.assign(). 1036 // location.assign().
1031 FrameNavigateParamsCapturer capturer(root); 1037 FrameNavigateParamsCapturer capturer(root);
1032 GURL frame_url(embedded_test_server()->GetURL( 1038 GURL frame_url(embedded_test_server()->GetURL(
1033 "/navigation_controller/simple_page_2.html")); 1039 "/navigation_controller/simple_page_2.html"));
1034 std::string script = "location.assign('" + frame_url.spec() + "')"; 1040 std::string script = "location.assign('" + frame_url.spec() + "')";
1035 EXPECT_TRUE(ExecuteScript(root, script)); 1041 EXPECT_TRUE(ExecuteScript(root, script));
1036 capturer.Wait(); 1042 capturer.Wait();
1037 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1043 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1038 capturer.params().transition, 1044 capturer.transition(),
1039 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1045 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1040 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1046 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1041 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1047 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1042 EXPECT_FALSE(capturer.details().is_in_page); 1048 EXPECT_FALSE(capturer.is_in_page());
1043 } 1049 }
1044 1050
1045 { 1051 {
1046 // history.pushState(). 1052 // history.pushState().
1047 FrameNavigateParamsCapturer capturer(root); 1053 FrameNavigateParamsCapturer capturer(root);
1048 std::string script = 1054 std::string script =
1049 "history.pushState({}, 'page 1', 'simple_page_1.html')"; 1055 "history.pushState({}, 'page 1', 'simple_page_1.html')";
1050 EXPECT_TRUE(ExecuteScript(root, script)); 1056 EXPECT_TRUE(ExecuteScript(root, script));
1051 capturer.Wait(); 1057 capturer.Wait();
1052 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1058 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1053 capturer.params().transition, 1059 capturer.transition(),
1054 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1060 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1055 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1061 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1056 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1062 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1057 EXPECT_TRUE(capturer.details().is_in_page); 1063 EXPECT_TRUE(capturer.is_in_page());
1058 } 1064 }
1059 1065
1060 if (AreAllSitesIsolatedForTesting()) { 1066 if (AreAllSitesIsolatedForTesting()) {
1061 // Cross-process location.replace(). 1067 // Cross-process location.replace().
1062 FrameNavigateParamsCapturer capturer(root); 1068 FrameNavigateParamsCapturer capturer(root);
1063 GURL frame_url(embedded_test_server()->GetURL( 1069 GURL frame_url(embedded_test_server()->GetURL(
1064 "foo.com", "/navigation_controller/simple_page_1.html")); 1070 "foo.com", "/navigation_controller/simple_page_1.html"));
1065 std::string script = "location.replace('" + frame_url.spec() + "')"; 1071 std::string script = "location.replace('" + frame_url.spec() + "')";
1066 EXPECT_TRUE(ExecuteScript(root, script)); 1072 EXPECT_TRUE(ExecuteScript(root, script));
1067 capturer.Wait(); 1073 capturer.Wait();
1068 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1074 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1069 capturer.params().transition, 1075 capturer.transition(),
1070 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1076 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1071 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1077 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1072 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1078 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1073 EXPECT_FALSE(capturer.details().is_in_page); 1079 EXPECT_FALSE(capturer.is_in_page());
1074 } 1080 }
1075 } 1081 }
1076 1082
1077 // Verify that navigations for NAVIGATION_TYPE_EXISTING_PAGE are correctly 1083 // Verify that navigations for NAVIGATION_TYPE_EXISTING_PAGE are correctly
1078 // classified. 1084 // classified.
1079 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1085 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1080 NavigationTypeClassification_ExistingPage) { 1086 NavigationTypeClassification_ExistingPage) {
1081 GURL url1(embedded_test_server()->GetURL( 1087 GURL url1(embedded_test_server()->GetURL(
1082 "/navigation_controller/simple_page_1.html")); 1088 "/navigation_controller/simple_page_1.html"));
1083 EXPECT_TRUE(NavigateToURL(shell(), url1)); 1089 EXPECT_TRUE(NavigateToURL(shell(), url1));
1084 GURL url2(embedded_test_server()->GetURL( 1090 GURL url2(embedded_test_server()->GetURL(
1085 "/navigation_controller/simple_page_2.html")); 1091 "/navigation_controller/simple_page_2.html"));
1086 EXPECT_TRUE(NavigateToURL(shell(), url2)); 1092 EXPECT_TRUE(NavigateToURL(shell(), url2));
1087 1093
1088 FrameTreeNode* root = 1094 FrameTreeNode* root =
1089 static_cast<WebContentsImpl*>(shell()->web_contents())-> 1095 static_cast<WebContentsImpl*>(shell()->web_contents())->
1090 GetFrameTree()->root(); 1096 GetFrameTree()->root();
1091 1097
1092 { 1098 {
1093 // Back from the browser side. 1099 // Back from the browser side.
1094 FrameNavigateParamsCapturer capturer(root); 1100 FrameNavigateParamsCapturer capturer(root);
1095 shell()->web_contents()->GetController().GoBack(); 1101 shell()->web_contents()->GetController().GoBack();
1096 capturer.Wait(); 1102 capturer.Wait();
1097 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1103 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1098 capturer.params().transition, 1104 capturer.transition(),
1099 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1105 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1100 ui::PAGE_TRANSITION_FORWARD_BACK | 1106 ui::PAGE_TRANSITION_FORWARD_BACK |
1101 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1107 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1102 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1108 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1103 EXPECT_FALSE(capturer.details().is_in_page); 1109 EXPECT_FALSE(capturer.is_in_page());
1104 } 1110 }
1105 1111
1106 { 1112 {
1107 // Forward from the browser side. 1113 // Forward from the browser side.
1108 FrameNavigateParamsCapturer capturer(root); 1114 FrameNavigateParamsCapturer capturer(root);
1109 shell()->web_contents()->GetController().GoForward(); 1115 shell()->web_contents()->GetController().GoForward();
1110 capturer.Wait(); 1116 capturer.Wait();
1111 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1117 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1112 capturer.params().transition, 1118 capturer.transition(),
1113 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1119 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1114 ui::PAGE_TRANSITION_FORWARD_BACK | 1120 ui::PAGE_TRANSITION_FORWARD_BACK |
1115 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1121 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1116 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1122 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1117 EXPECT_FALSE(capturer.details().is_in_page); 1123 EXPECT_FALSE(capturer.is_in_page());
1118 } 1124 }
1119 1125
1120 { 1126 {
1121 // Back from the renderer side. 1127 // Back from the renderer side.
1122 FrameNavigateParamsCapturer capturer(root); 1128 FrameNavigateParamsCapturer capturer(root);
1123 EXPECT_TRUE(ExecuteScript(root, "history.back()")); 1129 EXPECT_TRUE(ExecuteScript(root, "history.back()"));
1124 capturer.Wait(); 1130 capturer.Wait();
1125 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1131 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1126 capturer.params().transition, 1132 capturer.transition(),
1127 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1133 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1128 ui::PAGE_TRANSITION_FORWARD_BACK | 1134 ui::PAGE_TRANSITION_FORWARD_BACK |
1129 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1135 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1130 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1136 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1131 EXPECT_FALSE(capturer.details().is_in_page); 1137 EXPECT_FALSE(capturer.is_in_page());
1132 } 1138 }
1133 1139
1134 { 1140 {
1135 // Forward from the renderer side. 1141 // Forward from the renderer side.
1136 FrameNavigateParamsCapturer capturer(root); 1142 FrameNavigateParamsCapturer capturer(root);
1137 EXPECT_TRUE(ExecuteScript(root, "history.forward()")); 1143 EXPECT_TRUE(ExecuteScript(root, "history.forward()"));
1138 capturer.Wait(); 1144 capturer.Wait();
1139 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1145 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1140 capturer.params().transition, 1146 capturer.transition(),
1141 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1147 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1142 ui::PAGE_TRANSITION_FORWARD_BACK | 1148 ui::PAGE_TRANSITION_FORWARD_BACK |
1143 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1149 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1144 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1150 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1145 EXPECT_FALSE(capturer.details().is_in_page); 1151 EXPECT_FALSE(capturer.is_in_page());
1146 } 1152 }
1147 1153
1148 { 1154 {
1149 // Back from the renderer side via history.go(). 1155 // Back from the renderer side via history.go().
1150 FrameNavigateParamsCapturer capturer(root); 1156 FrameNavigateParamsCapturer capturer(root);
1151 EXPECT_TRUE(ExecuteScript(root, "history.go(-1)")); 1157 EXPECT_TRUE(ExecuteScript(root, "history.go(-1)"));
1152 capturer.Wait(); 1158 capturer.Wait();
1153 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1159 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1154 capturer.params().transition, 1160 capturer.transition(),
1155 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1161 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1156 ui::PAGE_TRANSITION_FORWARD_BACK | 1162 ui::PAGE_TRANSITION_FORWARD_BACK |
1157 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1163 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1158 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1164 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1159 EXPECT_FALSE(capturer.details().is_in_page); 1165 EXPECT_FALSE(capturer.is_in_page());
1160 } 1166 }
1161 1167
1162 { 1168 {
1163 // Forward from the renderer side via history.go(). 1169 // Forward from the renderer side via history.go().
1164 FrameNavigateParamsCapturer capturer(root); 1170 FrameNavigateParamsCapturer capturer(root);
1165 EXPECT_TRUE(ExecuteScript(root, "history.go(1)")); 1171 EXPECT_TRUE(ExecuteScript(root, "history.go(1)"));
1166 capturer.Wait(); 1172 capturer.Wait();
1167 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1173 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1168 capturer.params().transition, 1174 capturer.transition(),
1169 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1175 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1170 ui::PAGE_TRANSITION_FORWARD_BACK | 1176 ui::PAGE_TRANSITION_FORWARD_BACK |
1171 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1177 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1172 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1178 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1173 EXPECT_FALSE(capturer.details().is_in_page); 1179 EXPECT_FALSE(capturer.is_in_page());
1174 } 1180 }
1175 1181
1176 { 1182 {
1177 // Reload from the browser side. 1183 // Reload from the browser side.
1178 FrameNavigateParamsCapturer capturer(root); 1184 FrameNavigateParamsCapturer capturer(root);
1179 shell()->web_contents()->GetController().Reload(ReloadType::NORMAL, false); 1185 shell()->web_contents()->GetController().Reload(ReloadType::NORMAL, false);
1180 capturer.Wait(); 1186 capturer.Wait();
1181 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1187 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1182 capturer.params().transition, ui::PAGE_TRANSITION_RELOAD)); 1188 capturer.transition(), ui::PAGE_TRANSITION_RELOAD));
1183 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1189 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1184 EXPECT_FALSE(capturer.details().is_in_page); 1190 EXPECT_FALSE(capturer.is_in_page());
1185 } 1191 }
1186 1192
1187 { 1193 {
1188 // Reload from the renderer side. 1194 // Reload from the renderer side.
1189 FrameNavigateParamsCapturer capturer(root); 1195 FrameNavigateParamsCapturer capturer(root);
1190 EXPECT_TRUE(ExecuteScript(root, "location.reload()")); 1196 EXPECT_TRUE(ExecuteScript(root, "location.reload()"));
1191 capturer.Wait(); 1197 capturer.Wait();
1192 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1198 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1193 capturer.params().transition, 1199 capturer.transition(),
1194 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1200 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1195 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1201 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1196 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1202 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1197 EXPECT_FALSE(capturer.details().is_in_page); 1203 EXPECT_FALSE(capturer.is_in_page());
1198 } 1204 }
1199 1205
1200 { 1206 {
1201 // location.replace(). 1207 // location.replace().
1202 // TODO(creis): Change this to be NEW_PAGE with replacement in 1208 // TODO(creis): Change this to be NEW_PAGE with replacement in
1203 // https://crbug.com/596707. 1209 // https://crbug.com/596707.
1204 FrameNavigateParamsCapturer capturer(root); 1210 FrameNavigateParamsCapturer capturer(root);
1205 GURL frame_url(embedded_test_server()->GetURL( 1211 GURL frame_url(embedded_test_server()->GetURL(
1206 "/navigation_controller/simple_page_1.html")); 1212 "/navigation_controller/simple_page_1.html"));
1207 std::string script = "location.replace('" + frame_url.spec() + "')"; 1213 std::string script = "location.replace('" + frame_url.spec() + "')";
1208 EXPECT_TRUE(ExecuteScript(root, script)); 1214 EXPECT_TRUE(ExecuteScript(root, script));
1209 capturer.Wait(); 1215 capturer.Wait();
1210 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1216 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1211 capturer.params().transition, 1217 capturer.transition(),
1212 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1218 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1213 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1219 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1214 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1220 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1215 EXPECT_FALSE(capturer.details().is_in_page); 1221 EXPECT_FALSE(capturer.is_in_page());
1216 } 1222 }
1217 1223
1218 // Now, various in-page navigations. 1224 // Now, various in-page navigations.
1219 1225
1220 { 1226 {
1221 // history.replaceState(). 1227 // history.replaceState().
1222 FrameNavigateParamsCapturer capturer(root); 1228 FrameNavigateParamsCapturer capturer(root);
1223 std::string script = 1229 std::string script =
1224 "history.replaceState({}, 'page 2', 'simple_page_2.html')"; 1230 "history.replaceState({}, 'page 2', 'simple_page_2.html')";
1225 EXPECT_TRUE(ExecuteScript(root, script)); 1231 EXPECT_TRUE(ExecuteScript(root, script));
1226 capturer.Wait(); 1232 capturer.Wait();
1227 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1233 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1228 capturer.params().transition, 1234 capturer.transition(),
1229 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1235 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1230 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1236 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1231 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1237 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1232 EXPECT_TRUE(capturer.details().is_in_page); 1238 EXPECT_TRUE(capturer.is_in_page());
1233 } 1239 }
1234 1240
1235 // Back and forward across a fragment navigation. 1241 // Back and forward across a fragment navigation.
1236 1242
1237 GURL url_links(embedded_test_server()->GetURL( 1243 GURL url_links(embedded_test_server()->GetURL(
1238 "/navigation_controller/page_with_links.html")); 1244 "/navigation_controller/page_with_links.html"));
1239 EXPECT_TRUE(NavigateToURL(shell(), url_links)); 1245 EXPECT_TRUE(NavigateToURL(shell(), url_links));
1240 std::string script = "document.getElementById('fraglink').click()"; 1246 std::string script = "document.getElementById('fraglink').click()";
1241 EXPECT_TRUE(ExecuteScript(root, script)); 1247 EXPECT_TRUE(ExecuteScript(root, script));
1242 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 1248 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1243 1249
1244 { 1250 {
1245 // Back. 1251 // Back.
1246 FrameNavigateParamsCapturer capturer(root); 1252 FrameNavigateParamsCapturer capturer(root);
1247 shell()->web_contents()->GetController().GoBack(); 1253 shell()->web_contents()->GetController().GoBack();
1248 capturer.Wait(); 1254 capturer.Wait();
1249 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1255 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1250 capturer.params().transition, 1256 capturer.transition(),
1251 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1257 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1252 ui::PAGE_TRANSITION_FORWARD_BACK | 1258 ui::PAGE_TRANSITION_FORWARD_BACK |
1253 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1259 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1254 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1260 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1255 EXPECT_TRUE(capturer.details().is_in_page); 1261 EXPECT_TRUE(capturer.is_in_page());
1256 } 1262 }
1257 1263
1258 { 1264 {
1259 // Forward. 1265 // Forward.
1260 FrameNavigateParamsCapturer capturer(root); 1266 FrameNavigateParamsCapturer capturer(root);
1261 shell()->web_contents()->GetController().GoForward(); 1267 shell()->web_contents()->GetController().GoForward();
1262 capturer.Wait(); 1268 capturer.Wait();
1263 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1269 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1264 capturer.params().transition, 1270 capturer.transition(),
1265 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1271 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1266 ui::PAGE_TRANSITION_FORWARD_BACK))); 1272 ui::PAGE_TRANSITION_FORWARD_BACK)));
1267 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1273 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1268 EXPECT_TRUE(capturer.details().is_in_page); 1274 EXPECT_TRUE(capturer.is_in_page());
1269 } 1275 }
1270 1276
1271 // Back and forward across a pushState-created navigation. 1277 // Back and forward across a pushState-created navigation.
1272 1278
1273 EXPECT_TRUE(NavigateToURL(shell(), url1)); 1279 EXPECT_TRUE(NavigateToURL(shell(), url1));
1274 script = "history.pushState({}, 'page 2', 'simple_page_2.html')"; 1280 script = "history.pushState({}, 'page 2', 'simple_page_2.html')";
1275 EXPECT_TRUE(ExecuteScript(root, script)); 1281 EXPECT_TRUE(ExecuteScript(root, script));
1276 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 1282 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1277 1283
1278 { 1284 {
1279 // Back. 1285 // Back.
1280 FrameNavigateParamsCapturer capturer(root); 1286 FrameNavigateParamsCapturer capturer(root);
1281 shell()->web_contents()->GetController().GoBack(); 1287 shell()->web_contents()->GetController().GoBack();
1282 capturer.Wait(); 1288 capturer.Wait();
1283 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1289 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1284 capturer.params().transition, 1290 capturer.transition(),
1285 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | 1291 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
1286 ui::PAGE_TRANSITION_FORWARD_BACK | 1292 ui::PAGE_TRANSITION_FORWARD_BACK |
1287 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR))); 1293 ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)));
1288 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1294 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1289 EXPECT_TRUE(capturer.details().is_in_page); 1295 EXPECT_TRUE(capturer.is_in_page());
1290 } 1296 }
1291 1297
1292 { 1298 {
1293 // Forward. 1299 // Forward.
1294 FrameNavigateParamsCapturer capturer(root); 1300 FrameNavigateParamsCapturer capturer(root);
1295 shell()->web_contents()->GetController().GoForward(); 1301 shell()->web_contents()->GetController().GoForward();
1296 capturer.Wait(); 1302 capturer.Wait();
1297 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1303 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1298 capturer.params().transition, 1304 capturer.transition(),
1299 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1305 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1300 ui::PAGE_TRANSITION_FORWARD_BACK))); 1306 ui::PAGE_TRANSITION_FORWARD_BACK)));
1301 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 1307 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
1302 EXPECT_TRUE(capturer.details().is_in_page); 1308 EXPECT_TRUE(capturer.is_in_page());
1303 } 1309 }
1304 } 1310 }
1305 1311
1306 // Verify that navigations for NAVIGATION_TYPE_SAME_PAGE are correctly 1312 // Verify that navigations for NAVIGATION_TYPE_SAME_PAGE are correctly
1307 // classified. 1313 // classified.
1308 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1314 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1309 NavigationTypeClassification_SamePage) { 1315 NavigationTypeClassification_SamePage) {
1310 GURL url1(embedded_test_server()->GetURL( 1316 GURL url1(embedded_test_server()->GetURL(
1311 "/navigation_controller/simple_page_1.html")); 1317 "/navigation_controller/simple_page_1.html"));
1312 EXPECT_TRUE(NavigateToURL(shell(), url1)); 1318 EXPECT_TRUE(NavigateToURL(shell(), url1));
1313 1319
1314 FrameTreeNode* root = 1320 FrameTreeNode* root =
1315 static_cast<WebContentsImpl*>(shell()->web_contents())-> 1321 static_cast<WebContentsImpl*>(shell()->web_contents())->
1316 GetFrameTree()->root(); 1322 GetFrameTree()->root();
1317 1323
1318 { 1324 {
1319 // Simple load. 1325 // Simple load.
1320 FrameNavigateParamsCapturer capturer(root); 1326 FrameNavigateParamsCapturer capturer(root);
1321 GURL frame_url(embedded_test_server()->GetURL( 1327 GURL frame_url(embedded_test_server()->GetURL(
1322 "/navigation_controller/simple_page_1.html")); 1328 "/navigation_controller/simple_page_1.html"));
1323 NavigateFrameToURL(root, frame_url); 1329 NavigateFrameToURL(root, frame_url);
1324 capturer.Wait(); 1330 capturer.Wait();
1325 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1331 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1326 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1332 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1327 EXPECT_EQ(NAVIGATION_TYPE_SAME_PAGE, capturer.details().type); 1333 EXPECT_EQ(NAVIGATION_TYPE_SAME_PAGE, capturer.navigation_type());
1328 } 1334 }
1329 } 1335 }
1330 1336
1331 // Verify that reloading a page with url anchor scrolls to correct position. 1337 // Verify that reloading a page with url anchor scrolls to correct position.
1332 // Disabled due to flakiness: https://crbug.com/672545. 1338 // Disabled due to flakiness: https://crbug.com/672545.
1333 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1339 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1334 DISABLED_ReloadWithUrlAnchor) { 1340 DISABLED_ReloadWithUrlAnchor) {
1335 GURL url1(embedded_test_server()->GetURL( 1341 GURL url1(embedded_test_server()->GetURL(
1336 "/navigation_controller/reload-with-url-anchor.html#d2")); 1342 "/navigation_controller/reload-with-url-anchor.html#d2"));
1337 EXPECT_TRUE(NavigateToURL(shell(), url1)); 1343 EXPECT_TRUE(NavigateToURL(shell(), url1));
(...skipping 23 matching lines...) Expand all
1361 static_cast<WebContentsImpl*>(shell()->web_contents())-> 1367 static_cast<WebContentsImpl*>(shell()->web_contents())->
1362 GetFrameTree()->root(); 1368 GetFrameTree()->root();
1363 1369
1364 { 1370 {
1365 // Load an (invalid) empty GURL. Blink will treat this as an inert commit, 1371 // Load an (invalid) empty GURL. Blink will treat this as an inert commit,
1366 // but we don't want it to show up as SAME_PAGE. 1372 // but we don't want it to show up as SAME_PAGE.
1367 FrameNavigateParamsCapturer capturer(root); 1373 FrameNavigateParamsCapturer capturer(root);
1368 NavigateFrameToURL(root, GURL()); 1374 NavigateFrameToURL(root, GURL());
1369 capturer.Wait(); 1375 capturer.Wait();
1370 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1376 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1371 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1377 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1372 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1378 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1373 } 1379 }
1374 } 1380 }
1375 1381
1376 // Verify that navigations for NAVIGATION_TYPE_NEW_SUBFRAME and 1382 // Verify that navigations for NAVIGATION_TYPE_NEW_SUBFRAME and
1377 // NAVIGATION_TYPE_AUTO_SUBFRAME are properly classified. 1383 // NAVIGATION_TYPE_AUTO_SUBFRAME are properly classified.
1378 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1384 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1379 NavigationTypeClassification_NewAndAutoSubframe) { 1385 NavigationTypeClassification_NewAndAutoSubframe) {
1380 GURL main_url(embedded_test_server()->GetURL( 1386 GURL main_url(embedded_test_server()->GetURL(
1381 "/navigation_controller/page_with_iframe.html")); 1387 "/navigation_controller/page_with_iframe.html"));
1382 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 1388 EXPECT_TRUE(NavigateToURL(shell(), main_url));
(...skipping 18 matching lines...) Expand all
1401 } 1407 }
1402 1408
1403 { 1409 {
1404 // Simple load. 1410 // Simple load.
1405 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1411 FrameNavigateParamsCapturer capturer(root->child_at(0));
1406 GURL frame_url(embedded_test_server()->GetURL( 1412 GURL frame_url(embedded_test_server()->GetURL(
1407 "/navigation_controller/simple_page_2.html")); 1413 "/navigation_controller/simple_page_2.html"));
1408 NavigateFrameToURL(root->child_at(0), frame_url); 1414 NavigateFrameToURL(root->child_at(0), frame_url);
1409 capturer.Wait(); 1415 capturer.Wait();
1410 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1416 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1411 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1417 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1412 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1418 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1413 } 1419 }
1414 1420
1415 { 1421 {
1416 // Back. 1422 // Back.
1417 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1423 FrameNavigateParamsCapturer capturer(root->child_at(0));
1418 shell()->web_contents()->GetController().GoBack(); 1424 shell()->web_contents()->GetController().GoBack();
1419 capturer.Wait(); 1425 capturer.Wait();
1420 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1426 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1421 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 1427 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
1422 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 1428 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
1423 } 1429 }
1424 1430
1425 { 1431 {
1426 // Forward. 1432 // Forward.
1427 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1433 FrameNavigateParamsCapturer capturer(root->child_at(0));
1428 shell()->web_contents()->GetController().GoForward(); 1434 shell()->web_contents()->GetController().GoForward();
1429 capturer.Wait(); 1435 capturer.Wait();
1430 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1436 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1431 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 1437 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
1432 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 1438 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
1433 } 1439 }
1434 1440
1435 { 1441 {
1436 // Simple load. 1442 // Simple load.
1437 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1443 FrameNavigateParamsCapturer capturer(root->child_at(0));
1438 GURL frame_url(embedded_test_server()->GetURL( 1444 GURL frame_url(embedded_test_server()->GetURL(
1439 "/navigation_controller/page_with_links.html")); 1445 "/navigation_controller/page_with_links.html"));
1440 NavigateFrameToURL(root->child_at(0), frame_url); 1446 NavigateFrameToURL(root->child_at(0), frame_url);
1441 capturer.Wait(); 1447 capturer.Wait();
1442 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1448 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1443 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1449 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1444 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1450 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1445 } 1451 }
1446 1452
1447 { 1453 {
1448 // Load via a fragment link click. 1454 // Load via a fragment link click.
1449 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1455 FrameNavigateParamsCapturer capturer(root->child_at(0));
1450 std::string script = "document.getElementById('fraglink').click()"; 1456 std::string script = "document.getElementById('fraglink').click()";
1451 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1457 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1452 capturer.Wait(); 1458 capturer.Wait();
1453 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1459 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1454 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1460 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1455 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1461 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1456 } 1462 }
1457 1463
1458 { 1464 {
1459 // location.assign(). 1465 // location.assign().
1460 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1466 FrameNavigateParamsCapturer capturer(root->child_at(0));
1461 GURL frame_url(embedded_test_server()->GetURL( 1467 GURL frame_url(embedded_test_server()->GetURL(
1462 "/navigation_controller/simple_page_1.html")); 1468 "/navigation_controller/simple_page_1.html"));
1463 std::string script = "location.assign('" + frame_url.spec() + "')"; 1469 std::string script = "location.assign('" + frame_url.spec() + "')";
1464 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1470 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1465 capturer.Wait(); 1471 capturer.Wait();
1466 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1472 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1467 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1473 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1468 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1474 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1469 } 1475 }
1470 1476
1471 { 1477 {
1472 // location.replace(). 1478 // location.replace().
1473 LoadCommittedCapturer capturer(root->child_at(0)); 1479 LoadCommittedCapturer capturer(root->child_at(0));
1474 GURL frame_url(embedded_test_server()->GetURL( 1480 GURL frame_url(embedded_test_server()->GetURL(
1475 "/navigation_controller/simple_page_2.html")); 1481 "/navigation_controller/simple_page_2.html"));
1476 std::string script = "location.replace('" + frame_url.spec() + "')"; 1482 std::string script = "location.replace('" + frame_url.spec() + "')";
1477 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1483 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1478 capturer.Wait(); 1484 capturer.Wait();
1479 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1485 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1480 capturer.transition_type(), ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 1486 capturer.transition_type(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
1481 } 1487 }
1482 1488
1483 { 1489 {
1484 // history.pushState(). 1490 // history.pushState().
1485 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1491 FrameNavigateParamsCapturer capturer(root->child_at(0));
1486 std::string script = 1492 std::string script =
1487 "history.pushState({}, 'page 1', 'simple_page_1.html')"; 1493 "history.pushState({}, 'page 1', 'simple_page_1.html')";
1488 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1494 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1489 capturer.Wait(); 1495 capturer.Wait();
1490 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1496 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1491 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1497 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1492 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1498 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1493 } 1499 }
1494 1500
1495 { 1501 {
1496 // history.replaceState(). 1502 // history.replaceState().
1497 LoadCommittedCapturer capturer(root->child_at(0)); 1503 LoadCommittedCapturer capturer(root->child_at(0));
1498 std::string script = 1504 std::string script =
1499 "history.replaceState({}, 'page 2', 'simple_page_2.html')"; 1505 "history.replaceState({}, 'page 2', 'simple_page_2.html')";
1500 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1506 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1501 capturer.Wait(); 1507 capturer.Wait();
1502 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1508 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 1546
1541 { 1547 {
1542 // Load the redirecting page. 1548 // Load the redirecting page.
1543 FrameNavigateParamsCapturer capturer(root); 1549 FrameNavigateParamsCapturer capturer(root);
1544 capturer.set_navigations_remaining(2); 1550 capturer.set_navigations_remaining(2);
1545 GURL frame_url(embedded_test_server()->GetURL( 1551 GURL frame_url(embedded_test_server()->GetURL(
1546 "/navigation_controller/client_redirect.html")); 1552 "/navigation_controller/client_redirect.html"));
1547 NavigateFrameToURL(root, frame_url); 1553 NavigateFrameToURL(root, frame_url);
1548 capturer.Wait(); 1554 capturer.Wait();
1549 1555
1550 std::vector<FrameNavigateParams> params = capturer.all_params(); 1556 ASSERT_EQ(2U, capturer.transitions().size());
1551 std::vector<LoadCommittedDetails> details = capturer.all_details(); 1557 ASSERT_EQ(2U, capturer.navigation_types().size());
1552 ASSERT_EQ(2U, params.size());
1553 ASSERT_EQ(2U, details.size());
1554 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1558 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1555 params[0].transition, ui::PAGE_TRANSITION_LINK)); 1559 capturer.transitions()[0], ui::PAGE_TRANSITION_LINK));
1556 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, details[0].type); 1560 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_types()[0]);
1557 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1561 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1558 params[1].transition, 1562 capturer.transitions()[1],
1559 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 1563 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
1560 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 1564 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
1561 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, details[1].type); 1565 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_types()[1]);
1562 } 1566 }
1563 } 1567 }
1564 1568
1565 // Verify that the LoadCommittedDetails::is_in_page value is properly set for 1569 // Verify that the LoadCommittedDetails::is_in_page value is properly set for
1566 // non-IN_PAGE navigations. (It's tested for IN_PAGE navigations with the 1570 // non-IN_PAGE navigations. (It's tested for IN_PAGE navigations with the
1567 // NavigationTypeClassification_InPage test.) 1571 // NavigationTypeClassification_InPage test.)
1568 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1572 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1569 LoadCommittedDetails_IsInPage) { 1573 LoadCommittedDetails_IsInPage) {
1570 GURL links_url(embedded_test_server()->GetURL( 1574 GURL links_url(embedded_test_server()->GetURL(
1571 "/navigation_controller/page_with_links.html")); 1575 "/navigation_controller/page_with_links.html"));
1572 EXPECT_TRUE(NavigateToURL(shell(), links_url)); 1576 EXPECT_TRUE(NavigateToURL(shell(), links_url));
1573 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 1577 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1574 1578
1575 FrameTreeNode* root = 1579 FrameTreeNode* root =
1576 static_cast<WebContentsImpl*>(shell()->web_contents())-> 1580 static_cast<WebContentsImpl*>(shell()->web_contents())->
1577 GetFrameTree()->root(); 1581 GetFrameTree()->root();
1578 1582
1579 { 1583 {
1580 // Do a fragment link click. 1584 // Do a fragment link click.
1581 FrameNavigateParamsCapturer capturer(root); 1585 FrameNavigateParamsCapturer capturer(root);
1582 std::string script = "document.getElementById('fraglink').click()"; 1586 std::string script = "document.getElementById('fraglink').click()";
1583 EXPECT_TRUE(ExecuteScript(root, script)); 1587 EXPECT_TRUE(ExecuteScript(root, script));
1584 capturer.Wait(); 1588 capturer.Wait();
1585 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1589 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1586 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1590 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1587 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1591 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1588 EXPECT_TRUE(capturer.details().is_in_page); 1592 EXPECT_TRUE(capturer.is_in_page());
1589 } 1593 }
1590 1594
1591 { 1595 {
1592 // Do a non-fragment link click. 1596 // Do a non-fragment link click.
1593 FrameNavigateParamsCapturer capturer(root); 1597 FrameNavigateParamsCapturer capturer(root);
1594 std::string script = "document.getElementById('thelink').click()"; 1598 std::string script = "document.getElementById('thelink').click()";
1595 EXPECT_TRUE(ExecuteScript(root, script)); 1599 EXPECT_TRUE(ExecuteScript(root, script));
1596 capturer.Wait(); 1600 capturer.Wait();
1597 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1601 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1598 capturer.params().transition, ui::PAGE_TRANSITION_LINK)); 1602 capturer.transition(), ui::PAGE_TRANSITION_LINK));
1599 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1603 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1600 EXPECT_FALSE(capturer.details().is_in_page); 1604 EXPECT_FALSE(capturer.is_in_page());
1601 } 1605 }
1602 1606
1603 // Second verse, same as the first. (But in a subframe.) 1607 // Second verse, same as the first. (But in a subframe.)
1604 1608
1605 GURL iframe_url(embedded_test_server()->GetURL( 1609 GURL iframe_url(embedded_test_server()->GetURL(
1606 "/navigation_controller/page_with_iframe.html")); 1610 "/navigation_controller/page_with_iframe.html"));
1607 EXPECT_TRUE(NavigateToURL(shell(), iframe_url)); 1611 EXPECT_TRUE(NavigateToURL(shell(), iframe_url));
1608 1612
1609 root = static_cast<WebContentsImpl*>(shell()->web_contents())-> 1613 root = static_cast<WebContentsImpl*>(shell()->web_contents())->
1610 GetFrameTree()->root(); 1614 GetFrameTree()->root();
1611 1615
1612 ASSERT_EQ(1U, root->child_count()); 1616 ASSERT_EQ(1U, root->child_count());
1613 ASSERT_NE(nullptr, root->child_at(0)); 1617 ASSERT_NE(nullptr, root->child_at(0));
1614 1618
1615 NavigateFrameToURL(root->child_at(0), links_url); 1619 NavigateFrameToURL(root->child_at(0), links_url);
1616 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 1620 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1617 1621
1618 { 1622 {
1619 // Do a fragment link click. 1623 // Do a fragment link click.
1620 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1624 FrameNavigateParamsCapturer capturer(root->child_at(0));
1621 std::string script = "document.getElementById('fraglink').click()"; 1625 std::string script = "document.getElementById('fraglink').click()";
1622 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1626 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1623 capturer.Wait(); 1627 capturer.Wait();
1624 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1628 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1625 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1629 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1626 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1630 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1627 EXPECT_TRUE(capturer.details().is_in_page); 1631 EXPECT_TRUE(capturer.is_in_page());
1628 } 1632 }
1629 1633
1630 { 1634 {
1631 // Do a non-fragment link click. 1635 // Do a non-fragment link click.
1632 FrameNavigateParamsCapturer capturer(root->child_at(0)); 1636 FrameNavigateParamsCapturer capturer(root->child_at(0));
1633 std::string script = "document.getElementById('thelink').click()"; 1637 std::string script = "document.getElementById('thelink').click()";
1634 EXPECT_TRUE(ExecuteScript(root->child_at(0), script)); 1638 EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
1635 capturer.Wait(); 1639 capturer.Wait();
1636 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 1640 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
1637 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 1641 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
1638 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 1642 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
1639 EXPECT_FALSE(capturer.details().is_in_page); 1643 EXPECT_FALSE(capturer.is_in_page());
1640 } 1644 }
1641 } 1645 }
1642 1646
1643 // Verify the tree of FrameNavigationEntries after initial about:blank commits 1647 // Verify the tree of FrameNavigationEntries after initial about:blank commits
1644 // in subframes, which should not count as real committed loads. 1648 // in subframes, which should not count as real committed loads.
1645 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1649 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1646 FrameNavigationEntry_BlankAutoSubframe) { 1650 FrameNavigationEntry_BlankAutoSubframe) {
1647 GURL about_blank_url(url::kAboutBlankURL); 1651 GURL about_blank_url(url::kAboutBlankURL);
1648 GURL main_url(embedded_test_server()->GetURL( 1652 GURL main_url(embedded_test_server()->GetURL(
1649 "/navigation_controller/simple_page_1.html")); 1653 "/navigation_controller/simple_page_1.html"));
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1912 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1916 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
1913 ->GetFrameTree() 1917 ->GetFrameTree()
1914 ->root(); 1918 ->root();
1915 1919
1916 // 1. Navigate in-page. 1920 // 1. Navigate in-page.
1917 { 1921 {
1918 FrameNavigateParamsCapturer capturer(root); 1922 FrameNavigateParamsCapturer capturer(root);
1919 std::string script = "history.pushState({}, 'foo', 'foo')"; 1923 std::string script = "history.pushState({}, 'foo', 'foo')";
1920 EXPECT_TRUE(ExecuteScript(root, script)); 1924 EXPECT_TRUE(ExecuteScript(root, script));
1921 capturer.Wait(); 1925 capturer.Wait();
1922 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 1926 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
1923 EXPECT_TRUE(capturer.details().is_in_page); 1927 EXPECT_TRUE(capturer.is_in_page());
1924 } 1928 }
1925 1929
1926 // 2. Create an iframe. 1930 // 2. Create an iframe.
1927 GURL child_url(embedded_test_server()->GetURL( 1931 GURL child_url(embedded_test_server()->GetURL(
1928 "/navigation_controller/simple_page_2.html")); 1932 "/navigation_controller/simple_page_2.html"));
1929 { 1933 {
1930 LoadCommittedCapturer capturer(shell()->web_contents()); 1934 LoadCommittedCapturer capturer(shell()->web_contents());
1931 std::string script = "var iframe = document.createElement('iframe');" 1935 std::string script = "var iframe = document.createElement('iframe');"
1932 "iframe.src = '" + child_url.spec() + "';" 1936 "iframe.src = '" + child_url.spec() + "';"
1933 "document.body.appendChild(iframe);"; 1937 "document.body.appendChild(iframe);";
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
2204 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); 2208 NavigationEntryImpl* entry = controller.GetLastCommittedEntry();
2205 2209
2206 // 2. Navigate in the subframe same-site. 2210 // 2. Navigate in the subframe same-site.
2207 GURL frame_url2(embedded_test_server()->GetURL( 2211 GURL frame_url2(embedded_test_server()->GetURL(
2208 "/navigation_controller/page_with_links.html")); 2212 "/navigation_controller/page_with_links.html"));
2209 { 2213 {
2210 FrameNavigateParamsCapturer capturer(root->child_at(0)); 2214 FrameNavigateParamsCapturer capturer(root->child_at(0));
2211 NavigateFrameToURL(root->child_at(0), frame_url2); 2215 NavigateFrameToURL(root->child_at(0), frame_url2);
2212 capturer.Wait(); 2216 capturer.Wait();
2213 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2217 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2214 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 2218 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
2215 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 2219 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
2216 } 2220 }
2217 2221
2218 // We should have created a new NavigationEntry with the same main frame URL. 2222 // We should have created a new NavigationEntry with the same main frame URL.
2219 EXPECT_EQ(2, controller.GetEntryCount()); 2223 EXPECT_EQ(2, controller.GetEntryCount());
2220 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 2224 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
2221 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); 2225 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry();
2222 EXPECT_NE(entry, entry2); 2226 EXPECT_NE(entry, entry2);
2223 EXPECT_EQ(main_url, entry2->GetURL()); 2227 EXPECT_EQ(main_url, entry2->GetURL());
2224 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get(); 2228 FrameNavigationEntry* root_entry2 = entry2->root_node()->frame_entry.get();
2225 EXPECT_EQ(main_url, root_entry2->url()); 2229 EXPECT_EQ(main_url, root_entry2->url());
(...skipping 29 matching lines...) Expand all
2255 { 2259 {
2256 FrameNavigateParamsCapturer capturer(root->child_at(1)->child_at(0)); 2260 FrameNavigateParamsCapturer capturer(root->child_at(1)->child_at(0));
2257 RenderFrameDeletedObserver deleted_observer( 2261 RenderFrameDeletedObserver deleted_observer(
2258 root->child_at(1)->child_at(0)->current_frame_host()); 2262 root->child_at(1)->child_at(0)->current_frame_host());
2259 NavigateFrameToURL(root->child_at(1)->child_at(0), bar_url); 2263 NavigateFrameToURL(root->child_at(1)->child_at(0), bar_url);
2260 // Wait for the RenderFrame to go away, if this will be cross-process. 2264 // Wait for the RenderFrame to go away, if this will be cross-process.
2261 if (AreAllSitesIsolatedForTesting()) 2265 if (AreAllSitesIsolatedForTesting())
2262 deleted_observer.WaitUntilDeleted(); 2266 deleted_observer.WaitUntilDeleted();
2263 capturer.Wait(); 2267 capturer.Wait();
2264 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2268 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2265 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 2269 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
2266 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 2270 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
2267 } 2271 }
2268 2272
2269 // We should have created a new NavigationEntry with the same main frame URL. 2273 // We should have created a new NavigationEntry with the same main frame URL.
2270 EXPECT_EQ(3, controller.GetEntryCount()); 2274 EXPECT_EQ(3, controller.GetEntryCount());
2271 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 2275 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
2272 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); 2276 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry();
2273 EXPECT_NE(entry, entry3); 2277 EXPECT_NE(entry, entry3);
2274 EXPECT_EQ(main_url, entry3->GetURL()); 2278 EXPECT_EQ(main_url, entry3->GetURL());
2275 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get(); 2279 FrameNavigationEntry* root_entry3 = entry3->root_node()->frame_entry.get();
2276 EXPECT_EQ(main_url, root_entry3->url()); 2280 EXPECT_EQ(main_url, root_entry3->url());
(...skipping 14 matching lines...) Expand all
2291 RenderFrameDeletedObserver deleted_observer( 2295 RenderFrameDeletedObserver deleted_observer(
2292 root->child_at(1)->current_frame_host()); 2296 root->child_at(1)->current_frame_host());
2293 std::string script = "var frames = document.getElementsByTagName('iframe');" 2297 std::string script = "var frames = document.getElementsByTagName('iframe');"
2294 "frames[1].src = '" + baz_url.spec() + "';"; 2298 "frames[1].src = '" + baz_url.spec() + "';";
2295 EXPECT_TRUE(ExecuteScript(root, script)); 2299 EXPECT_TRUE(ExecuteScript(root, script));
2296 // Wait for the RenderFrame to go away, if this will be cross-process. 2300 // Wait for the RenderFrame to go away, if this will be cross-process.
2297 if (AreAllSitesIsolatedForTesting()) 2301 if (AreAllSitesIsolatedForTesting())
2298 deleted_observer.WaitUntilDeleted(); 2302 deleted_observer.WaitUntilDeleted();
2299 capturer.Wait(); 2303 capturer.Wait();
2300 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2304 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2301 capturer.params().transition, ui::PAGE_TRANSITION_MANUAL_SUBFRAME)); 2305 capturer.transition(), ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
2302 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 2306 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
2303 } 2307 }
2304 2308
2305 // We should have created a new NavigationEntry with the same main frame URL. 2309 // We should have created a new NavigationEntry with the same main frame URL.
2306 EXPECT_EQ(4, controller.GetEntryCount()); 2310 EXPECT_EQ(4, controller.GetEntryCount());
2307 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex()); 2311 EXPECT_EQ(3, controller.GetLastCommittedEntryIndex());
2308 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry(); 2312 NavigationEntryImpl* entry4 = controller.GetLastCommittedEntry();
2309 EXPECT_NE(entry, entry4); 2313 EXPECT_NE(entry, entry4);
2310 EXPECT_EQ(main_url, entry4->GetURL()); 2314 EXPECT_EQ(main_url, entry4->GetURL());
2311 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get(); 2315 FrameNavigationEntry* root_entry4 = entry4->root_node()->frame_entry.get();
2312 EXPECT_EQ(main_url, root_entry4->url()); 2316 EXPECT_EQ(main_url, root_entry4->url());
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2441 EXPECT_EQ(3, controller.GetEntryCount()); 2445 EXPECT_EQ(3, controller.GetEntryCount());
2442 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 2446 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
2443 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); 2447 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry();
2444 2448
2445 // 4. Go back in the subframe. 2449 // 4. Go back in the subframe.
2446 { 2450 {
2447 FrameNavigateParamsCapturer capturer(root->child_at(0)); 2451 FrameNavigateParamsCapturer capturer(root->child_at(0));
2448 shell()->web_contents()->GetController().GoBack(); 2452 shell()->web_contents()->GetController().GoBack();
2449 capturer.Wait(); 2453 capturer.Wait();
2450 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2454 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2451 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 2455 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
2452 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 2456 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
2453 } 2457 }
2454 EXPECT_EQ(3, controller.GetEntryCount()); 2458 EXPECT_EQ(3, controller.GetEntryCount());
2455 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 2459 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
2456 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); 2460 EXPECT_EQ(entry2, controller.GetLastCommittedEntry());
2457 2461
2458 // The entry should have a FrameNavigationEntry for the subframe. 2462 // The entry should have a FrameNavigationEntry for the subframe.
2459 ASSERT_EQ(1U, entry2->root_node()->children.size()); 2463 ASSERT_EQ(1U, entry2->root_node()->children.size());
2460 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); 2464 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url());
2461 2465
2462 // 5. Go back in the subframe again to the parent page's site. 2466 // 5. Go back in the subframe again to the parent page's site.
2463 { 2467 {
2464 FrameNavigateParamsCapturer capturer(root->child_at(0)); 2468 FrameNavigateParamsCapturer capturer(root->child_at(0));
2465 shell()->web_contents()->GetController().GoBack(); 2469 shell()->web_contents()->GetController().GoBack();
2466 capturer.Wait(); 2470 capturer.Wait();
2467 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2471 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2468 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 2472 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
2469 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 2473 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
2470 } 2474 }
2471 EXPECT_EQ(3, controller.GetEntryCount()); 2475 EXPECT_EQ(3, controller.GetEntryCount());
2472 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); 2476 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex());
2473 EXPECT_EQ(entry1, controller.GetLastCommittedEntry()); 2477 EXPECT_EQ(entry1, controller.GetLastCommittedEntry());
2474 2478
2475 // The entry should have a FrameNavigationEntry for the subframe. 2479 // The entry should have a FrameNavigationEntry for the subframe.
2476 ASSERT_EQ(1U, entry1->root_node()->children.size()); 2480 ASSERT_EQ(1U, entry1->root_node()->children.size());
2477 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url()); 2481 EXPECT_EQ(frame_url, entry1->root_node()->children[0]->frame_entry->url());
2478 2482
2479 // 6. Go forward in the subframe cross-site. 2483 // 6. Go forward in the subframe cross-site.
2480 { 2484 {
2481 FrameNavigateParamsCapturer capturer(root->child_at(0)); 2485 FrameNavigateParamsCapturer capturer(root->child_at(0));
2482 shell()->web_contents()->GetController().GoForward(); 2486 shell()->web_contents()->GetController().GoForward();
2483 capturer.Wait(); 2487 capturer.Wait();
2484 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2488 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2485 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 2489 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
2486 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 2490 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
2487 } 2491 }
2488 EXPECT_EQ(3, controller.GetEntryCount()); 2492 EXPECT_EQ(3, controller.GetEntryCount());
2489 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); 2493 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex());
2490 EXPECT_EQ(entry2, controller.GetLastCommittedEntry()); 2494 EXPECT_EQ(entry2, controller.GetLastCommittedEntry());
2491 2495
2492 // The entry should have a FrameNavigationEntry for the subframe. 2496 // The entry should have a FrameNavigationEntry for the subframe.
2493 ASSERT_EQ(1U, entry2->root_node()->children.size()); 2497 ASSERT_EQ(1U, entry2->root_node()->children.size());
2494 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url()); 2498 EXPECT_EQ(frame_url2, entry2->root_node()->children[0]->frame_entry->url());
2495 2499
2496 // 7. Go forward in the subframe again, cross-site. 2500 // 7. Go forward in the subframe again, cross-site.
2497 { 2501 {
2498 FrameNavigateParamsCapturer capturer(root->child_at(0)); 2502 FrameNavigateParamsCapturer capturer(root->child_at(0));
2499 shell()->web_contents()->GetController().GoForward(); 2503 shell()->web_contents()->GetController().GoForward();
2500 capturer.Wait(); 2504 capturer.Wait();
2501 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 2505 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
2502 capturer.params().transition, ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 2506 capturer.transition(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
2503 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.details().type); 2507 EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
2504 } 2508 }
2505 EXPECT_EQ(3, controller.GetEntryCount()); 2509 EXPECT_EQ(3, controller.GetEntryCount());
2506 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); 2510 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex());
2507 EXPECT_EQ(entry3, controller.GetLastCommittedEntry()); 2511 EXPECT_EQ(entry3, controller.GetLastCommittedEntry());
2508 2512
2509 // The entry should have a FrameNavigationEntry for the subframe. 2513 // The entry should have a FrameNavigationEntry for the subframe.
2510 ASSERT_EQ(1U, entry3->root_node()->children.size()); 2514 ASSERT_EQ(1U, entry3->root_node()->children.size());
2511 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); 2515 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url());
2512 } 2516 }
2513 2517
(...skipping 1535 matching lines...) Expand 10 before | Expand all | Expand 10 after
4049 FrameNavigationEntry* subframe_entry = 4053 FrameNavigationEntry* subframe_entry =
4050 controller.GetLastCommittedEntry()->GetFrameEntry(subframe); 4054 controller.GetLastCommittedEntry()->GetFrameEntry(subframe);
4051 EXPECT_EQ(frame_url, subframe_entry->url()); 4055 EXPECT_EQ(frame_url, subframe_entry->url());
4052 4056
4053 // 3. Reload the main frame. 4057 // 3. Reload the main frame.
4054 { 4058 {
4055 FrameNavigateParamsCapturer capturer(root); 4059 FrameNavigateParamsCapturer capturer(root);
4056 controller.Reload(ReloadType::NORMAL, false); 4060 controller.Reload(ReloadType::NORMAL, false);
4057 capturer.Wait(); 4061 capturer.Wait();
4058 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 4062 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
4059 capturer.params().transition, ui::PAGE_TRANSITION_RELOAD)); 4063 capturer.transition(), ui::PAGE_TRANSITION_RELOAD));
4060 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 4064 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
4061 EXPECT_FALSE(capturer.details().is_in_page); 4065 EXPECT_FALSE(capturer.is_in_page());
4062 } 4066 }
4063 4067
4064 // 4. Add the iframe again. 4068 // 4. Add the iframe again.
4065 { 4069 {
4066 LoadCommittedCapturer capturer(shell()->web_contents()); 4070 LoadCommittedCapturer capturer(shell()->web_contents());
4067 EXPECT_TRUE(ExecuteScript(root, script)); 4071 EXPECT_TRUE(ExecuteScript(root, script));
4068 capturer.Wait(); 4072 capturer.Wait();
4069 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 4073 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
4070 capturer.transition_type(), ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 4074 capturer.transition_type(), ui::PAGE_TRANSITION_AUTO_SUBFRAME));
4071 } 4075 }
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
4375 // Now the existing page uses history.replaceState(). 4379 // Now the existing page uses history.replaceState().
4376 FrameNavigateParamsCapturer capturer(root); 4380 FrameNavigateParamsCapturer capturer(root);
4377 capturer.set_wait_for_load(false); 4381 capturer.set_wait_for_load(false);
4378 std::string script = 4382 std::string script =
4379 "history.replaceState({}, '', '" + replace_state_filename + "')"; 4383 "history.replaceState({}, '', '" + replace_state_filename + "')";
4380 EXPECT_TRUE(ExecuteScript(root, script)); 4384 EXPECT_TRUE(ExecuteScript(root, script));
4381 capturer.Wait(); 4385 capturer.Wait();
4382 4386
4383 // The fact that there was a pending entry shouldn't interfere with the 4387 // The fact that there was a pending entry shouldn't interfere with the
4384 // classification. 4388 // classification.
4385 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 4389 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
4386 EXPECT_TRUE(capturer.details().is_in_page); 4390 EXPECT_TRUE(capturer.is_in_page());
4387 } 4391 }
4388 4392
4389 ResourceDispatcherHost::Get()->SetDelegate(nullptr); 4393 ResourceDispatcherHost::Get()->SetDelegate(nullptr);
4390 } 4394 }
4391 4395
4392 } // namespace 4396 } // namespace
4393 4397
4394 IN_PROC_BROWSER_TEST_F( 4398 IN_PROC_BROWSER_TEST_F(
4395 NavigationControllerBrowserTest, 4399 NavigationControllerBrowserTest,
4396 NavigationTypeClassification_On1InPageToXWhile2Pending) { 4400 NavigationTypeClassification_On1InPageToXWhile2Pending) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
4461 EXPECT_EQ(entry_count, controller.GetEntryCount()); 4465 EXPECT_EQ(entry_count, controller.GetEntryCount());
4462 4466
4463 { 4467 {
4464 // Now the existing page uses history.pushState() while the pending entry 4468 // Now the existing page uses history.pushState() while the pending entry
4465 // for the other navigation still exists. 4469 // for the other navigation still exists.
4466 FrameNavigateParamsCapturer capturer(root); 4470 FrameNavigateParamsCapturer capturer(root);
4467 capturer.set_wait_for_load(false); 4471 capturer.set_wait_for_load(false);
4468 std::string script = "history.pushState({}, '', 'pushed')"; 4472 std::string script = "history.pushState({}, '', 'pushed')";
4469 EXPECT_TRUE(ExecuteScript(root, script)); 4473 EXPECT_TRUE(ExecuteScript(root, script));
4470 capturer.Wait(); 4474 capturer.Wait();
4471 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.details().type); 4475 EXPECT_EQ(NAVIGATION_TYPE_NEW_PAGE, capturer.navigation_type());
4472 EXPECT_TRUE(capturer.details().is_in_page); 4476 EXPECT_TRUE(capturer.is_in_page());
4473 } 4477 }
4474 4478
4475 // The in-page navigation should not have replaced the previous entry. 4479 // The in-page navigation should not have replaced the previous entry.
4476 GURL push_state_url( 4480 GURL push_state_url(
4477 embedded_test_server()->GetURL("/navigation_controller/pushed")); 4481 embedded_test_server()->GetURL("/navigation_controller/pushed"));
4478 EXPECT_EQ(entry_count + 1, controller.GetEntryCount()); 4482 EXPECT_EQ(entry_count + 1, controller.GetEntryCount());
4479 EXPECT_EQ(push_state_url, controller.GetLastCommittedEntry()->GetURL()); 4483 EXPECT_EQ(push_state_url, controller.GetLastCommittedEntry()->GetURL());
4480 EXPECT_EQ(start_url, controller.GetEntryAtIndex(0)->GetURL()); 4484 EXPECT_EQ(start_url, controller.GetEntryAtIndex(0)->GetURL());
4481 4485
4482 ResourceDispatcherHost::Get()->SetDelegate(nullptr); 4486 ResourceDispatcherHost::Get()->SetDelegate(nullptr);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
4542 ASSERT_EQ(1U, root->child_count()); 4546 ASSERT_EQ(1U, root->child_count());
4543 ASSERT_NE(nullptr, root->child_at(0)); 4547 ASSERT_NE(nullptr, root->child_at(0));
4544 4548
4545 { 4549 {
4546 // Navigate in the iframe. 4550 // Navigate in the iframe.
4547 FrameNavigateParamsCapturer capturer(root->child_at(0)); 4551 FrameNavigateParamsCapturer capturer(root->child_at(0));
4548 GURL frame_url(embedded_test_server()->GetURL( 4552 GURL frame_url(embedded_test_server()->GetURL(
4549 "/navigation_controller/simple_page_2.html")); 4553 "/navigation_controller/simple_page_2.html"));
4550 NavigateFrameToURL(root->child_at(0), frame_url); 4554 NavigateFrameToURL(root->child_at(0), frame_url);
4551 capturer.Wait(); 4555 capturer.Wait();
4552 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 4556 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
4553 } 4557 }
4554 4558
4555 { 4559 {
4556 // Go back in the iframe. 4560 // Go back in the iframe.
4557 TestNavigationObserver back_load_observer(shell()->web_contents()); 4561 TestNavigationObserver back_load_observer(shell()->web_contents());
4558 shell()->web_contents()->GetController().GoBack(); 4562 shell()->web_contents()->GetController().GoBack();
4559 back_load_observer.Wait(); 4563 back_load_observer.Wait();
4560 } 4564 }
4561 4565
4562 { 4566 {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
4639 ASSERT_EQ(1U, root->child_count()); 4643 ASSERT_EQ(1U, root->child_count());
4640 ASSERT_NE(nullptr, root->child_at(0)); 4644 ASSERT_NE(nullptr, root->child_at(0));
4641 4645
4642 { 4646 {
4643 // Navigate in the iframe. 4647 // Navigate in the iframe.
4644 FrameNavigateParamsCapturer capturer(root->child_at(0)); 4648 FrameNavigateParamsCapturer capturer(root->child_at(0));
4645 GURL frame_url(embedded_test_server()->GetURL( 4649 GURL frame_url(embedded_test_server()->GetURL(
4646 "/navigation_controller/simple_page_2.html")); 4650 "/navigation_controller/simple_page_2.html"));
4647 NavigateFrameToURL(root->child_at(0), frame_url); 4651 NavigateFrameToURL(root->child_at(0), frame_url);
4648 capturer.Wait(); 4652 capturer.Wait();
4649 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); 4653 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.navigation_type());
4650 } 4654 }
4651 4655
4652 { 4656 {
4653 // history.replaceState(). 4657 // history.replaceState().
4654 FrameNavigateParamsCapturer capturer(root); 4658 FrameNavigateParamsCapturer capturer(root);
4655 std::string script = 4659 std::string script =
4656 "history.replaceState({}, 'replaced', 'replaced')"; 4660 "history.replaceState({}, 'replaced', 'replaced')";
4657 EXPECT_TRUE(ExecuteScript(root, script)); 4661 EXPECT_TRUE(ExecuteScript(root, script));
4658 capturer.Wait(); 4662 capturer.Wait();
4659 } 4663 }
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
4794 4798
4795 // Redirect so that we can use Reload with ReloadType::ORIGINAL_REQUEST_URL. 4799 // Redirect so that we can use Reload with ReloadType::ORIGINAL_REQUEST_URL.
4796 GURL redirect_url(embedded_test_server()->GetURL( 4800 GURL redirect_url(embedded_test_server()->GetURL(
4797 "foo.com", "/navigation_controller/simple_page_1.html")); 4801 "foo.com", "/navigation_controller/simple_page_1.html"));
4798 { 4802 {
4799 std::string script = "location.replace('" + redirect_url.spec() + "');"; 4803 std::string script = "location.replace('" + redirect_url.spec() + "');";
4800 FrameNavigateParamsCapturer capturer(root); 4804 FrameNavigateParamsCapturer capturer(root);
4801 EXPECT_TRUE(ExecuteScript(shell(), script)); 4805 EXPECT_TRUE(ExecuteScript(shell(), script));
4802 capturer.Wait(); 4806 capturer.Wait();
4803 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs( 4807 EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
4804 capturer.params().transition, 4808 capturer.transition(),
4805 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK | 4809 ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
4806 ui::PAGE_TRANSITION_CLIENT_REDIRECT))); 4810 ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
4807 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.details().type); 4811 EXPECT_EQ(NAVIGATION_TYPE_EXISTING_PAGE, capturer.navigation_type());
4808 } 4812 }
4809 4813
4810 // Modify an entry in the session history and reload the original request. 4814 // Modify an entry in the session history and reload the original request.
4811 { 4815 {
4812 // We first send a replaceState() to the renderer, which will cause the 4816 // We first send a replaceState() to the renderer, which will cause the
4813 // renderer to send back a DidCommitProvisionalLoad. Immediately after, 4817 // renderer to send back a DidCommitProvisionalLoad. Immediately after,
4814 // we send a Reload request with ReloadType::ORIGINAL_REQUEST_URL (which in 4818 // we send a Reload request with ReloadType::ORIGINAL_REQUEST_URL (which in
4815 // this case is a different origin) and will also cause the renderer to 4819 // this case is a different origin) and will also cause the renderer to
4816 // commit the frame. In the end we verify that both navigations committed 4820 // commit the frame. In the end we verify that both navigations committed
4817 // and that the URLs are correct. 4821 // and that the URLs are correct.
4818 std::string script = "history.replaceState({}, '', 'foo');"; 4822 std::string script = "history.replaceState({}, '', 'foo');";
4819 root->render_manager() 4823 root->render_manager()
4820 ->current_frame_host() 4824 ->current_frame_host()
4821 ->ExecuteJavaScriptWithUserGestureForTests(base::UTF8ToUTF16(script)); 4825 ->ExecuteJavaScriptWithUserGestureForTests(base::UTF8ToUTF16(script));
4822 EXPECT_FALSE(shell()->web_contents()->IsLoading()); 4826 EXPECT_FALSE(shell()->web_contents()->IsLoading());
4823 shell()->web_contents()->GetController().Reload( 4827 shell()->web_contents()->GetController().Reload(
4824 ReloadType::ORIGINAL_REQUEST_URL, false); 4828 ReloadType::ORIGINAL_REQUEST_URL, false);
4825 EXPECT_TRUE(shell()->web_contents()->IsLoading()); 4829 EXPECT_TRUE(shell()->web_contents()->IsLoading());
4826 EXPECT_EQ(redirect_url, shell()->web_contents()->GetLastCommittedURL()); 4830 EXPECT_EQ(redirect_url, shell()->web_contents()->GetLastCommittedURL());
4827 4831
4828 // Wait until there's no more navigations. 4832 // Wait until there's no more navigations.
4829 GURL modified_url(embedded_test_server()->GetURL( 4833 GURL modified_url(embedded_test_server()->GetURL(
4830 "foo.com", "/navigation_controller/foo")); 4834 "foo.com", "/navigation_controller/foo"));
4831 FrameNavigateParamsCapturer capturer(root); 4835 FrameNavigateParamsCapturer capturer(root);
4832 capturer.set_wait_for_load(false); 4836 capturer.set_wait_for_load(false);
4833 capturer.set_navigations_remaining(2); 4837 capturer.set_navigations_remaining(2);
4834 capturer.Wait(); 4838 capturer.Wait();
4835 EXPECT_EQ(2U, capturer.all_details().size()); 4839 EXPECT_EQ(2U, capturer.urls().size());
4836 EXPECT_EQ(modified_url, capturer.all_params()[0].url); 4840 EXPECT_EQ(modified_url, capturer.urls()[0]);
4837 EXPECT_EQ(original_url, capturer.all_params()[1].url); 4841 EXPECT_EQ(original_url, capturer.urls()[1]);
4838 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL()); 4842 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL());
4839 } 4843 }
4840 4844
4841 // Make sure the renderer is still alive. 4845 // Make sure the renderer is still alive.
4842 EXPECT_TRUE(ExecuteScript(shell(), "console.log('Success');")); 4846 EXPECT_TRUE(ExecuteScript(shell(), "console.log('Success');"));
4843 } 4847 }
4844 4848
4845 // This test shows that the initial "about:blank" URL is elided from the 4849 // This test shows that the initial "about:blank" URL is elided from the
4846 // navigation history of a subframe when it is loaded. 4850 // navigation history of a subframe when it is loaded.
4847 // 4851 //
(...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after
6302 // OnMessageReceived function; this is the simplest way to disambiguate. 6306 // OnMessageReceived function; this is the simplest way to disambiguate.
6303 class : public WebContentsObserver { 6307 class : public WebContentsObserver {
6304 public: 6308 public:
6305 using Callback = base::Callback<bool()>; 6309 using Callback = base::Callback<bool()>;
6306 6310
6307 using WebContentsObserver::Observe; 6311 using WebContentsObserver::Observe;
6308 6312
6309 void SetCallback(Callback callback) { callback_ = callback; } 6313 void SetCallback(Callback callback) { callback_ = callback; }
6310 6314
6311 private: 6315 private:
6312 void DidNavigateAnyFrame(RenderFrameHost* render_frame_host, 6316 void DidFinishNavigation(NavigationHandle* navigation_handle) override {
6313 const LoadCommittedDetails& details,
6314 const FrameNavigateParams& params) override {
6315 DCHECK_CURRENTLY_ON(BrowserThread::UI); 6317 DCHECK_CURRENTLY_ON(BrowserThread::UI);
6318 if (!navigation_handle->HasCommitted())
6319 return;
6316 6320
6317 // Resume the message. 6321 // Resume the message.
6318 callback_.Run(); 6322 callback_.Run();
6319 } 6323 }
6320 6324
6321 Callback callback_; 6325 Callback callback_;
6322 } web_contents_observer_; 6326 } web_contents_observer_;
6323 6327
6324 RenderFrameHost* render_frame_host_; 6328 RenderFrameHost* render_frame_host_;
6325 6329
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
6727 NavigationHandleCommitObserver handle_observer(shell()->web_contents(), 6731 NavigationHandleCommitObserver handle_observer(shell()->web_contents(),
6728 kFragmentURL); 6732 kFragmentURL);
6729 EXPECT_TRUE(NavigateToURL(shell(), kFragmentURL)); 6733 EXPECT_TRUE(NavigateToURL(shell(), kFragmentURL));
6730 6734
6731 EXPECT_TRUE(handle_observer.has_committed()); 6735 EXPECT_TRUE(handle_observer.has_committed());
6732 EXPECT_TRUE(handle_observer.was_same_page()); 6736 EXPECT_TRUE(handle_observer.was_same_page());
6733 EXPECT_FALSE(handle_observer.was_renderer_initiated()); 6737 EXPECT_FALSE(handle_observer.was_renderer_initiated());
6734 } 6738 }
6735 6739
6736 } // namespace content 6740 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698