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 "content/browser/frame_host/navigation_request.h" | 5 #include "content/browser/frame_host/navigation_request.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "content/browser/child_process_security_policy_impl.h" | 9 #include "content/browser/child_process_security_policy_impl.h" |
| 10 #include "content/browser/devtools/render_frame_devtools_agent_host.h" | 10 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 439 render_frame_host, response->head.headers.get(), | 439 render_frame_host, response->head.headers.get(), |
| 440 response->head.connection_info, ssl_status, request_id, | 440 response->head.connection_info, ssl_status, request_id, |
| 441 common_params_.should_replace_current_entry, is_download, is_stream, | 441 common_params_.should_replace_current_entry, is_download, is_stream, |
| 442 base::Closure(), | 442 base::Closure(), |
| 443 base::Bind(&NavigationRequest::OnWillProcessResponseChecksComplete, | 443 base::Bind(&NavigationRequest::OnWillProcessResponseChecksComplete, |
| 444 base::Unretained(this))); | 444 base::Unretained(this))); |
| 445 } | 445 } |
| 446 | 446 |
| 447 void NavigationRequest::OnRequestFailed(bool has_stale_copy_in_cache, | 447 void NavigationRequest::OnRequestFailed(bool has_stale_copy_in_cache, |
| 448 int net_error) { | 448 int net_error) { |
| 449 DCHECK(state_ == STARTED); | 449 DCHECK(state_ == STARTED || state_ == RESPONSE_STARTED); |
| 450 state_ = FAILED; | 450 state_ = FAILED; |
| 451 navigation_handle_->set_net_error_code(static_cast<net::Error>(net_error)); | 451 navigation_handle_->set_net_error_code(static_cast<net::Error>(net_error)); |
| 452 frame_tree_node_->navigator()->FailedNavigation( | 452 frame_tree_node_->navigator()->FailedNavigation( |
| 453 frame_tree_node_, has_stale_copy_in_cache, net_error); | 453 frame_tree_node_, has_stale_copy_in_cache, net_error); |
| 454 } | 454 } |
| 455 | 455 |
| 456 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { | 456 void NavigationRequest::OnRequestStarted(base::TimeTicks timestamp) { |
| 457 if (frame_tree_node_->IsMainFrame()) { | 457 if (frame_tree_node_->IsMainFrame()) { |
| 458 TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0( | 458 TRACE_EVENT_ASYNC_END_WITH_TIMESTAMP0( |
| 459 "navigation", "Navigation timeToNetworkStack", navigation_handle_.get(), | 459 "navigation", "Navigation timeToNetworkStack", navigation_handle_.get(), |
| 460 timestamp); | 460 timestamp); |
| 461 } | 461 } |
| 462 | 462 |
| 463 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, | 463 frame_tree_node_->navigator()->LogResourceRequestTime(timestamp, |
| 464 common_params_.url); | 464 common_params_.url); |
| 465 } | 465 } |
| 466 | 466 |
| 467 void NavigationRequest::OnStartChecksComplete( | 467 void NavigationRequest::OnStartChecksComplete( |
| 468 NavigationThrottle::ThrottleCheckResult result) { | 468 NavigationThrottle::ThrottleCheckResult result) { |
| 469 CHECK(result != NavigationThrottle::DEFER); | 469 CHECK(result != NavigationThrottle::DEFER); |
| 470 CHECK(result != NavigationThrottle::BLOCK_RESPONSE); | |
|
clamy
2016/12/09 17:14:01
nit: this should be changed to DCHECK. Same below.
| |
| 470 | 471 |
| 471 // Abort the request if needed. This will destroy the NavigationRequest. | 472 // Abort the request if needed. This will destroy the NavigationRequest. |
| 472 if (result == NavigationThrottle::CANCEL_AND_IGNORE || | 473 if (result == NavigationThrottle::CANCEL_AND_IGNORE || |
| 473 result == NavigationThrottle::CANCEL) { | 474 result == NavigationThrottle::CANCEL) { |
| 474 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. | 475 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. |
| 475 frame_tree_node_->ResetNavigationRequest(false); | 476 frame_tree_node_->ResetNavigationRequest(false); |
| 476 return; | 477 return; |
| 477 } | 478 } |
| 478 | 479 |
| 479 if (result == NavigationThrottle::BLOCK_REQUEST) { | 480 if (result == NavigationThrottle::BLOCK_REQUEST) { |
| 480 OnRequestFailed(false, net::ERR_BLOCKED_BY_CLIENT); | 481 OnRequestFailed(false, net::ERR_BLOCKED_BY_CLIENT); |
| 482 // DO NOT ADD CODE after this. The previous call to OnRequestFailed have | |
|
clamy
2016/12/09 17:14:01
nit:s/have/has
arthursonzogni
2016/12/13 15:32:13
Done
| |
| 483 // destroyed the NavigationRequest. | |
| 481 return; | 484 return; |
| 482 } | 485 } |
| 483 | 486 |
| 484 // Use the SiteInstance of the navigating RenderFrameHost to get access to | 487 // Use the SiteInstance of the navigating RenderFrameHost to get access to |
| 485 // the StoragePartition. Using the url of the navigation will result in a | 488 // the StoragePartition. Using the url of the navigation will result in a |
| 486 // wrong StoragePartition being picked when a WebView is navigating. | 489 // wrong StoragePartition being picked when a WebView is navigating. |
| 487 DCHECK_NE(AssociatedSiteInstanceType::NONE, associated_site_instance_type_); | 490 DCHECK_NE(AssociatedSiteInstanceType::NONE, associated_site_instance_type_); |
| 488 RenderFrameHostImpl* navigating_frame_host = | 491 RenderFrameHostImpl* navigating_frame_host = |
| 489 associated_site_instance_type_ == AssociatedSiteInstanceType::SPECULATIVE | 492 associated_site_instance_type_ == AssociatedSiteInstanceType::SPECULATIVE |
| 490 ? frame_tree_node_->render_manager()->speculative_frame_host() | 493 ? frame_tree_node_->render_manager()->speculative_frame_host() |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 parent_is_main_frame, IsSecureFrame(frame_tree_node_->parent()), | 547 parent_is_main_frame, IsSecureFrame(frame_tree_node_->parent()), |
| 545 frame_tree_node_->frame_tree_node_id(), is_for_guests_only, | 548 frame_tree_node_->frame_tree_node_id(), is_for_guests_only, |
| 546 report_raw_headers), | 549 report_raw_headers), |
| 547 std::move(navigation_ui_data), | 550 std::move(navigation_ui_data), |
| 548 navigation_handle_->service_worker_handle(), this); | 551 navigation_handle_->service_worker_handle(), this); |
| 549 } | 552 } |
| 550 | 553 |
| 551 void NavigationRequest::OnRedirectChecksComplete( | 554 void NavigationRequest::OnRedirectChecksComplete( |
| 552 NavigationThrottle::ThrottleCheckResult result) { | 555 NavigationThrottle::ThrottleCheckResult result) { |
| 553 CHECK(result != NavigationThrottle::DEFER); | 556 CHECK(result != NavigationThrottle::DEFER); |
| 557 CHECK(result != NavigationThrottle::BLOCK_RESPONSE); | |
| 554 | 558 |
| 555 // Abort the request if needed. This will destroy the NavigationRequest. | 559 // Abort the request if needed. This will destroy the NavigationRequest. |
| 556 if (result == NavigationThrottle::CANCEL_AND_IGNORE || | 560 if (result == NavigationThrottle::CANCEL_AND_IGNORE || |
| 557 result == NavigationThrottle::CANCEL) { | 561 result == NavigationThrottle::CANCEL) { |
| 558 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. | 562 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. |
| 559 frame_tree_node_->ResetNavigationRequest(false); | 563 frame_tree_node_->ResetNavigationRequest(false); |
| 560 return; | 564 return; |
| 561 } | 565 } |
| 562 | 566 |
| 563 loader_->FollowRedirect(); | 567 loader_->FollowRedirect(); |
| 564 } | 568 } |
| 565 | 569 |
| 566 void NavigationRequest::OnWillProcessResponseChecksComplete( | 570 void NavigationRequest::OnWillProcessResponseChecksComplete( |
| 567 NavigationThrottle::ThrottleCheckResult result) { | 571 NavigationThrottle::ThrottleCheckResult result) { |
| 568 CHECK(result != NavigationThrottle::DEFER); | 572 CHECK(result != NavigationThrottle::DEFER); |
| 569 | 573 |
| 570 // Abort the request if needed. This will destroy the NavigationRequest. | 574 // Abort the request if needed. This will destroy the NavigationRequest. |
| 571 if (result == NavigationThrottle::CANCEL_AND_IGNORE || | 575 if (result == NavigationThrottle::CANCEL_AND_IGNORE || |
| 572 result == NavigationThrottle::CANCEL) { | 576 result == NavigationThrottle::CANCEL) { |
| 573 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. | 577 // TODO(clamy): distinguish between CANCEL and CANCEL_AND_IGNORE. |
| 574 frame_tree_node_->ResetNavigationRequest(false); | 578 frame_tree_node_->ResetNavigationRequest(false); |
| 575 return; | 579 return; |
| 576 } | 580 } |
| 577 | 581 |
| 582 if (result == NavigationThrottle::BLOCK_RESPONSE) { | |
| 583 OnRequestFailed(false, net::ERR_BLOCKED_BY_RESPONSE); | |
| 584 // DO NOT ADD CODE after this. The previous call to OnRequestFailed have | |
|
clamy
2016/12/09 17:14:01
nit:s/have/has
arthursonzogni
2016/12/13 15:32:13
Done.
| |
| 585 // destroyed the NavigationRequest. | |
| 586 return; | |
| 587 } | |
| 588 | |
| 578 // Have the processing of the response resume in the network stack. | 589 // Have the processing of the response resume in the network stack. |
| 579 loader_->ProceedWithResponse(); | 590 loader_->ProceedWithResponse(); |
| 580 | 591 |
| 581 CommitNavigation(); | 592 CommitNavigation(); |
| 582 | 593 |
| 583 // DO NOT ADD CODE after this. The previous call to CommitNavigation caused | 594 // DO NOT ADD CODE after this. The previous call to CommitNavigation caused |
| 584 // the destruction of the NavigationRequest. | 595 // the destruction of the NavigationRequest. |
| 585 } | 596 } |
| 586 | 597 |
| 587 void NavigationRequest::CommitNavigation() { | 598 void NavigationRequest::CommitNavigation() { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 599 TransferNavigationHandleOwnership(render_frame_host); | 610 TransferNavigationHandleOwnership(render_frame_host); |
| 600 | 611 |
| 601 render_frame_host->CommitNavigation(response_.get(), std::move(body_), | 612 render_frame_host->CommitNavigation(response_.get(), std::move(body_), |
| 602 common_params_, request_params_, | 613 common_params_, request_params_, |
| 603 is_view_source_); | 614 is_view_source_); |
| 604 | 615 |
| 605 frame_tree_node_->ResetNavigationRequest(true); | 616 frame_tree_node_->ResetNavigationRequest(true); |
| 606 } | 617 } |
| 607 | 618 |
| 608 } // namespace content | 619 } // namespace content |
| OLD | NEW |