Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/frame_host/navigation_controller_impl.h" | 5 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 6891 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6902 | 6902 |
| 6903 // Verify that the extra header was NOT present for the subresource. | 6903 // Verify that the extra header was NOT present for the subresource. |
| 6904 const net::test_server::HttpRequest* image_request = | 6904 const net::test_server::HttpRequest* image_request = |
| 6905 FindAccumulatedRequest(image_url); | 6905 FindAccumulatedRequest(image_url); |
| 6906 ASSERT_TRUE(image_request); | 6906 ASSERT_TRUE(image_request); |
| 6907 EXPECT_THAT(image_request->headers, | 6907 EXPECT_THAT(image_request->headers, |
| 6908 testing::Not(testing::Contains( | 6908 testing::Not(testing::Contains( |
| 6909 testing::Key("X-ExtraHeadersVsSubresources")))); | 6909 testing::Key("X-ExtraHeadersVsSubresources")))); |
| 6910 } | 6910 } |
| 6911 | 6911 |
| 6912 // Test that a same-page navigation does not lead to the deletion of the | |
| 6913 // NavigationHandle for an ongoing different page navigation. | |
| 6914 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | |
| 6915 SamePageNavigationDoesntDeleteNavigationHandle) { | |
| 6916 const GURL kURL1 = embedded_test_server()->GetURL("/title1.html"); | |
| 6917 const GURL kPushStateURL = | |
| 6918 embedded_test_server()->GetURL("/title1.html#fragment"); | |
| 6919 const GURL kURL2 = embedded_test_server()->GetURL("/title2.html"); | |
| 6920 | |
| 6921 // Navigate to the initial page. | |
| 6922 EXPECT_TRUE(NavigateToURL(shell(), kURL1)); | |
| 6923 RenderFrameHostImpl* main_frame = | |
| 6924 static_cast<WebContentsImpl*>(shell()->web_contents())->GetMainFrame(); | |
| 6925 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | |
| 6926 ->GetFrameTree() | |
| 6927 ->root(); | |
| 6928 EXPECT_FALSE(main_frame->navigation_handle()); | |
| 6929 EXPECT_FALSE(root->navigation_request()); | |
| 6930 | |
| 6931 // Start navigating to the second page. | |
| 6932 TestNavigationManager manager(shell()->web_contents(), kURL2); | |
| 6933 shell()->web_contents()->GetController().LoadURL( | |
| 6934 kURL2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); | |
| 6935 EXPECT_TRUE(manager.WaitForRequestStart()); | |
| 6936 | |
| 6937 // This should create a NavigationHandle. | |
| 6938 if (IsBrowserSideNavigationEnabled()) { | |
| 6939 EXPECT_TRUE(root->navigation_request()); | |
| 6940 } else { | |
| 6941 EXPECT_TRUE(main_frame->navigation_handle()); | |
| 6942 } | |
| 6943 | |
| 6944 // The current page does a PushState. | |
| 6945 std::string push_state = | |
| 6946 "var stateObj = {}; history.pushState(stateObj, \"title 1\", \"" + | |
| 6947 kPushStateURL.spec() + "\");"; | |
| 6948 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), push_state)); | |
| 6949 NavigationEntry* last_committed = | |
| 6950 shell()->web_contents()->GetController().GetLastCommittedEntry(); | |
| 6951 ASSERT_TRUE(last_committed); | |
| 6952 EXPECT_EQ(kPushStateURL, last_committed->GetURL()); | |
| 6953 | |
| 6954 // This shouldn't affect the ongoing navigation. | |
| 6955 if (IsBrowserSideNavigationEnabled()) { | |
| 6956 EXPECT_TRUE(root->navigation_request()); | |
| 6957 } else { | |
| 6958 EXPECT_TRUE(main_frame->navigation_handle()); | |
| 6959 } | |
| 6960 | |
| 6961 // Let the navigation finish. It should commit successfully. | |
| 6962 manager.WaitForNavigationFinished(); | |
| 6963 last_committed = | |
| 6964 shell()->web_contents()->GetController().GetLastCommittedEntry(); | |
| 6965 ASSERT_TRUE(last_committed); | |
| 6966 EXPECT_EQ(kURL2, last_committed->GetURL()); | |
| 6967 } | |
| 6968 | |
| 6969 class NavigationHandleCommitObserver : public WebContentsObserver { | |
| 6970 public: | |
| 6971 NavigationHandleCommitObserver(WebContents* web_contents, const GURL& url) | |
| 6972 : WebContentsObserver(web_contents), | |
| 6973 url_(url), | |
| 6974 has_committed_(false), | |
| 6975 was_same_page_(false), | |
| 6976 was_renderer_initiated_(false) {} | |
| 6977 | |
| 6978 bool has_committed() const { return has_committed_; } | |
| 6979 bool was_same_page() const { return was_same_page_; } | |
| 6980 bool was_renderer_initiated() const { return was_renderer_initiated_; } | |
| 6981 | |
| 6982 private: | |
| 6983 void DidFinishNavigation(NavigationHandle* handle) override { | |
| 6984 if (handle->GetURL() != url_) | |
| 6985 return; | |
| 6986 has_committed_ = true; | |
| 6987 was_same_page_ = handle->IsSamePage(); | |
| 6988 was_renderer_initiated_ = handle->IsRendererInitiated(); | |
| 6989 } | |
| 6990 | |
| 6991 const GURL url_; | |
| 6992 bool has_committed_; | |
| 6993 bool was_same_page_; | |
| 6994 bool was_renderer_initiated_; | |
| 6995 }; | |
| 6996 | |
| 6997 // Tests that a same-page browser-initiated navigation is properly rported by | |
|
Charlie Reis
2016/11/04 17:30:53
nit: reported
clamy
2016/11/07 14:10:51
Done.
| |
| 6998 // the NavigationHandle. | |
| 6999 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | |
| 7000 SamePageBrowserInitiated) { | |
| 7001 const GURL kURL = embedded_test_server()->GetURL("/title1.html"); | |
| 7002 const GURL kFragmentURL = | |
| 7003 embedded_test_server()->GetURL("/title1.html#fragment"); | |
| 7004 | |
| 7005 // Navigate to the initial page. | |
| 7006 EXPECT_TRUE(NavigateToURL(shell(), kURL)); | |
| 7007 | |
| 7008 // Do a browser-initiated fragment navigation. | |
| 7009 NavigationHandleCommitObserver handle_observer(shell()->web_contents(), | |
| 7010 kFragmentURL); | |
| 7011 EXPECT_TRUE(NavigateToURL(shell(), kFragmentURL)); | |
| 7012 | |
| 7013 EXPECT_TRUE(handle_observer.has_committed()); | |
| 7014 EXPECT_TRUE(handle_observer.was_same_page()); | |
| 7015 EXPECT_FALSE(handle_observer.was_renderer_initiated()); | |
| 7016 } | |
| 7017 | |
| 6912 } // namespace content | 7018 } // namespace content |
| OLD | NEW |