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

Unified Diff: content/browser/frame_host/navigation_controller_impl_unittest.cc

Issue 2050423002: Account for origin corner cases during AutoSubframe navigations. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unit tests Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/frame_host/navigation_controller_impl_browsertest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/frame_host/navigation_controller_impl_unittest.cc
diff --git a/content/browser/frame_host/navigation_controller_impl_unittest.cc b/content/browser/frame_host/navigation_controller_impl_unittest.cc
index 5dfa8cfb1d9b91160ea414ad7389e0926a3de9e2..a8a0b15472501513ee6f388db4c9d3f9df67e3bb 100644
--- a/content/browser/frame_host/navigation_controller_impl_unittest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_unittest.cc
@@ -2706,14 +2706,21 @@ TEST_F(NavigationControllerTest, InPage) {
// Finally, navigate to an unrelated URL to make sure in_page is not sticky.
const GURL url3("http://bar");
- params.page_id = 2;
- params.nav_entry_id = 0;
- params.did_create_new_entry = true;
- params.url = url3;
+ FrameHostMsg_DidCommitProvisionalLoad_Params bar_params;
+ bar_params.page_id = 2;
+ bar_params.nav_entry_id = 0;
+ bar_params.did_create_new_entry = true;
+ bar_params.url = url3;
+ bar_params.transition = ui::PAGE_TRANSITION_LINK;
+ bar_params.should_update_history = false;
+ bar_params.gesture = NavigationGestureUser;
+ bar_params.method = "GET";
+ bar_params.page_state = PageState::CreateFromURL(url3);
+ bar_params.was_within_same_page = false;
navigation_entry_committed_counter_ = 0;
main_test_rfh()->SendRendererInitiatedNavigationRequest(url3, false);
main_test_rfh()->PrepareForCommit();
- main_test_rfh()->SendNavigateWithParams(&params);
+ main_test_rfh()->SendNavigateWithParams(&bar_params);
EXPECT_EQ(1U, navigation_entry_committed_counter_);
navigation_entry_committed_counter_ = 0;
EXPECT_FALSE(observer.details().is_in_page);
@@ -3760,9 +3767,13 @@ TEST_F(NavigationControllerTest, DontShowRendererURLInNewTabAfterCommit) {
// Tests that IsInPageNavigation returns appropriate results. Prevents
// regression for bug 1126349.
-TEST_F(NavigationControllerTest, IsInPageNavigation) {
+TEST_F(NavigationControllerTest, IsInPageNavigationFromAboutBlank) {
NavigationControllerImpl& controller = controller_impl();
- const GURL url("http://www.google.com/home.html");
+ const GURL google_url("http://www.google.com/home.html");
+ const url::Origin google_origin(google_url);
+
+ const GURL foo_url("http://www.foo.com");
+ const url::Origin foo_origin(foo_url);
// If the renderer claims it performed an in-page navigation from
// about:blank, trust the renderer.
@@ -3773,16 +3784,39 @@ TEST_F(NavigationControllerTest, IsInPageNavigation) {
// information to identify that case currently.
// TODO(creis): Update this to verify that the origin of the about:blank page
// matches if the URL doesn't look same-origin.
+
+ // Navigate to about:blank, with an empty/unique origin.
const GURL blank_url(url::kAboutBlankURL);
- const url::Origin blank_origin;
main_test_rfh()->NavigateAndCommitRendererInitiated(0, true, blank_url);
- EXPECT_TRUE(controller.IsURLInPageNavigation(url, url::Origin(url), true,
+
+ // A web URL cannot be in-page if the url::origin doesn't match.
+ MockRenderProcessHost* process = main_test_rfh()->GetProcess();
+ int expected_bad_messages = 0;
+ EXPECT_EQ(expected_bad_messages, process->bad_msg_count());
+ EXPECT_FALSE(controller.IsURLInPageNavigation(
+ google_url, google_origin, true, main_test_rfh()));
+ EXPECT_EQ(++expected_bad_messages, process->bad_msg_count());
+
+ // A web URL can in-page with about:blank if the url::Origin matches.
+ main_test_rfh()->frame_tree_node()->SetCurrentOrigin(google_origin, false);
+ EXPECT_TRUE(controller.IsURLInPageNavigation(google_url, google_origin, true,
main_test_rfh()));
+ EXPECT_EQ(expected_bad_messages, process->bad_msg_count());
+
+ // A different web URL cannot be in-page with about:blank.
+ EXPECT_FALSE(controller.IsURLInPageNavigation(
+ foo_url, foo_origin, true, main_test_rfh()));
+ EXPECT_EQ(++expected_bad_messages, process->bad_msg_count());
+}
+
+TEST_F(NavigationControllerTest, IsInPageNavigation) {
+ NavigationControllerImpl& controller = controller_impl();
+ const GURL url("http://www.google.com/home.html");
// Navigate to URL with no refs.
- main_test_rfh()->NavigateAndCommitRendererInitiated(0, false, url);
+ main_test_rfh()->NavigateAndCommitRendererInitiated(0, true, url);
- // Reloading the page is not an in-page navigation.
+ // Respect what the renderer says when the origin doesn't change.
EXPECT_FALSE(controller.IsURLInPageNavigation(url, url::Origin(url), false,
main_test_rfh()));
const GURL other_url("http://www.google.com/add.html");
« no previous file with comments | « content/browser/frame_host/navigation_controller_impl_browsertest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698