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/memory/ptr_util.h" | |
| 8 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 9 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 10 #include "content/browser/frame_host/navigation_controller_impl.h" | 11 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 11 #include "content/browser/frame_host/navigation_entry_impl.h" | 12 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 12 #include "content/browser/frame_host/navigation_request.h" | 13 #include "content/browser/frame_host/navigation_request.h" |
| 13 #include "content/browser/frame_host/navigation_request_info.h" | 14 #include "content/browser/frame_host/navigation_request_info.h" |
| 14 #include "content/browser/frame_host/navigator.h" | 15 #include "content/browser/frame_host/navigator.h" |
| 15 #include "content/browser/frame_host/navigator_impl.h" | 16 #include "content/browser/frame_host/navigator_impl.h" |
| 16 #include "content/browser/frame_host/render_frame_host_manager.h" | 17 #include "content/browser/frame_host/render_frame_host_manager.h" |
| 17 #include "content/browser/site_instance_impl.h" | 18 #include "content/browser/site_instance_impl.h" |
| 18 #include "content/browser/streams/stream.h" | 19 #include "content/browser/streams/stream.h" |
| 19 #include "content/common/frame_messages.h" | 20 #include "content/common/frame_messages.h" |
| 20 #include "content/common/navigation_params.h" | 21 #include "content/common/navigation_params.h" |
| 21 #include "content/common/site_isolation_policy.h" | 22 #include "content/common/site_isolation_policy.h" |
| 23 #include "content/public/browser/navigation_data.h" | |
| 22 #include "content/public/browser/stream_handle.h" | 24 #include "content/public/browser/stream_handle.h" |
| 23 #include "content/public/common/url_constants.h" | 25 #include "content/public/common/url_constants.h" |
| 24 #include "content/public/common/url_utils.h" | 26 #include "content/public/common/url_utils.h" |
| 25 #include "content/public/test/mock_render_process_host.h" | 27 #include "content/public/test/mock_render_process_host.h" |
| 26 #include "content/public/test/test_utils.h" | 28 #include "content/public/test/test_utils.h" |
| 27 #include "content/test/browser_side_navigation_test_utils.h" | 29 #include "content/test/browser_side_navigation_test_utils.h" |
| 28 #include "content/test/test_navigation_url_loader.h" | 30 #include "content/test/test_navigation_url_loader.h" |
| 29 #include "content/test/test_render_frame_host.h" | 31 #include "content/test/test_render_frame_host.h" |
| 30 #include "content/test/test_web_contents.h" | 32 #include "content/test/test_web_contents.h" |
| 31 #include "net/base/load_flags.h" | 33 #include "net/base/load_flags.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 } | 112 } |
| 111 | 113 |
| 112 scoped_refptr<SiteInstance> ConvertToSiteInstance( | 114 scoped_refptr<SiteInstance> ConvertToSiteInstance( |
| 113 RenderFrameHostManager* rfhm, | 115 RenderFrameHostManager* rfhm, |
| 114 const SiteInstanceDescriptor& descriptor, | 116 const SiteInstanceDescriptor& descriptor, |
| 115 SiteInstance* candidate_instance) { | 117 SiteInstance* candidate_instance) { |
| 116 return rfhm->ConvertToSiteInstance(descriptor, candidate_instance); | 118 return rfhm->ConvertToSiteInstance(descriptor, candidate_instance); |
| 117 } | 119 } |
| 118 }; | 120 }; |
| 119 | 121 |
| 122 class TestNavigationData : public NavigationData { | |
|
nasko
2016/05/02 22:02:49
Defining the same class over multiple unit tests f
RyanSturm
2016/05/02 23:02:56
Removing this from the file.
| |
| 123 public: | |
| 124 TestNavigationData() {} | |
| 125 ~TestNavigationData() override {} | |
| 126 std::unique_ptr<NavigationData> Clone() const override { | |
| 127 return base::WrapUnique(new TestNavigationData()); | |
| 128 } | |
| 129 }; | |
| 130 | |
| 120 // PlzNavigate: Test a complete browser-initiated navigation starting with a | 131 // PlzNavigate: Test a complete browser-initiated navigation starting with a |
| 121 // non-live renderer. | 132 // non-live renderer. |
| 122 TEST_F(NavigatorTestWithBrowserSideNavigation, | 133 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 123 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { | 134 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { |
| 124 const GURL kUrl("http://chromium.org/"); | 135 const GURL kUrl("http://chromium.org/"); |
| 125 | 136 |
| 126 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 137 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
| 127 | 138 |
| 128 // Start a browser-initiated navigation. | 139 // Start a browser-initiated navigation. |
| 129 int32_t site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 140 int32_t site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
| 130 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 141 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 131 int entry_id = RequestNavigation(node, kUrl); | 142 int entry_id = RequestNavigation(node, kUrl); |
| 132 NavigationRequest* request = node->navigation_request(); | 143 NavigationRequest* request = node->navigation_request(); |
| 133 ASSERT_TRUE(request); | 144 ASSERT_TRUE(request); |
| 134 EXPECT_EQ(kUrl, request->common_params().url); | 145 EXPECT_EQ(kUrl, request->common_params().url); |
| 135 EXPECT_TRUE(request->browser_initiated()); | 146 EXPECT_TRUE(request->browser_initiated()); |
| 136 | 147 |
| 137 // As there's no live renderer the navigation should not wait for a | 148 // As there's no live renderer the navigation should not wait for a |
| 138 // beforeUnload ACK from the renderer and start right away. | 149 // beforeUnload ACK from the renderer and start right away. |
| 139 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 150 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 140 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); | 151 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); |
| 141 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 152 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 142 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 153 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 143 | 154 |
| 144 // Have the current RenderFrameHost commit the navigation. | 155 // Have the current RenderFrameHost commit the navigation. |
| 145 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 156 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 146 GetLoaderForNavigationRequest(request) | 157 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 147 ->CallOnResponseStarted(response, MakeEmptyStream()); | 158 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
|
nasko
2016/05/02 22:02:49
So this change requires always passing NavigationD
RyanSturm
2016/05/02 23:02:56
I can pass in an null NavigationData; it's a good
| |
| 148 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 159 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 149 EXPECT_TRUE(main_test_rfh()->is_loading()); | 160 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 150 EXPECT_FALSE(node->navigation_request()); | 161 EXPECT_FALSE(node->navigation_request()); |
| 151 | 162 |
| 152 // Commit the navigation. | 163 // Commit the navigation. |
| 153 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); | 164 main_test_rfh()->SendNavigate(0, entry_id, true, kUrl); |
| 154 EXPECT_TRUE(main_test_rfh()->is_active()); | 165 EXPECT_TRUE(main_test_rfh()->is_active()); |
| 155 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 166 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 156 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 167 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 157 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 168 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 | 200 // The navigation is immediately started as there's no need to wait for |
| 190 // beforeUnload to be executed. | 201 // beforeUnload to be executed. |
| 191 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 202 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 192 EXPECT_FALSE(request->begin_params().has_user_gesture); | 203 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 193 EXPECT_EQ(kUrl2, request->common_params().url); | 204 EXPECT_EQ(kUrl2, request->common_params().url); |
| 194 EXPECT_FALSE(request->browser_initiated()); | 205 EXPECT_FALSE(request->browser_initiated()); |
| 195 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 206 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 196 | 207 |
| 197 // Have the current RenderFrameHost commit the navigation. | 208 // Have the current RenderFrameHost commit the navigation. |
| 198 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 209 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 199 GetLoaderForNavigationRequest(request) | 210 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 200 ->CallOnResponseStarted(response, MakeEmptyStream()); | 211 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 201 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 212 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 202 EXPECT_TRUE(main_test_rfh()->is_loading()); | 213 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 203 EXPECT_FALSE(node->navigation_request()); | 214 EXPECT_FALSE(node->navigation_request()); |
| 204 | 215 |
| 205 // Commit the navigation. | 216 // Commit the navigation. |
| 206 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 217 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 207 EXPECT_TRUE(main_test_rfh()->is_active()); | 218 EXPECT_TRUE(main_test_rfh()->is_active()); |
| 208 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 219 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
| 209 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 220 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 210 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 221 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 238 EXPECT_EQ(kUrl2, request->common_params().url); | 249 EXPECT_EQ(kUrl2, request->common_params().url); |
| 239 EXPECT_FALSE(request->browser_initiated()); | 250 EXPECT_FALSE(request->browser_initiated()); |
| 240 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 251 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 241 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 252 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 242 } else { | 253 } else { |
| 243 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 254 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 244 } | 255 } |
| 245 | 256 |
| 246 // Have the current RenderFrameHost commit the navigation. | 257 // Have the current RenderFrameHost commit the navigation. |
| 247 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 258 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 248 GetLoaderForNavigationRequest(request) | 259 GetLoaderForNavigationRequest(request)->CallOnResponseStarted( |
| 249 ->CallOnResponseStarted(response, MakeEmptyStream()); | 260 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 250 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 261 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 251 EXPECT_TRUE( | 262 EXPECT_TRUE( |
| 252 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 263 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 253 } else { | 264 } else { |
| 254 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 265 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 255 } | 266 } |
| 256 EXPECT_TRUE(main_test_rfh()->is_loading()); | 267 EXPECT_TRUE(main_test_rfh()->is_loading()); |
| 257 EXPECT_FALSE(node->navigation_request()); | 268 EXPECT_FALSE(node->navigation_request()); |
| 258 | 269 |
| 259 // Commit the navigation. | 270 // Commit the navigation. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 391 ASSERT_TRUE(main_request); | 402 ASSERT_TRUE(main_request); |
| 392 | 403 |
| 393 // Navigations to a different site do create a speculative RenderFrameHost. | 404 // Navigations to a different site do create a speculative RenderFrameHost. |
| 394 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 405 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 395 | 406 |
| 396 // Commit an HTTP 204 response. | 407 // Commit an HTTP 204 response. |
| 397 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 408 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 398 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; | 409 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; |
| 399 response->head.headers = new net::HttpResponseHeaders( | 410 response->head.headers = new net::HttpResponseHeaders( |
| 400 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); | 411 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); |
| 401 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 412 GetLoaderForNavigationRequest(main_request) |
| 402 response, MakeEmptyStream()); | 413 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 414 base::WrapUnique(new TestNavigationData())); | |
| 403 | 415 |
| 404 // There should be no pending nor speculative RenderFrameHost; the navigation | 416 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 405 // was aborted. | 417 // was aborted. |
| 406 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 418 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 407 EXPECT_FALSE(node->navigation_request()); | 419 EXPECT_FALSE(node->navigation_request()); |
| 408 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 420 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 409 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 421 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 410 | 422 |
| 411 // Now, repeat the test with 205 Reset Content. | 423 // Now, repeat the test with 205 Reset Content. |
| 412 | 424 |
| 413 // Navigate to a different site again. | 425 // Navigate to a different site again. |
| 414 process()->sink().ClearMessages(); | 426 process()->sink().ClearMessages(); |
| 415 RequestNavigation(node, kUrl2); | 427 RequestNavigation(node, kUrl2); |
| 416 main_test_rfh()->SendBeforeUnloadACK(true); | 428 main_test_rfh()->SendBeforeUnloadACK(true); |
| 417 | 429 |
| 418 main_request = node->navigation_request(); | 430 main_request = node->navigation_request(); |
| 419 ASSERT_TRUE(main_request); | 431 ASSERT_TRUE(main_request); |
| 420 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 432 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 421 | 433 |
| 422 // Commit an HTTP 205 response. | 434 // Commit an HTTP 205 response. |
| 423 response = new ResourceResponse; | 435 response = new ResourceResponse; |
| 424 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; | 436 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; |
| 425 response->head.headers = new net::HttpResponseHeaders( | 437 response->head.headers = new net::HttpResponseHeaders( |
| 426 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); | 438 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); |
| 427 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 439 GetLoaderForNavigationRequest(main_request) |
| 428 response, MakeEmptyStream()); | 440 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 441 base::WrapUnique(new TestNavigationData())); | |
| 429 | 442 |
| 430 // There should be no pending nor speculative RenderFrameHost; the navigation | 443 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 431 // was aborted. | 444 // was aborted. |
| 432 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 445 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 433 EXPECT_FALSE(node->navigation_request()); | 446 EXPECT_FALSE(node->navigation_request()); |
| 434 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 447 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 435 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 448 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 436 } | 449 } |
| 437 | 450 |
| 438 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross | 451 // 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(); | 464 NavigationRequest* main_request = node->navigation_request(); |
| 452 ASSERT_TRUE(main_request); | 465 ASSERT_TRUE(main_request); |
| 453 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 466 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 454 ASSERT_TRUE(speculative_rfh); | 467 ASSERT_TRUE(speculative_rfh); |
| 455 | 468 |
| 456 // Receive the beforeUnload ACK. | 469 // Receive the beforeUnload ACK. |
| 457 main_test_rfh()->SendBeforeUnloadACK(true); | 470 main_test_rfh()->SendBeforeUnloadACK(true); |
| 458 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 471 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 459 | 472 |
| 460 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 473 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 461 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 474 GetLoaderForNavigationRequest(main_request) |
| 462 response, MakeEmptyStream()); | 475 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 476 base::WrapUnique(new TestNavigationData())); | |
| 463 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 477 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 464 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 478 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 465 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 479 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 466 | 480 |
| 467 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 481 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 468 | 482 |
| 469 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 483 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 470 EXPECT_EQ(speculative_rfh, final_rfh); | 484 EXPECT_EQ(speculative_rfh, final_rfh); |
| 471 EXPECT_NE(initial_rfh, final_rfh); | 485 EXPECT_NE(initial_rfh, final_rfh); |
| 472 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); | 486 EXPECT_TRUE(final_rfh->IsRenderFrameLive()); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 494 | 508 |
| 495 // It then redirects to another site. | 509 // It then redirects to another site. |
| 496 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); | 510 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
| 497 | 511 |
| 498 // The redirect should have been followed. | 512 // The redirect should have been followed. |
| 499 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 513 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 500 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 514 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 501 | 515 |
| 502 // Have the RenderFrameHost commit the navigation. | 516 // Have the RenderFrameHost commit the navigation. |
| 503 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 517 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 504 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 518 GetLoaderForNavigationRequest(main_request) |
| 505 response, MakeEmptyStream()); | 519 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 520 base::WrapUnique(new TestNavigationData())); | |
| 506 TestRenderFrameHost* final_speculative_rfh = | 521 TestRenderFrameHost* final_speculative_rfh = |
| 507 GetSpeculativeRenderFrameHost(node); | 522 GetSpeculativeRenderFrameHost(node); |
| 508 EXPECT_TRUE(final_speculative_rfh); | 523 EXPECT_TRUE(final_speculative_rfh); |
| 509 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); | 524 EXPECT_TRUE(DidRenderFrameHostRequestCommit(final_speculative_rfh)); |
| 510 | 525 |
| 511 // Commit the navigation. | 526 // Commit the navigation. |
| 512 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 527 final_speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 513 RenderFrameHostImpl* final_rfh = main_test_rfh(); | 528 RenderFrameHostImpl* final_rfh = main_test_rfh(); |
| 514 ASSERT_TRUE(final_rfh); | 529 ASSERT_TRUE(final_rfh); |
| 515 EXPECT_NE(rfh, final_rfh); | 530 EXPECT_NE(rfh, final_rfh); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 | 581 |
| 567 // Confirm that a new speculative RenderFrameHost was created. | 582 // Confirm that a new speculative RenderFrameHost was created. |
| 568 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 583 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 569 ASSERT_TRUE(speculative_rfh); | 584 ASSERT_TRUE(speculative_rfh); |
| 570 int32_t site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); | 585 int32_t site_instance_id_2 = speculative_rfh->GetSiteInstance()->GetId(); |
| 571 EXPECT_NE(site_instance_id_1, site_instance_id_2); | 586 EXPECT_NE(site_instance_id_1, site_instance_id_2); |
| 572 | 587 |
| 573 // Have the RenderFrameHost commit the navigation. | 588 // Have the RenderFrameHost commit the navigation. |
| 574 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 589 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 575 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( | 590 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 576 response, MakeEmptyStream()); | 591 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 577 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 592 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 578 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 593 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 579 | 594 |
| 580 // Commit the navigation. | 595 // Commit the navigation. |
| 581 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); | 596 speculative_rfh->SendNavigate(0, entry_id, true, kUrl2); |
| 582 | 597 |
| 583 // Confirm that the commit corresponds to the new request. | 598 // Confirm that the commit corresponds to the new request. |
| 584 ASSERT_TRUE(main_test_rfh()); | 599 ASSERT_TRUE(main_test_rfh()); |
| 585 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 600 EXPECT_EQ(kUrl2_site, main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 586 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 601 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 | 647 // Confirm that the speculative RenderFrameHost was destroyed in the non |
| 633 // SitePerProcess case. | 648 // SitePerProcess case. |
| 634 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 649 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 635 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 650 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 636 } else { | 651 } else { |
| 637 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 652 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 638 } | 653 } |
| 639 | 654 |
| 640 // Have the RenderFrameHost commit the navigation. | 655 // Have the RenderFrameHost commit the navigation. |
| 641 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 656 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 642 GetLoaderForNavigationRequest(request2) | 657 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 643 ->CallOnResponseStarted(response, MakeEmptyStream()); | 658 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 644 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 659 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 645 EXPECT_TRUE( | 660 EXPECT_TRUE( |
| 646 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 661 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 647 } else { | 662 } else { |
| 648 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 663 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 649 } | 664 } |
| 650 | 665 |
| 651 // Commit the navigation. | 666 // Commit the navigation. |
| 652 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 667 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 653 | 668 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 693 EXPECT_FALSE(request2->browser_initiated()); | 708 EXPECT_FALSE(request2->browser_initiated()); |
| 694 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 709 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 695 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 710 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 696 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 711 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 697 } else { | 712 } else { |
| 698 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 713 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 699 } | 714 } |
| 700 | 715 |
| 701 // Have the RenderFrameHost commit the navigation. | 716 // Have the RenderFrameHost commit the navigation. |
| 702 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 717 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 703 GetLoaderForNavigationRequest(request2) | 718 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 704 ->CallOnResponseStarted(response, MakeEmptyStream()); | 719 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 705 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 720 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 706 EXPECT_TRUE( | 721 EXPECT_TRUE( |
| 707 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 722 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 708 } else { | 723 } else { |
| 709 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 724 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 710 } | 725 } |
| 711 | 726 |
| 712 // Commit the navigation. | 727 // Commit the navigation. |
| 713 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); | 728 main_test_rfh()->SendNavigate(1, 0, true, kUrl1); |
| 714 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 729 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 745 EXPECT_TRUE(request2->browser_initiated()); | 760 EXPECT_TRUE(request2->browser_initiated()); |
| 746 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 761 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 747 | 762 |
| 748 // Now receive the beforeUnload ACK from the still ongoing navigation. | 763 // Now receive the beforeUnload ACK from the still ongoing navigation. |
| 749 main_test_rfh()->SendBeforeUnloadACK(true); | 764 main_test_rfh()->SendBeforeUnloadACK(true); |
| 750 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 765 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 751 ASSERT_TRUE(speculative_rfh); | 766 ASSERT_TRUE(speculative_rfh); |
| 752 | 767 |
| 753 // Have the RenderFrameHost commit the navigation. | 768 // Have the RenderFrameHost commit the navigation. |
| 754 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 769 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 755 GetLoaderForNavigationRequest(request2) | 770 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 756 ->CallOnResponseStarted(response, MakeEmptyStream()); | 771 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 757 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 772 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 758 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 773 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 759 | 774 |
| 760 // Commit the navigation. | 775 // Commit the navigation. |
| 761 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); | 776 speculative_rfh->SendNavigate(0, entry_id, true, kUrl1); |
| 762 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); | 777 EXPECT_EQ(kUrl1, contents()->GetLastCommittedURL()); |
| 763 } | 778 } |
| 764 | 779 |
| 765 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is | 780 // PlzNavigate: Test that a renderer-initiated non-user-initiated navigation is |
| 766 // canceled if a another similar request is issued in the meantime. | 781 // 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)); | 817 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 803 } else { | 818 } else { |
| 804 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 819 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 805 } | 820 } |
| 806 | 821 |
| 807 // Confirm that the first loader got destroyed. | 822 // Confirm that the first loader got destroyed. |
| 808 EXPECT_FALSE(loader1); | 823 EXPECT_FALSE(loader1); |
| 809 | 824 |
| 810 // Have the RenderFrameHost commit the navigation. | 825 // Have the RenderFrameHost commit the navigation. |
| 811 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 826 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 812 GetLoaderForNavigationRequest(request2) | 827 GetLoaderForNavigationRequest(request2)->CallOnResponseStarted( |
| 813 ->CallOnResponseStarted(response, MakeEmptyStream()); | 828 response, MakeEmptyStream(), base::WrapUnique(new TestNavigationData())); |
| 814 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | 829 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { |
| 815 EXPECT_TRUE( | 830 EXPECT_TRUE( |
| 816 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); | 831 DidRenderFrameHostRequestCommit(GetSpeculativeRenderFrameHost(node))); |
| 817 } else { | 832 } else { |
| 818 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 833 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 819 } | 834 } |
| 820 | 835 |
| 821 // Commit the navigation. | 836 // Commit the navigation. |
| 822 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); | 837 main_test_rfh()->SendNavigate(1, 0, true, kUrl2); |
| 823 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 838 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)); | 895 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 881 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 896 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 882 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 897 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 883 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 898 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 884 int32_t site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 899 int32_t site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 885 | 900 |
| 886 // Ask Navigator to commit the navigation by simulating a call to | 901 // Ask Navigator to commit the navigation by simulating a call to |
| 887 // OnResponseStarted. | 902 // OnResponseStarted. |
| 888 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 903 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 889 GetLoaderForNavigationRequest(node->navigation_request()) | 904 GetLoaderForNavigationRequest(node->navigation_request()) |
| 890 ->CallOnResponseStarted(response, MakeEmptyStream()); | 905 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 906 base::WrapUnique(new TestNavigationData())); | |
| 891 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 907 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 892 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 908 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 893 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 909 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 894 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 910 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 895 | 911 |
| 896 // Invoke OnDidCommitProvisionalLoad. | 912 // Invoke OnDidCommitProvisionalLoad. |
| 897 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); | 913 speculative_rfh->SendNavigate(0, entry_id, true, kUrl); |
| 898 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 914 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 899 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 915 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 900 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 916 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 940 // the redirect. | 956 // the redirect. |
| 941 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects | 957 // TODO(carlosk): once the speculative RenderFrameHost updates with redirects |
| 942 // this next check will be changed to verify that it actually happens. | 958 // this next check will be changed to verify that it actually happens. |
| 943 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); | 959 EXPECT_EQ(speculative_rfh, GetSpeculativeRenderFrameHost(node)); |
| 944 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 960 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 945 EXPECT_FALSE(rfh_deleted_observer.deleted()); | 961 EXPECT_FALSE(rfh_deleted_observer.deleted()); |
| 946 | 962 |
| 947 // Commit the navigation with Navigator by simulating the call to | 963 // Commit the navigation with Navigator by simulating the call to |
| 948 // OnResponseStarted. | 964 // OnResponseStarted. |
| 949 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 965 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 966 std::unique_ptr<NavigationData> empty_navigation_data; | |
| 950 GetLoaderForNavigationRequest(main_request) | 967 GetLoaderForNavigationRequest(main_request) |
| 951 ->CallOnResponseStarted(response, MakeEmptyStream()); | 968 ->CallOnResponseStarted(response, MakeEmptyStream(), |
| 969 std::move(empty_navigation_data)); | |
| 952 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 970 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 953 ASSERT_TRUE(speculative_rfh); | 971 ASSERT_TRUE(speculative_rfh); |
| 954 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 972 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 955 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 973 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 956 EXPECT_TRUE(rfh_deleted_observer.deleted()); | 974 EXPECT_TRUE(rfh_deleted_observer.deleted()); |
| 957 | 975 |
| 958 // Once commit happens the speculative RenderFrameHost is updated to match the | 976 // Once commit happens the speculative RenderFrameHost is updated to match the |
| 959 // known final SiteInstance. | 977 // known final SiteInstance. |
| 960 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), | 978 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlRedirect), |
| 961 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 979 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1160 main_test_rfh()->PrepareForCommit(); | 1178 main_test_rfh()->PrepareForCommit(); |
| 1161 | 1179 |
| 1162 // Claim that the navigation was within same page. | 1180 // Claim that the navigation was within same page. |
| 1163 int bad_msg_count = process()->bad_msg_count(); | 1181 int bad_msg_count = process()->bad_msg_count(); |
| 1164 GetSpeculativeRenderFrameHost(node)->SendNavigateWithModificationCallback( | 1182 GetSpeculativeRenderFrameHost(node)->SendNavigateWithModificationCallback( |
| 1165 0, entry_id, true, kUrl2, base::Bind(SetWithinPage, kUrl1)); | 1183 0, entry_id, true, kUrl2, base::Bind(SetWithinPage, kUrl1)); |
| 1166 EXPECT_EQ(process()->bad_msg_count(), bad_msg_count + 1); | 1184 EXPECT_EQ(process()->bad_msg_count(), bad_msg_count + 1); |
| 1167 } | 1185 } |
| 1168 | 1186 |
| 1169 } // namespace content | 1187 } // namespace content |
| OLD | NEW |