Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |