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

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

Issue 701953006: PlzNavigate: Speculatively spawns a renderer process for navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: When navigating checks if the current WebUI can be reused. Created 6 years, 1 month 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/navigator_impl_unittest.cc
diff --git a/content/browser/frame_host/navigator_impl_unittest.cc b/content/browser/frame_host/navigator_impl_unittest.cc
index 37a0f243d6dbd01a074760fd51caeba647bfa7db..23d17f8ac068b90e3dc0545f800503ddd3c969eb 100644
--- a/content/browser/frame_host/navigator_impl_unittest.cc
+++ b/content/browser/frame_host/navigator_impl_unittest.cc
@@ -171,6 +171,8 @@ class NavigatorTest : public RenderViewHostImplTestHarness {
// BeginNavigation.
// Note that all PlzNavigate methods on the browser side require the use of the
// flag kEnableBrowserSideNavigation.
+// TODO(carlosk): Will fix this ASAP but it currently crashes with my latest
+// changes from speculative renderer creation.
TEST_F(NavigatorTest, BrowserSideNavigationBeginNavigation) {
const GURL kUrl1("http://www.google.com/");
const GURL kUrl2("http://www.chromium.org/");
@@ -301,6 +303,8 @@ TEST_F(NavigatorTest, BrowserSideNavigationNoContent) {
// PlzNavigate: Test that a new RenderFrameHost is created when doing a cross
// site navigation.
+// TODO(carlosk): Will fix this ASAP but it currently fails because it relies on
+// the pending_* members of RFHM which are not necessarily used by PlzNavigate.
clamy 2014/11/19 15:03:29 In the new version, we should just check that the
carlosk 2014/11/19 17:24:28 Acknowledged.
carlosk 2014/11/21 14:36:33 I did that and fixed all but one of the failing te
nasko 2014/11/25 00:19:10 Subframes will never navigate cross-process withou
carlosk 2014/11/28 13:08:17 Done.
TEST_F(NavigatorTest, BrowserSideNavigationCrossSiteNavigation) {
const GURL kUrl1("http://www.chromium.org/");
const GURL kUrl2("http://www.google.com/");
@@ -374,6 +378,8 @@ TEST_F(NavigatorTest, BrowserSideNavigationRedirectCrossSite) {
// PlzNavigate: Test that a navigation is cancelled if another request has been
// issued in the meantime.
+// TODO(carlosk): Will fix this ASAP but it currently fails because it relies on
+// the pending_* members of RFHM which are not necessarily used by PlzNavigate.
TEST_F(NavigatorTest, BrowserSideNavigationReplacePendingNavigation) {
const GURL kUrl0("http://www.wikipedia.org/");
const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0);
@@ -477,4 +483,56 @@ TEST_F(NavigatorTest, BrowserSideNavigationReload) {
main_request->common_params().navigation_type);
}
+// PlzNavigate: Confirms that a speculative renderer process is used when
+// navigation is committed to the same SiteInstance as the one for the initial
+// URL.
+// TODO(carlosk): move this test to render_frame_host_manager_unittest.cc once
+// the proper test fixtures are made available (TestNavigationURLLoader).
+TEST_F(NavigatorTest, BrowserSideNavigationSpeculativeRendererWorksSimple) {
+ const GURL kUrlInit("http://wikipedia.org/");
+ contents()->NavigateAndCommit(kUrlInit);
+
+ EnableBrowserSideNavigation();
+ TestRenderFrameHost* mrfh = main_test_rfh();
+ FrameTreeNode* node = mrfh->frame_tree_node();
+ RenderFrameHostManager* rfhm = node->render_manager();
+ TestRenderFrameHost* srfh =
+ static_cast<TestRenderFrameHost*>(rfhm->speculative_render_frame_host());
nasko 2014/11/19 01:00:23 Why do you need to static cast? You aren't calling
carlosk 2014/11/19 17:24:28 I added the cast when I was figuring out how to in
carlosk 2014/11/21 14:36:33 Done.
+ ASSERT_FALSE(srfh);
+
+ const GURL kUrlNav("http://google.com/");
+ SendRequestNavigation(node, kUrlNav);
+ contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrlNav);
+ srfh =
+ static_cast<TestRenderFrameHost*>(rfhm->speculative_render_frame_host());
+ ASSERT_TRUE(srfh);
+ EXPECT_NE(srfh, mrfh);
+ EXPECT_TRUE(srfh->GetProcess()->HasConnection());
+
+ const GURL kUrlFinal("http://www.google.com/about/");
+ NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node);
+ CommonNavigationParams& common_params = main_request->common_params();
+ common_params.url = kUrlFinal;
+ common_params.transition = ui::PAGE_TRANSITION_CLIENT_REDIRECT;
nasko 2014/11/19 01:00:23 In order for client redirect to occur, you need to
clamy 2014/11/19 15:03:29 Unless you are specifically testing a client redir
carlosk 2014/11/19 17:24:28 In this case I was guesstimating that to maintain
nasko 2014/11/19 19:01:29 Why are you even faking it? If you want to test th
carlosk 2014/11/21 14:36:33 Agreed and done. I made this test to test the actu
+ scoped_refptr<ResourceResponse> response(new ResourceResponse);
+ GetLoaderForNavigationRequest(main_request)
+ ->CallOnResponseStarted(response, MakeEmptyStream());
+ EXPECT_EQ(srfh, main_test_rfh());
+ EXPECT_FALSE(rfhm->speculative_render_frame_host());
+
+ // And just for completeness invokes OnDidCommitProvisionalLoad which
+ // shouldn't change anything in RFHM.
+ FrameHostMsg_DidCommitProvisionalLoad_Params params;
+ params.page_id = 1;
+ params.url = kUrlFinal;
+ params.transition = ui::PAGE_TRANSITION_CLIENT_REDIRECT;
+ params.was_within_same_page = false;
+ params.is_post = false;
+ params.post_id = -1;
+ params.page_state = PageState::CreateForTesting(kUrlFinal, false, 0, 0);
+ main_test_rfh()->SendNavigateWithParams(&params);
+ EXPECT_EQ(srfh, main_test_rfh());
+ EXPECT_FALSE(rfhm->speculative_render_frame_host());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698