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