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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "content/browser/frame_host/navigation_controller_impl.h" | 10 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 11 #include "content/browser/frame_host/navigation_entry_impl.h" | 11 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 12 #include "content/browser/frame_host/navigation_request.h" | 12 #include "content/browser/frame_host/navigation_request.h" |
| 13 #include "content/browser/frame_host/navigation_request_info.h" | 13 #include "content/browser/frame_host/navigation_request_info.h" |
| 14 #include "content/browser/frame_host/navigator.h" | 14 #include "content/browser/frame_host/navigator.h" |
| 15 #include "content/browser/frame_host/navigator_impl.h" | 15 #include "content/browser/frame_host/navigator_impl.h" |
| 16 #include "content/browser/frame_host/render_frame_host_manager.h" | 16 #include "content/browser/frame_host/render_frame_host_manager.h" |
| 17 #include "content/browser/site_instance_impl.h" | 17 #include "content/browser/site_instance_impl.h" |
| 18 #include "content/browser/streams/stream.h" | 18 #include "content/browser/streams/stream.h" |
| 19 #include "content/common/frame_messages.h" | 19 #include "content/common/frame_messages.h" |
| 20 #include "content/common/navigation_params.h" | 20 #include "content/common/navigation_params.h" |
| 21 #include "content/common/site_isolation_policy.h" | 21 #include "content/common/site_isolation_policy.h" |
| 22 #include "content/public/browser/navigation_data.h" | |
|
nasko
2016/05/09 17:35:43
Do we need an include if all calls use nullptr?
RyanSturm
2016/05/09 18:27:31
Because it's a unique_ptr param the compiler has t
nasko
2016/05/09 18:40:46
Acknowledged.
| |
| 22 #include "content/public/browser/stream_handle.h" | 23 #include "content/public/browser/stream_handle.h" |
| 23 #include "content/public/common/url_constants.h" | 24 #include "content/public/common/url_constants.h" |
| 24 #include "content/public/common/url_utils.h" | 25 #include "content/public/common/url_utils.h" |
| 25 #include "content/public/test/mock_render_process_host.h" | 26 #include "content/public/test/mock_render_process_host.h" |
| 26 #include "content/public/test/test_utils.h" | 27 #include "content/public/test/test_utils.h" |
| 27 #include "content/test/browser_side_navigation_test_utils.h" | 28 #include "content/test/browser_side_navigation_test_utils.h" |
| 28 #include "content/test/test_navigation_url_loader.h" | 29 #include "content/test/test_navigation_url_loader.h" |
| 29 #include "content/test/test_render_frame_host.h" | 30 #include "content/test/test_render_frame_host.h" |
| 30 #include "content/test/test_web_contents.h" | 31 #include "content/test/test_web_contents.h" |
| 31 #include "net/base/load_flags.h" | 32 #include "net/base/load_flags.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 | 137 |
| 137 // As there's no live renderer the navigation should not wait for a | 138 // As there's no live renderer the navigation should not wait for a |
| 138 // beforeUnload ACK from the renderer and start right away. | 139 // beforeUnload ACK from the renderer and start right away. |
| 139 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 140 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 140 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); | 141 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); |
| 141 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 142 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 142 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 143 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 143 | 144 |
| 144 // Have the current RenderFrameHost commit the navigation. | 145 // Have the current RenderFrameHost commit the navigation. |
| 145 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 146 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 146 GetLoaderForNavigationRequest(request) | 147 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 147 ->CallOnResponseStarted(response, MakeEmptyStream()); | 148 response, MakeEmptyStream(), nullptr); |
| 148 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 149 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 149 EXPECT_TRUE(main_test_rfh()->is_loading()); | 150 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 150 EXPECT_FALSE(node->navigation_request()); | 151 EXPECT_FALSE(node->navigation_request()); |
| 151 | 152 |
| 152 // Commit the navigation. | 153 // Commit the navigation. |
| 153 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); | 154 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); |
| 154 EXPECT_TRUE(main_test_rfh()->is_active()); | 155 EXPECT_TRUE(main_test_rfh()->is_active()); |
| 155 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 156 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 156 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 157 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 157 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 158 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 189 // The navigation is immediately started as there's no need to wait for | 190 // The navigation is immediately started as there's no need to wait for |
| 190 // beforeUnload to be executed. | 191 // beforeUnload to be executed. |
| 191 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 192 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 192 EXPECT_FALSE(request->begin_params().has_user_gesture); | 193 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 193 EXPECT_EQ(kUrl2, request->common_params().url); | 194 EXPECT_EQ(kUrl2, request->common_params().url); |
| 194 EXPECT_FALSE(request->browser_initiated()); | 195 EXPECT_FALSE(request->browser_initiated()); |
| 195 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 196 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 196 | 197 |
| 197 // Have the current RenderFrameHost commit the navigation. | 198 // Have the current RenderFrameHost commit the navigation. |
| 198 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 199 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 199 GetLoaderForNavigationRequest(request) | 200 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 200 ->CallOnResponseStarted(response, MakeEmptyStream()); | 201 response, MakeEmptyStream(), nullptr); |
| 201 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 202 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 202 EXPECT_TRUE(main_test_rfh()->is_loading()); | 203 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 203 EXPECT_FALSE(node->navigation_request()); | 204 EXPECT_FALSE(node->navigation_request()); |
| 204 | 205 |
| 205 // Commit the navigation. | 206 // Commit the navigation. |
| 206 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 207 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 207 EXPECT_TRUE(main_test_rfh()->is_active()); | 208 EXPECT_TRUE(main_test_rfh()->is_active()); |
| 208 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 209 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
| 209 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 210 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 210 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 211 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 238 EXPECT_EQ(kUrl2, request->common_params().url); | 239 EXPECT_EQ(kUrl2, request->common_params().url); |
| 239 EXPECT_FALSE(request->browser_initiated()); | 240 EXPECT_FALSE(request->browser_initiated()); |
| 240 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 241 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 241 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 242 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 242 } else { | 243 } else { |
| 243 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 244 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 244 } | 245 } |
| 245 | 246 |
| 246 // Have the current RenderFrameHost commit the navigation. | 247 // Have the current RenderFrameHost commit the navigation. |
| 247 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 248 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 248 GetLoaderForNavigationRequest(request) | 249 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 249 ->CallOnResponseStarted(response, MakeEmptyStream()); | 250 response, MakeEmptyStream(), nullptr); |
| 250 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 251 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 251 EXPECT_TRUE( | 252 EXPECT_TRUE( |
| 252 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 253 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 253 } else { | 254 } else { |
| 254 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 255 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 255 } | 256 } |
| 256 EXPECT_TRUE(main_test_rfh()->is_loading()); | 257 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 257 EXPECT_FALSE(node->navigation_request()); | 258 EXPECT_FALSE(node->navigation_request()); |
| 258 | 259 |
| 259 // Commit the navigation. | 260 // Commit the navigation. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 ASSERT_TRUE(main_request); | 392 ASSERT_TRUE(main_request); |
| 392 | 393 |
| 393 // Navigations to a different site do create a speculative RenderFrameHost. | 394 // Navigations to a different site do create a speculative RenderFrameHost. |
| 394 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 395 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 395 | 396 |
| 396 // Commit an HTTP 204 response. | 397 // Commit an HTTP 204 response. |
| 397 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 398 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 398 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; | 399 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; |
| 399 response->head.headers = new net::HttpResponseHeaders( | 400 response->head.headers = new net::HttpResponseHeaders( |
| 400 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); | 401 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); |
| 401 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 402 GetLoaderForNavigationRequest(main_request) |
| 402 response, MakeEmptyStream()); | 403 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 403 | 404 |
| 404 // There should be no pending nor speculative RenderFrameHost; the navigation | 405 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 405 // was aborted. | 406 // was aborted. |
| 406 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 407 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 407 EXPECT_FALSE(node->navigation_request()); | 408 EXPECT_FALSE(node->navigation_request()); |
| 408 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 409 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 409 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 410 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 410 | 411 |
| 411 // Now, repeat the test with 205 Reset Content. | 412 // Now, repeat the test with 205 Reset Content. |
| 412 | 413 |
| 413 // Navigate to a different site again. | 414 // Navigate to a different site again. |
| 414 process()->sink().ClearMessages(); | 415 process()->sink().ClearMessages(); |
| 415 RequestNavigation(node, kUrl2); | 416 RequestNavigation(node, kUrl2); |
| 416 main_test_rfh()->SendBeforeUnloadACK(true); | 417 main_test_rfh()->SendBeforeUnloadACK(true); |
| 417 | 418 |
| 418 main_request = node->navigation_request(); | 419 main_request = node->navigation_request(); |
| 419 ASSERT_TRUE(main_request); | 420 ASSERT_TRUE(main_request); |
| 420 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 421 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 421 | 422 |
| 422 // Commit an HTTP 205 response. | 423 // Commit an HTTP 205 response. |
| 423 response = new ResourceResponse; | 424 response = new ResourceResponse; |
| 424 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; | 425 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; |
| 425 response->head.headers = new net::HttpResponseHeaders( | 426 response->head.headers = new net::HttpResponseHeaders( |
| 426 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); | 427 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); |
| 427 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 428 GetLoaderForNavigationRequest(main_request) |
| 428 response, MakeEmptyStream()); | 429 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 429 | 430 |
| 430 // There should be no pending nor speculative RenderFrameHost; the navigation | 431 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 431 // was aborted. | 432 // was aborted. |
| 432 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 433 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 433 EXPECT_FALSE(node->navigation_request()); | 434 EXPECT_FALSE(node->navigation_request()); |
| 434 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 435 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 435 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 436 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 436 } | 437 } |
| 437 | 438 |
| 438 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross | 439 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 451 NavigationRequest* main_request = node->navigation_request(); | 452 NavigationRequest* main_request = node->navigation_request(); |
| 452 ASSERT_TRUE(main_request); | 453 ASSERT_TRUE(main_request); |
| 453 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 454 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 454 ASSERT_TRUE(speculative_rfh); | 455 ASSERT_TRUE(speculative_rfh); |
| 455 | 456 |
| 456 // Receive the beforeUnload ACK. | 457 // Receive the beforeUnload ACK. |
| 457 main_test_rfh()->SendBeforeUnloadACK(true); | 458 main_test_rfh()->SendBeforeUnloadACK(true); |
| 458 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 459 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 459 | 460 |
| 460 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 461 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 461 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 462 GetLoaderForNavigationRequest(main_request) |
| 462 response, MakeEmptyStream()); | 463 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 463 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 464 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 464 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 465 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 465 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 466 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 466 | 467 |
| 467 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 468 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 468 | 469 |
| 469 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 470 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 470 EXPECT_EQ(speculative_rfh, final_rfh); | 471 EXPECT_EQ(speculative_rfh, final_rfh); |
| 471 EXPECT_NE(initial_rfh, final_rfh); | 472 EXPECT_NE(initial_rfh, final_rfh); |
| 472 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 473 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 494 | 495 |
| 495 // It then redirects to another site. | 496 // It then redirects to another site. |
| 496 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); | 497 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
| 497 | 498 |
| 498 // The redirect should have been followed. | 499 // The redirect should have been followed. |
| 499 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 500 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 500 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 501 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 501 | 502 |
| 502 // Have the RenderFrameHost commit the navigation. | 503 // Have the RenderFrameHost commit the navigation. |
| 503 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 504 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 504 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 505 GetLoaderForNavigationRequest(main_request) |
| 505 response, MakeEmptyStream()); | 506 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 506 TestRenderFrameHost* final_speculative_rfh = | 507 TestRenderFrameHost* final_speculative_rfh = |
| 507 GetSpeculativeRenderFrameHost(node); | 508 GetSpeculativeRenderFrameHost(node); |
| 508 EXPECT_TRUE(final_speculative_rfh); | 509 EXPECT_TRUE(final_speculative_rfh); |
| 509 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 510 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
| 510 | 511 |
| 511 // Commit the navigation. | 512 // Commit the navigation. |
| 512 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 513 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 513 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 514 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 514 ASSERT_TRUE(final_rfh); | 515 ASSERT_TRUE(final_rfh); |
| 515 EXPECT_NE(rfh, final_rfh); | 516 EXPECT_NE(rfh, final_rfh); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 | 567 |
| 567 // Confirm that a new speculative RenderFrameHost was created. | 568 // Confirm that a new speculative RenderFrameHost was created. |
| 568 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 569 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 569 ASSERT_TRUE(speculative_rfh); | 570 ASSERT_TRUE(speculative_rfh); |
| 570 int32_t site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); | 571 int32_t site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); |
| 571 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 572 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
| 572 | 573 |
| 573 // Have the RenderFrameHost commit the navigation. | 574 // Have the RenderFrameHost commit the navigation. |
| 574 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 575 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 575 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 576 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 576 response, MakeEmptyStream()); | 577 response, MakeEmptyStream(), nullptr); |
| 577 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 578 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 578 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 579 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 579 | 580 |
| 580 // Commit the navigation. | 581 // Commit the navigation. |
| 581 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 582 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 582 | 583 |
| 583 // Confirm that the commit corresponds to the new request. | 584 // Confirm that the commit corresponds to the new request. |
| 584 ASSERT_TRUE(main_test_rfh()); | 585 ASSERT_TRUE(main_test_rfh()); |
| 585 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 586 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 586 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 587 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 632 // Confirm that the speculative RenderFrameHost was destroyed in the non | 633 // Confirm that the speculative RenderFrameHost was destroyed in the non |
| 633 // SitePerProcess case. | 634 // SitePerProcess case. |
| 634 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 635 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 635 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 636 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 636 } else { | 637 } else { |
| 637 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 638 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 638 } | 639 } |
| 639 | 640 |
| 640 // Have the RenderFrameHost commit the navigation. | 641 // Have the RenderFrameHost commit the navigation. |
| 641 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 642 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 642 GetLoaderForNavigationRequest(request2) | 643 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 643 ->CallOnResponseStarted(response, MakeEmptyStream()); | 644 response, MakeEmptyStream(), nullptr); |
| 644 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 645 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 645 EXPECT_TRUE( | 646 EXPECT_TRUE( |
| 646 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 647 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 647 } else { | 648 } else { |
| 648 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 649 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 649 } | 650 } |
| 650 | 651 |
| 651 // Commit the navigation. | 652 // Commit the navigation. |
| 652 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 653 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 653 | 654 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 693 EXPECT_FALSE(request2->browser_initiated()); | 694 EXPECT_FALSE(request2->browser_initiated()); |
| 694 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 695 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 695 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 696 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 696 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 697 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 697 } else { | 698 } else { |
| 698 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 699 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 699 } | 700 } |
| 700 | 701 |
| 701 // Have the RenderFrameHost commit the navigation. | 702 // Have the RenderFrameHost commit the navigation. |
| 702 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 703 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 703 GetLoaderForNavigationRequest(request2) | 704 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 704 ->CallOnResponseStarted(response, MakeEmptyStream()); | 705 response, MakeEmptyStream(), nullptr); |
| 705 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 706 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 706 EXPECT_TRUE( | 707 EXPECT_TRUE( |
| 707 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 708 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 708 } else { | 709 } else { |
| 709 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 710 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 710 } | 711 } |
| 711 | 712 |
| 712 // Commit the navigation. | 713 // Commit the navigation. |
| 713 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); | 714 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); |
| 714 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 715 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 745 EXPECT_TRUE(request2->browser_initiated()); | 746 EXPECT_TRUE(request2->browser_initiated()); |
| 746 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 747 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 747 | 748 |
| 748 // Now receive the beforeUnload ACK from the still ongoing navigation. | 749 // Now receive the beforeUnload ACK from the still ongoing navigation. |
| 749 main_test_rfh()->SendBeforeUnloadACK(true); | 750 main_test_rfh()->SendBeforeUnloadACK(true); |
| 750 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 751 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 751 ASSERT_TRUE(speculative_rfh); | 752 ASSERT_TRUE(speculative_rfh); |
| 752 | 753 |
| 753 // Have the RenderFrameHost commit the navigation. | 754 // Have the RenderFrameHost commit the navigation. |
| 754 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 755 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 755 GetLoaderForNavigationRequest(request2) | 756 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 756 ->CallOnResponseStarted(response, MakeEmptyStream()); | 757 response, MakeEmptyStream(), nullptr); |
| 757 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 758 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 758 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 759 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 759 | 760 |
| 760 // Commit the navigation. | 761 // Commit the navigation. |
| 761 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); | 762 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); |
| 762 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 763 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 763 } | 764 } |
| 764 | 765 |
| 765 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | 766 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is |
| 766 // canceled if a another similar request is issued in the meantime. | 767 // canceled if a another similar request is issued in the meantime. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 802 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 803 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 803 } else { | 804 } else { |
| 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 805 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 805 } | 806 } |
| 806 | 807 |
| 807 // Confirm that the first loader got destroyed. | 808 // Confirm that the first loader got destroyed. |
| 808 EXPECT_FALSE(loader1); | 809 EXPECT_FALSE(loader1); |
| 809 | 810 |
| 810 // Have the RenderFrameHost commit the navigation. | 811 // Have the RenderFrameHost commit the navigation. |
| 811 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 812 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 812 GetLoaderForNavigationRequest(request2) | 813 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 813 ->CallOnResponseStarted(response, MakeEmptyStream()); | 814 response, MakeEmptyStream(), nullptr); |
| 814 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 815 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 815 EXPECT_TRUE( | 816 EXPECT_TRUE( |
| 816 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 817 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 817 } else { | 818 } else { |
| 818 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 819 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 819 } | 820 } |
| 820 | 821 |
| 821 // Commit the navigation. | 822 // Commit the navigation. |
| 822 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 823 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 823 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 824 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 880 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 881 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 881 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 882 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 882 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 883 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 883 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 884 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 884 int32_t site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 885 int32_t site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 885 | 886 |
| 886 // Ask Navigator to commit the navigation by simulating a call to | 887 // Ask Navigator to commit the navigation by simulating a call to |
| 887 // OnResponseStarted. | 888 // OnResponseStarted. |
| 888 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 889 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 889 GetLoaderForNavigationRequest(node->navigation_request()) | 890 GetLoaderForNavigationRequest(node->navigation_request()) |
| 890 ->CallOnResponseStarted(response, MakeEmptyStream()); | 891 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 891 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 892 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 892 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 893 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 893 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 894 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 894 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 895 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 895 | 896 |
| 896 // Invoke OnDidCommitProvisionalLoad. | 897 // Invoke OnDidCommitProvisionalLoad. |
| 897 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); | 898 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); |
| 898 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 899 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 899 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 900 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 900 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 901 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 941 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects | 942 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects |
| 942 // this next check will be changed to verify that it actually happens. | 943 // this next check will be changed to verify that it actually happens. |
| 943 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 944 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 944 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 945 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 945 EXPECT_FALSE(rfh_deleted_observer.deleted()); | 946 EXPECT_FALSE(rfh_deleted_observer.deleted()); |
| 946 | 947 |
| 947 // Commit the navigation with Navigator by simulating the call to | 948 // Commit the navigation with Navigator by simulating the call to |
| 948 // OnResponseStarted. | 949 // OnResponseStarted. |
| 949 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 950 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 950 GetLoaderForNavigationRequest(main_request) | 951 GetLoaderForNavigationRequest(main_request) |
| 951 ->CallOnResponseStarted(response, MakeEmptyStream()); | 952 ->CallOnResponseStarted(response, MakeEmptyStream(), nullptr); |
| 952 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 953 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 953 ASSERT_TRUE(speculative_rfh); | 954 ASSERT_TRUE(speculative_rfh); |
| 954 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 955 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 955 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 956 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 956 EXPECT_TRUE(rfh_deleted_observer.deleted()); | 957 EXPECT_TRUE(rfh_deleted_observer.deleted()); |
| 957 | 958 |
| 958 // Once commit happens the speculative RenderFrameHost is updated to match the | 959 // Once commit happens the speculative RenderFrameHost is updated to match the |
| 959 // known final SiteInstance. | 960 // known final SiteInstance. |
| 960 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 961 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
| 961 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 962 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1160 main_test_rfh()->PrepareForCommit(); | 1161 main_test_rfh()->PrepareForCommit(); |
| 1161 | 1162 |
| 1162 // Claim that the navigation was within same page. | 1163 // Claim that the navigation was within same page. |
| 1163 int bad_msg_count = process()->bad_msg_count(); | 1164 int bad_msg_count = process()->bad_msg_count(); |
| 1164 GetSpeculativeRenderFrameHost(node)->SendNavigateWithModificationCallback( | 1165 GetSpeculativeRenderFrameHost(node)->SendNavigateWithModificationCallback( |
| 1165 0, entry_id, true, kUrl2, base::Bind(SetWithinPage, kUrl1)); | 1166 0, entry_id, true, kUrl2, base::Bind(SetWithinPage, kUrl1)); |
| 1166 EXPECT_EQ(process()->bad_msg_count(), bad_msg_count + 1); | 1167 EXPECT_EQ(process()->bad_msg_count(), bad_msg_count + 1); |
| 1167 } | 1168 } |
| 1168 | 1169 |
| 1169 } // namespace content | 1170 } // namespace content |
| OLD | NEW |