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

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

Issue 1303333006: Don't crash for subframes after in-page navigations in --site-per-process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
Index: content/browser/frame_host/navigation_controller_impl_browsertest.cc
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index 301f27a133c1f85ab24fd1fb4ea454418030f86a..2ac449bc5429fb6fa173ebc350211933fb7fc69e 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -1692,6 +1692,54 @@ IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
}
}
+// Ensure that we don't crash when navigating subframes after in-page
+// navigations. See https://crbug.com/522193.
+IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
+ FrameNavigationEntry_SubframeAfterInPage) {
+ // 1. Start on a page with a subframe.
+ GURL main_url(embedded_test_server()->GetURL(
+ "/navigation_controller/page_with_iframe.html"));
+ NavigateToURL(shell(), main_url);
+ FrameTreeNode* root =
+ static_cast<WebContentsImpl*>(shell()->web_contents())->
+ GetFrameTree()->root();
+
+ ASSERT_EQ(1U, root->child_count());
+ ASSERT_NE(nullptr, root->child_at(0));
+
+ // Navigate to a real page in the subframe, so that the next navigation will
+ // be MANUAL_SUBFRAME.
+ GURL subframe_url(embedded_test_server()->GetURL(
+ "/navigation_controller/simple_page_1.html"));
+ {
+ LoadCommittedCapturer capturer(root->child_at(0));
+ NavigateFrameToURL(root->child_at(0), subframe_url);
+ capturer.Wait();
+ EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
+ }
+
+ // 2. In-page navigation in the main frame.
+ std::string push_script = "history.pushState({}, 'page 2', 'page_2.html')";
+ EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), push_script));
+ EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+ // TODO(creis): Verify subframe entries. https://crbug.com/522193.
+
+ // 3. Add a nested subframe.
+ {
+ LoadCommittedCapturer capturer(shell()->web_contents());
+ std::string script = "var iframe = document.createElement('iframe');"
+ "iframe.src = '" + subframe_url.spec() + "';"
+ "document.body.appendChild(iframe);";
+ EXPECT_TRUE(content::ExecuteScript(root->child_at(0)->current_frame_host(),
+ script));
+ capturer.Wait();
+ EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
+ }
+
+ // TODO(creis): Verify subframe entries. https://crbug.com/522193.
+}
+
// Verify the tree of FrameNavigationEntries after back/forward navigations in a
// cross-site subframe.
IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
« no previous file with comments | « content/browser/frame_host/navigation_controller_impl.cc ('k') | content/browser/frame_host/navigation_entry_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698