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

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

Issue 2742923002: Use SameDocument term in tests instead of SamePage. (Closed)
Patch Set: Fixed compilation Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/media/session/media_session_service_impl_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/navigation_controller_impl.h" 5 #include "content/browser/frame_host/navigation_controller_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 6020 matching lines...) Expand 10 before | Expand all | Expand 10 after
6031 // being reused. 6031 // being reused.
6032 EXPECT_TRUE(ExecuteScript(root, kAddNamedFrameScript)); 6032 EXPECT_TRUE(ExecuteScript(root, kAddNamedFrameScript));
6033 EXPECT_EQ(1U, root->child_count()); 6033 EXPECT_EQ(1U, root->child_count());
6034 EXPECT_EQ(1U, nav_entry->root_node()->children.size()); 6034 EXPECT_EQ(1U, nav_entry->root_node()->children.size());
6035 EXPECT_EQ(tree_node, nav_entry->root_node()->children[0]); 6035 EXPECT_EQ(tree_node, nav_entry->root_node()->children[0]);
6036 6036
6037 EXPECT_TRUE(ExecuteScript(root, kRemoveFrameScript)); 6037 EXPECT_TRUE(ExecuteScript(root, kRemoveFrameScript));
6038 EXPECT_EQ(0U, root->child_count()); 6038 EXPECT_EQ(0U, root->child_count());
6039 } 6039 }
6040 6040
6041 // Test that navigations classified as SAME_PAGE properly update all the 6041 // Test that navigations classified as same document navigaiton properly update
Charlie Reis 2017/03/10 21:01:38 We should leave this as SAME_PAGE. (See below for
Eugene But (OOO till 7-30) 2017/03/10 21:41:59 Done.
6042 // members of FrameNavigationEntry. If not, it is possible to get a mismatch 6042 // all the members of FrameNavigationEntry. If not, it is possible to get a
6043 // between the origin and URL of a document as seen in 6043 // mismatch between the origin and URL of a document as seen in
6044 // https://crbug.com/630103. 6044 // https://crbug.com/630103.
6045 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 6045 IN_PROC_BROWSER_TEST_F(
6046 EnsureSamePageNavigationUpdatesFrameNavigationEntry) { 6046 NavigationControllerBrowserTest,
Charlie Reis 2017/03/10 21:01:38 We should leave the test name here as is, unless w
Eugene But (OOO till 7-30) 2017/03/10 21:41:59 Done.
6047 EnsureSameDocumentNavigationUpdatesFrameNavigationEntry) {
6047 WebContentsImpl* web_contents = 6048 WebContentsImpl* web_contents =
6048 static_cast<WebContentsImpl*>(shell()->web_contents()); 6049 static_cast<WebContentsImpl*>(shell()->web_contents());
6049 FrameTreeNode* root = web_contents->GetFrameTree()->root(); 6050 FrameTreeNode* root = web_contents->GetFrameTree()->root();
6050 6051
6051 // Navigate to a simple page and then perform an in-page navigation. 6052 // Navigate to a simple page and then perform a fragment change navigation.
6052 GURL start_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 6053 GURL start_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
6053 EXPECT_TRUE(NavigateToURL(shell(), start_url)); 6054 EXPECT_TRUE(NavigateToURL(shell(), start_url));
6054 6055
6055 GURL same_page_url( 6056 GURL fragment_change_url(
6056 embedded_test_server()->GetURL("a.com", "/title1.html#foo")); 6057 embedded_test_server()->GetURL("a.com", "/title1.html#foo"));
6057 EXPECT_TRUE(NavigateToURL(shell(), same_page_url)); 6058 EXPECT_TRUE(NavigateToURL(shell(), fragment_change_url));
6058 EXPECT_EQ(2, web_contents->GetController().GetEntryCount()); 6059 EXPECT_EQ(2, web_contents->GetController().GetEntryCount());
6059 6060
6060 // Replace the URL of the current NavigationEntry with one that will cause 6061 // Replace the URL of the current NavigationEntry with one that will cause
6061 // a server redirect when loaded. 6062 // a server redirect when loaded.
6062 { 6063 {
6063 GURL redirect_dest_url( 6064 GURL redirect_dest_url(
6064 embedded_test_server()->GetURL("sub.a.com", "/simple_page.html")); 6065 embedded_test_server()->GetURL("sub.a.com", "/simple_page.html"));
6065 TestNavigationObserver observer(web_contents); 6066 TestNavigationObserver observer(web_contents);
6066 std::string script = "history.replaceState({}, '', '/server-redirect?" + 6067 std::string script = "history.replaceState({}, '', '/server-redirect?" +
6067 redirect_dest_url.spec() + "')"; 6068 redirect_dest_url.spec() + "')";
6068 EXPECT_TRUE(ExecuteScript(root, script)); 6069 EXPECT_TRUE(ExecuteScript(root, script));
6069 observer.Wait(); 6070 observer.Wait();
6070 } 6071 }
6071 6072
6072 // Simulate the user hitting Enter in the omnibox without changing the URL. 6073 // Simulate the user hitting Enter in the omnibox without changing the URL.
6073 { 6074 {
6074 TestNavigationObserver observer(web_contents); 6075 TestNavigationObserver observer(web_contents);
6075 web_contents->GetController().LoadURL(web_contents->GetLastCommittedURL(), 6076 web_contents->GetController().LoadURL(web_contents->GetLastCommittedURL(),
6076 Referrer(), ui::PAGE_TRANSITION_LINK, 6077 Referrer(), ui::PAGE_TRANSITION_LINK,
6077 std::string()); 6078 std::string());
6078 observer.Wait(); 6079 observer.Wait();
6079 } 6080 }
6080 6081
6081 // Prior to fixing the issue, the above omnibox navigation (which is 6082 // Prior to fixing the issue, the above omnibox navigation (which is
6082 // classified as SAME_PAGE) was leaving the FrameNavigationEntry with the 6083 // classified as same document) was leaving the FrameNavigationEntry with the
Charlie Reis 2017/03/10 21:01:38 No, this needs to stay SAME_PAGE for now, because
Eugene But (OOO till 7-30) 2017/03/10 21:41:59 Done.
6083 // same document sequence number as the previous entry but updates the URL. 6084 // same document sequence number as the previous entry but updates the URL.
6084 // Doing a back session history navigation now will cause the browser to 6085 // Doing a back session history navigation now will cause the browser to
6085 // consider it as in-page because of this matching document sequence number 6086 // consider it as same document because of this matching document sequence
6086 // and lead to a mismatch of origin and URL in the renderer process. 6087 // number and lead to a mismatch of origin and URL in the renderer process.
6087 { 6088 {
6088 TestNavigationObserver observer(web_contents); 6089 TestNavigationObserver observer(web_contents);
6089 web_contents->GetController().GoBack(); 6090 web_contents->GetController().GoBack();
6090 observer.Wait(); 6091 observer.Wait();
6091 } 6092 }
6092 6093
6093 // Verify the expected origin through JavaScript. It also has the additional 6094 // Verify the expected origin through JavaScript. It also has the additional
6094 // verification of the process also being still alive. 6095 // verification of the process also being still alive.
6095 std::string origin; 6096 std::string origin;
6096 EXPECT_TRUE(ExecuteScriptAndExtractString( 6097 EXPECT_TRUE(ExecuteScriptAndExtractString(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
6144 return true; 6145 return true;
6145 } 6146 }
6146 6147
6147 GURL url_; 6148 GURL url_;
6148 WebContentsImpl* web_contents_; 6149 WebContentsImpl* web_contents_;
6149 6150
6150 DISALLOW_COPY_AND_ASSIGN(GoBackAndCommitFilter); 6151 DISALLOW_COPY_AND_ASSIGN(GoBackAndCommitFilter);
6151 }; 6152 };
6152 6153
6153 // Test which simulates a race condition between a cross-origin, same-process 6154 // Test which simulates a race condition between a cross-origin, same-process
6154 // navigation and a same page session history navigation. When such a race 6155 // navigation and a same document session history navigation. When such a race
6155 // occurs, the renderer will commit the cross-origin navigation, updating its 6156 // occurs, the renderer will commit the cross-origin navigation, updating its
6156 // version of the current document sequence number, and will send an IPC to the 6157 // version of the current document sequence number, and will send an IPC to the
6157 // browser process. The session history navigation comes after the commit for 6158 // browser process. The session history navigation comes after the commit for
6158 // the cross-origin navigation and updates the URL, but not the origin of the 6159 // the cross-origin navigation and updates the URL, but not the origin of the
6159 // document. This results in mismatch between the two and causes the renderer 6160 // document. This results in mismatch between the two and causes the renderer
6160 // process to be killed. See https://crbug.com/630103. 6161 // process to be killed. See https://crbug.com/630103.
6161 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 6162 IN_PROC_BROWSER_TEST_F(
6162 RaceCrossOriginNavigationAndSamePageHistoryNavigation) { 6163 NavigationControllerBrowserTest,
6164 RaceCrossOriginNavigationAndSameDocumentHistoryNavigation) {
6163 WebContentsImpl* web_contents = 6165 WebContentsImpl* web_contents =
6164 static_cast<WebContentsImpl*>(shell()->web_contents()); 6166 static_cast<WebContentsImpl*>(shell()->web_contents());
6165 FrameTreeNode* root = web_contents->GetFrameTree()->root(); 6167 FrameTreeNode* root = web_contents->GetFrameTree()->root();
6166 6168
6167 // Navigate to a simple page and then perform an in-page navigation. 6169 // Navigate to a simple page and then perform a same document navigation.
6168 GURL start_url(embedded_test_server()->GetURL("a.com", "/title1.html")); 6170 GURL start_url(embedded_test_server()->GetURL("a.com", "/title1.html"));
6169 EXPECT_TRUE(NavigateToURL(shell(), start_url)); 6171 EXPECT_TRUE(NavigateToURL(shell(), start_url));
6170 6172
6171 GURL same_page_url( 6173 GURL same_document_url(
6172 embedded_test_server()->GetURL("a.com", "/title1.html#foo")); 6174 embedded_test_server()->GetURL("a.com", "/title1.html#foo"));
6173 EXPECT_TRUE(NavigateToURL(shell(), same_page_url)); 6175 EXPECT_TRUE(NavigateToURL(shell(), same_document_url));
6174 EXPECT_EQ(2, web_contents->GetController().GetEntryCount()); 6176 EXPECT_EQ(2, web_contents->GetController().GetEntryCount());
6175 6177
6176 // Create a GoBackAndCommitFilter, which will delay the commit IPC for a 6178 // Create a GoBackAndCommitFilter, which will delay the commit IPC for a
6177 // cross-origin, same process navigation and will perform a GoBack. 6179 // cross-origin, same process navigation and will perform a GoBack.
6178 GURL cross_origin_url( 6180 GURL cross_origin_url(
6179 embedded_test_server()->GetURL("suborigin.a.com", "/title2.html")); 6181 embedded_test_server()->GetURL("suborigin.a.com", "/title2.html"));
6180 scoped_refptr<GoBackAndCommitFilter> filter = 6182 scoped_refptr<GoBackAndCommitFilter> filter =
6181 new GoBackAndCommitFilter(cross_origin_url, web_contents); 6183 new GoBackAndCommitFilter(cross_origin_url, web_contents);
6182 web_contents->GetMainFrame()->GetProcess()->AddFilter(filter.get()); 6184 web_contents->GetMainFrame()->GetProcess()->AddFilter(filter.get());
6183 6185
(...skipping 23 matching lines...) Expand all
6207 web_contents->GetController().GoBack(); 6209 web_contents->GetController().GoBack();
6208 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); 6210 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
6209 EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex()); 6211 EXPECT_EQ(1, web_contents->GetController().GetLastCommittedEntryIndex());
6210 EXPECT_EQ(3, web_contents->GetController().GetEntryCount()); 6212 EXPECT_EQ(3, web_contents->GetController().GetEntryCount());
6211 6213
6212 // Verify the expected origin through JavaScript. It also has the additional 6214 // Verify the expected origin through JavaScript. It also has the additional
6213 // verification of the process also being still alive. 6215 // verification of the process also being still alive.
6214 EXPECT_TRUE(ExecuteScriptAndExtractString( 6216 EXPECT_TRUE(ExecuteScriptAndExtractString(
6215 web_contents, "domAutomationController.send(document.origin)", 6217 web_contents, "domAutomationController.send(document.origin)",
6216 &origin)); 6218 &origin));
6217 EXPECT_EQ(same_page_url.GetOrigin().spec(), origin + "/"); 6219 EXPECT_EQ(same_document_url.GetOrigin().spec(), origin + "/");
6218 } else { 6220 } else {
6219 // Wait for the back navigation to commit as well. 6221 // Wait for the back navigation to commit as well.
6220 history_commit_observer.Wait(); 6222 history_commit_observer.Wait();
6221 EXPECT_EQ(start_url, web_contents->GetLastCommittedURL()); 6223 EXPECT_EQ(start_url, web_contents->GetLastCommittedURL());
6222 EXPECT_EQ(0, web_contents->GetController().GetLastCommittedEntryIndex()); 6224 EXPECT_EQ(0, web_contents->GetController().GetLastCommittedEntryIndex());
6223 EXPECT_EQ(3, web_contents->GetController().GetEntryCount()); 6225 EXPECT_EQ(3, web_contents->GetController().GetEntryCount());
6224 6226
6225 // Verify the expected origin through JavaScript. It also has the additional 6227 // Verify the expected origin through JavaScript. It also has the additional
6226 // verification of the process also being still alive. 6228 // verification of the process also being still alive.
6227 std::string origin; 6229 std::string origin;
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
6669 was_same_page_ = handle->IsSameDocument(); 6671 was_same_page_ = handle->IsSameDocument();
6670 was_renderer_initiated_ = handle->IsRendererInitiated(); 6672 was_renderer_initiated_ = handle->IsRendererInitiated();
6671 } 6673 }
6672 6674
6673 const GURL url_; 6675 const GURL url_;
6674 bool has_committed_; 6676 bool has_committed_;
6675 bool was_same_page_; 6677 bool was_same_page_;
6676 bool was_renderer_initiated_; 6678 bool was_renderer_initiated_;
6677 }; 6679 };
6678 6680
6679 // Test that a same-page navigation does not lead to the deletion of the 6681 // Test that a same document navigation does not lead to the deletion of the
6680 // NavigationHandle for an ongoing different page navigation. 6682 // NavigationHandle for an ongoing different document navigation.
6681 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 6683 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
6682 SamePageNavigationDoesntDeleteNavigationHandle) { 6684 SameDocumentNavigationDoesntDeleteNavigationHandle) {
6683 const GURL kURL1 = embedded_test_server()->GetURL("/title1.html"); 6685 const GURL kURL1 = embedded_test_server()->GetURL("/title1.html");
6684 const GURL kPushStateURL = 6686 const GURL kPushStateURL =
6685 embedded_test_server()->GetURL("/title1.html#fragment"); 6687 embedded_test_server()->GetURL("/title1.html#fragment");
6686 const GURL kURL2 = embedded_test_server()->GetURL("/title2.html"); 6688 const GURL kURL2 = embedded_test_server()->GetURL("/title2.html");
6687 6689
6688 // Navigate to the initial page. 6690 // Navigate to the initial page.
6689 EXPECT_TRUE(NavigateToURL(shell(), kURL1)); 6691 EXPECT_TRUE(NavigateToURL(shell(), kURL1));
6690 RenderFrameHostImpl* main_frame = 6692 RenderFrameHostImpl* main_frame =
6691 static_cast<WebContentsImpl*>(shell()->web_contents())->GetMainFrame(); 6693 static_cast<WebContentsImpl*>(shell()->web_contents())->GetMainFrame();
6692 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 6694 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
6742 shell()->web_contents()->GetController().GetLastCommittedEntry(); 6744 shell()->web_contents()->GetController().GetLastCommittedEntry();
6743 ASSERT_TRUE(last_committed); 6745 ASSERT_TRUE(last_committed);
6744 EXPECT_EQ(kURL2, last_committed->GetURL()); 6746 EXPECT_EQ(kURL2, last_committed->GetURL());
6745 6747
6746 EXPECT_TRUE(navigation_observer.has_committed()); 6748 EXPECT_TRUE(navigation_observer.has_committed());
6747 EXPECT_FALSE(navigation_observer.was_same_page()); 6749 EXPECT_FALSE(navigation_observer.was_same_page());
6748 EXPECT_FALSE(navigation_observer.was_renderer_initiated()); 6750 EXPECT_FALSE(navigation_observer.was_renderer_initiated());
6749 6751
6750 } 6752 }
6751 6753
6752 // Tests that a same-page browser-initiated navigation is properly reported by 6754 // Tests that a same document browser-initiated navigation is properly reported
6753 // the NavigationHandle. 6755 // by the NavigationHandle.
6754 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 6756 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
6755 SamePageBrowserInitiated) { 6757 SameDocumentBrowserInitiated) {
6756 const GURL kURL = embedded_test_server()->GetURL("/title1.html"); 6758 const GURL kURL = embedded_test_server()->GetURL("/title1.html");
6757 const GURL kFragmentURL = 6759 const GURL kFragmentURL =
6758 embedded_test_server()->GetURL("/title1.html#fragment"); 6760 embedded_test_server()->GetURL("/title1.html#fragment");
6759 6761
6760 // Navigate to the initial page. 6762 // Navigate to the initial page.
6761 EXPECT_TRUE(NavigateToURL(shell(), kURL)); 6763 EXPECT_TRUE(NavigateToURL(shell(), kURL));
6762 6764
6763 // Do a browser-initiated fragment navigation. 6765 // Do a browser-initiated fragment navigation.
6764 NavigationHandleCommitObserver handle_observer(shell()->web_contents(), 6766 NavigationHandleCommitObserver handle_observer(shell()->web_contents(),
6765 kFragmentURL); 6767 kFragmentURL);
(...skipping 24 matching lines...) Expand all
6790 6792
6791 // Do a 204 navigation. 6793 // Do a 204 navigation.
6792 EXPECT_FALSE(NavigateToURL(shell(), kURL204)); 6794 EXPECT_FALSE(NavigateToURL(shell(), kURL204));
6793 6795
6794 entry = controller.GetLastCommittedEntry(); 6796 entry = controller.GetLastCommittedEntry();
6795 EXPECT_EQ(kURL, entry->GetURL()); 6797 EXPECT_EQ(kURL, entry->GetURL());
6796 EXPECT_EQ(1, controller.GetEntryCount()); 6798 EXPECT_EQ(1, controller.GetEntryCount());
6797 } 6799 }
6798 6800
6799 } // namespace content 6801 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/media/session/media_session_service_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698