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 "base/macros.h" | 5 #include "base/macros.h" |
| 6 #include "base/time/time.h" | 6 #include "base/time/time.h" |
| 7 #include "content/browser/frame_host/navigation_controller_impl.h" | 7 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 8 #include "content/browser/frame_host/navigation_entry_impl.h" | 8 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 9 #include "content/browser/frame_host/navigation_request.h" | 9 #include "content/browser/frame_host/navigation_request.h" |
| 10 #include "content/browser/frame_host/navigation_request_info.h" | 10 #include "content/browser/frame_host/navigation_request_info.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 78 FrameTreeNode* frame_tree_node) { | 78 FrameTreeNode* frame_tree_node) { |
| 79 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) | 79 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) |
| 80 ->GetNavigationRequestForNodeForTesting(frame_tree_node); | 80 ->GetNavigationRequestForNodeForTesting(frame_tree_node); |
| 81 } | 81 } |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 // PlzNavigate: Test that a proper NavigationRequest is created by | 84 // PlzNavigate: Test that a proper NavigationRequest is created by |
| 85 // BeginNavigation. | 85 // BeginNavigation. |
| 86 // Note that all PlzNavigate methods on the browser side require the use of the | 86 // Note that all PlzNavigate methods on the browser side require the use of the |
| 87 // flag kEnableBrowserSideNavigation. | 87 // flag kEnableBrowserSideNavigation. |
| 88 // TODO(carlosk): Will fix this ASAP but it currently crashes with my latest | |
| 89 // changes from speculative renderer creation. | |
| 88 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { | 90 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { |
|
clamy
2014/11/25 16:50:57
Is it still failing?
carlosk
2014/11/28 13:08:17
Now it's not anymore so that TODO is gone.
| |
| 89 const GURL kUrl1("http://www.google.com/"); | 91 const GURL kUrl1("http://www.google.com/"); |
| 90 const GURL kUrl2("http://www.chromium.org/"); | 92 const GURL kUrl2("http://www.chromium.org/"); |
| 91 const GURL kUrl3("http://www.gmail.com/"); | 93 const GURL kUrl3("http://www.gmail.com/"); |
| 92 | 94 |
| 93 contents()->NavigateAndCommit(kUrl1); | 95 contents()->NavigateAndCommit(kUrl1); |
| 94 | 96 |
| 95 // Add a subframe. | 97 // Add a subframe. |
| 96 FrameTreeNode* root = contents()->GetFrameTree()->root(); | 98 FrameTreeNode* root = contents()->GetFrameTree()->root(); |
| 97 TestRenderFrameHost* subframe_rfh = static_cast<TestRenderFrameHost*>( | 99 TestRenderFrameHost* subframe_rfh = static_cast<TestRenderFrameHost*>( |
| 98 contents()->GetFrameTree()->AddFrame( | 100 contents()->GetFrameTree()->AddFrame( |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 221 | 223 |
| 222 // Navigate to a different site. | 224 // Navigate to a different site. |
| 223 SendRequestNavigation(node, kUrl2); | 225 SendRequestNavigation(node, kUrl2); |
| 224 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); | 226 main_test_rfh()->SendBeginNavigationWithURL(kUrl2); |
| 225 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 227 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); |
| 226 ASSERT_TRUE(main_request); | 228 ASSERT_TRUE(main_request); |
| 227 | 229 |
| 228 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 230 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 229 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 231 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 230 response, MakeEmptyStream()); | 232 response, MakeEmptyStream()); |
| 231 RenderFrameHostImpl* pending_rfh = | 233 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 232 node->render_manager()->pending_frame_host(); | 234 ASSERT_TRUE(final_rfh); |
| 233 ASSERT_TRUE(pending_rfh); | 235 EXPECT_NE(final_rfh, rfh); |
| 234 EXPECT_NE(pending_rfh, rfh); | 236 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 235 EXPECT_TRUE(pending_rfh->IsRenderFrameLive()); | 237 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 236 EXPECT_TRUE(pending_rfh->render_view_host()->IsRenderViewLive()); | |
| 237 } | 238 } |
| 238 | 239 |
| 239 // PlzNavigate: Test that redirects are followed. | 240 // PlzNavigate: Test that redirects are followed. |
| 240 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { | 241 TEST_F(NavigatorTestWithBrowserSideNavigation, RedirectCrossSite) { |
| 241 const GURL kUrl1("http://www.chromium.org/"); | 242 const GURL kUrl1("http://www.chromium.org/"); |
| 242 const GURL kUrl2("http://www.google.com/"); | 243 const GURL kUrl2("http://www.google.com/"); |
| 243 | 244 |
| 244 contents()->NavigateAndCommit(kUrl1); | 245 contents()->NavigateAndCommit(kUrl1); |
| 245 RenderFrameHostImpl* rfh = main_test_rfh(); | 246 RenderFrameHostImpl* rfh = main_test_rfh(); |
| 246 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh->rfh_state()); | 247 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh->rfh_state()); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 262 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected( | 263 GetLoaderForNavigationRequest(main_request)->CallOnRequestRedirected( |
| 263 redirect_info, response); | 264 redirect_info, response); |
| 264 | 265 |
| 265 // The redirect should have been followed. | 266 // The redirect should have been followed. |
| 266 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 267 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 267 | 268 |
| 268 // Then it commits. | 269 // Then it commits. |
| 269 response = new ResourceResponse; | 270 response = new ResourceResponse; |
| 270 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 271 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 271 response, MakeEmptyStream()); | 272 response, MakeEmptyStream()); |
| 272 RenderFrameHostImpl* pending_rfh = | 273 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 273 node->render_manager()->pending_frame_host(); | 274 ASSERT_TRUE(final_rfh); |
| 274 ASSERT_TRUE(pending_rfh); | 275 EXPECT_NE(final_rfh, rfh); |
| 275 EXPECT_NE(pending_rfh, rfh); | 276 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| 276 EXPECT_TRUE(pending_rfh->IsRenderFrameLive()); | 277 EXPECT_TRUE(final_rfh->render_view_host()->IsRenderViewLive()); |
| 277 EXPECT_TRUE(pending_rfh->render_view_host()->IsRenderViewLive()); | |
| 278 } | 278 } |
| 279 | 279 |
| 280 // PlzNavigate: Test that a navigation is cancelled if another request has been | 280 // PlzNavigate: Test that a navigation is canceled if another request has been |
| 281 // issued in the meantime. | 281 // issued in the meantime. |
| 282 TEST_F(NavigatorTestWithBrowserSideNavigation, ReplacePendingNavigation) { | 282 TEST_F(NavigatorTestWithBrowserSideNavigation, ReplacePendingNavigation) { |
| 283 const GURL kUrl0("http://www.wikipedia.org/"); | 283 const GURL kUrl0("http://www.wikipedia.org/"); |
| 284 const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0); | 284 const GURL kUrl0_site = SiteInstance::GetSiteForURL(browser_context(), kUrl0); |
| 285 const GURL kUrl1("http://www.chromium.org/"); | 285 const GURL kUrl1("http://www.chromium.org/"); |
| 286 const GURL kUrl2("http://www.google.com/"); | 286 const GURL kUrl2("http://www.google.com/"); |
| 287 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); | 287 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); |
| 288 | 288 |
| 289 // Initialization. | 289 // Initialization. |
| 290 contents()->NavigateAndCommit(kUrl0); | 290 contents()->NavigateAndCommit(kUrl0); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 308 ASSERT_TRUE(request2); | 308 ASSERT_TRUE(request2); |
| 309 EXPECT_EQ(kUrl2, request2->common_params().url); | 309 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 310 | 310 |
| 311 // Confirm that the first loader got destroyed. | 311 // Confirm that the first loader got destroyed. |
| 312 EXPECT_FALSE(loader1); | 312 EXPECT_FALSE(loader1); |
| 313 | 313 |
| 314 // Confirm that the commit corresponds to the new request. | 314 // Confirm that the commit corresponds to the new request. |
| 315 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 315 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 316 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 316 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 317 response, MakeEmptyStream()); | 317 response, MakeEmptyStream()); |
| 318 RenderFrameHostImpl* pending_rfh = | 318 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 319 node->render_manager()->pending_frame_host(); | 319 ASSERT_TRUE(final_rfh); |
| 320 ASSERT_TRUE(pending_rfh); | 320 EXPECT_EQ(kUrl2_site, final_rfh->GetSiteInstance()->GetSiteURL()); |
| 321 EXPECT_EQ(kUrl2_site, pending_rfh->GetSiteInstance()->GetSiteURL()); | |
| 322 } | 321 } |
| 323 | 322 |
| 324 // PlzNavigate: Test that a reload navigation is properly signaled to the | 323 // PlzNavigate: Test that a reload navigation is properly signaled to the |
| 325 // renderer when the navigation can commit. | 324 // renderer when the navigation can commit. |
| 326 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 325 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
| 327 const GURL kUrl("http://www.google.com/"); | 326 const GURL kUrl("http://www.google.com/"); |
| 328 contents()->NavigateAndCommit(kUrl); | 327 contents()->NavigateAndCommit(kUrl); |
| 329 | 328 |
| 330 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 329 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 331 SendRequestNavigationWithParameters( | 330 SendRequestNavigationWithParameters( |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 347 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, | 346 node, kUrl, Referrer(), ui::PAGE_TRANSITION_LINK, |
| 348 NavigationController::RELOAD_IGNORING_CACHE); | 347 NavigationController::RELOAD_IGNORING_CACHE); |
| 349 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl); | 348 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl); |
| 350 // A NavigationRequest should have been generated. | 349 // A NavigationRequest should have been generated. |
| 351 main_request = GetNavigationRequestForFrameTreeNode(node); | 350 main_request = GetNavigationRequestForFrameTreeNode(node); |
| 352 ASSERT_TRUE(main_request != NULL); | 351 ASSERT_TRUE(main_request != NULL); |
| 353 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 352 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
| 354 main_request->common_params().navigation_type); | 353 main_request->common_params().navigation_type); |
| 355 } | 354 } |
| 356 | 355 |
| 356 // PlzNavigate: Confirms that a speculative renderer process is used when | |
|
nasko
2014/11/25 00:19:10
nit: s/renderer process/renderer/ or s/renderer pr
carlosk
2014/11/28 13:08:17
Done.
| |
| 357 // navigation when navigating from one site to the other | |
|
clamy
2014/11/25 16:50:57
Remove "when navigation"
carlosk
2014/11/28 13:08:17
Done.
| |
| 358 TEST_F(NavigatorTestWithBrowserSideNavigation, | |
| 359 SpeculativeRendererWorksBaseCase) { | |
| 360 // Navigates to an initial site. | |
|
clamy
2014/11/25 16:50:57
nit: Navigate (no s).
carlosk
2014/11/28 13:08:17
Done.
| |
| 361 const GURL kUrlInit("http://wikipedia.org/"); | |
| 362 contents()->NavigateAndCommit(kUrlInit); | |
| 363 TestRenderFrameHost* mrfh = main_test_rfh(); | |
| 364 FrameTreeNode* node = mrfh->frame_tree_node(); | |
| 365 RenderFrameHostManager* rfhm = node->render_manager(); | |
| 366 RenderFrameHost* srfh = rfhm->speculative_render_frame_host(); | |
| 367 ASSERT_FALSE(srfh); | |
| 368 | |
| 369 // Begins navigating to another site. | |
|
nasko
2014/11/25 00:19:10
nit: Begin (no s).
carlosk
2014/11/28 13:08:17
Done.
| |
| 370 const GURL kUrl("http://google.com/"); | |
| 371 SendRequestNavigation(node, kUrl); | |
| 372 contents()->GetMainFrame()->SendBeginNavigationWithURL(kUrl); | |
| 373 srfh = rfhm->speculative_render_frame_host(); | |
| 374 ASSERT_TRUE(srfh); | |
| 375 EXPECT_NE(srfh, mrfh); | |
| 376 EXPECT_TRUE(srfh->GetProcess()->HasConnection()); | |
| 377 | |
| 378 // Commits. | |
|
nasko
2014/11/25 00:19:10
nit: Commit (no s).
carlosk
2014/11/28 13:08:17
Done.
| |
| 379 scoped_refptr<ResourceResponse> response(new ResourceResponse); | |
| 380 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | |
| 381 GetLoaderForNavigationRequest(main_request) | |
| 382 ->CallOnResponseStarted(response, MakeEmptyStream()); | |
| 383 EXPECT_EQ(srfh, main_test_rfh()); | |
| 384 EXPECT_FALSE(rfhm->speculative_render_frame_host()); | |
| 385 | |
| 386 // And just for completeness invokes OnDidCommitProvisionalLoad which | |
|
clamy
2014/11/25 16:50:57
nit: invoke (no s).
carlosk
2014/11/28 13:08:17
Done.
| |
| 387 // shouldn't change anything in RFHM. | |
| 388 FrameHostMsg_DidCommitProvisionalLoad_Params params; | |
| 389 params.page_id = 1; | |
| 390 params.url = kUrl; | |
| 391 params.was_within_same_page = false; | |
| 392 params.is_post = false; | |
| 393 params.post_id = -1; | |
| 394 params.page_state = PageState::CreateForTesting(kUrl, false, 0, 0); | |
| 395 main_test_rfh()->SendNavigateWithParams(¶ms); | |
| 396 EXPECT_EQ(srfh, main_test_rfh()); | |
| 397 EXPECT_FALSE(rfhm->speculative_render_frame_host()); | |
| 398 } | |
| 399 | |
| 357 } // namespace content | 400 } // namespace content |
| OLD | NEW |