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

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

Powered by Google App Engine
This is Rietveld 408576698