| 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 "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "content/browser/appcache/appcache_navigation_handle.h" | 10 #include "content/browser/appcache/appcache_navigation_handle.h" |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 | 473 |
| 474 // For non browser initiated navigations we need to check if the source has | 474 // For non browser initiated navigations we need to check if the source has |
| 475 // access to the URL. We always allow browser initiated requests. | 475 // access to the URL. We always allow browser initiated requests. |
| 476 // TODO(clamy): Kill the renderer if FilterURL fails? | 476 // TODO(clamy): Kill the renderer if FilterURL fails? |
| 477 GURL url = common_params_.url; | 477 GURL url = common_params_.url; |
| 478 if (!browser_initiated_ && source_site_instance()) { | 478 if (!browser_initiated_ && source_site_instance()) { |
| 479 source_site_instance()->GetProcess()->FilterURL(false, &url); | 479 source_site_instance()->GetProcess()->FilterURL(false, &url); |
| 480 // FilterURL sets the URL to about:blank if the CSP checks prevent the | 480 // FilterURL sets the URL to about:blank if the CSP checks prevent the |
| 481 // renderer from accessing it. | 481 // renderer from accessing it. |
| 482 if ((url == url::kAboutBlankURL) && (url != common_params_.url)) { | 482 if ((url == url::kAboutBlankURL) && (url != common_params_.url)) { |
| 483 frame_tree_node_->ResetNavigationRequest(false); | 483 frame_tree_node_->ResetNavigationRequest(false, true); |
| 484 return; | 484 return; |
| 485 } | 485 } |
| 486 } | 486 } |
| 487 | 487 |
| 488 // It's safe to use base::Unretained because this NavigationRequest owns the | 488 // It's safe to use base::Unretained because this NavigationRequest owns the |
| 489 // NavigationHandle where the callback will be stored. | 489 // NavigationHandle where the callback will be stored. |
| 490 // TODO(clamy): pass the real value for |is_external_protocol| if needed. | 490 // TODO(clamy): pass the real value for |is_external_protocol| if needed. |
| 491 navigation_handle_->WillRedirectRequest( | 491 navigation_handle_->WillRedirectRequest( |
| 492 common_params_.url, common_params_.method, common_params_.referrer.url, | 492 common_params_.url, common_params_.method, common_params_.referrer.url, |
| 493 false, response->head.headers, response->head.connection_info, | 493 false, response->head.headers, response->head.connection_info, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 render_frame_host != frame_tree_node_->current_frame_host()) { | 552 render_frame_host != frame_tree_node_->current_frame_host()) { |
| 553 // Reset the source location information if the navigation will not commit | 553 // Reset the source location information if the navigation will not commit |
| 554 // in the current renderer process. This information originated in another | 554 // in the current renderer process. This information originated in another |
| 555 // process (the current one), it should not be transferred to the new one. | 555 // process (the current one), it should not be transferred to the new one. |
| 556 common_params_.source_location.reset(); | 556 common_params_.source_location.reset(); |
| 557 | 557 |
| 558 // Allow the embedder to cancel the cross-process commit if needed. | 558 // Allow the embedder to cancel the cross-process commit if needed. |
| 559 // TODO(clamy): Rename ShouldTransferNavigation once PlzNavigate ships. | 559 // TODO(clamy): Rename ShouldTransferNavigation once PlzNavigate ships. |
| 560 if (!frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation( | 560 if (!frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation( |
| 561 frame_tree_node_->IsMainFrame())) { | 561 frame_tree_node_->IsMainFrame())) { |
| 562 frame_tree_node_->ResetNavigationRequest(false); | 562 frame_tree_node_->ResetNavigationRequest(false, true); |
| 563 return; | 563 return; |
| 564 } | 564 } |
| 565 } | 565 } |
| 566 | 566 |
| 567 if (navigation_data) | 567 if (navigation_data) |
| 568 navigation_handle_->set_navigation_data(std::move(navigation_data)); | 568 navigation_handle_->set_navigation_data(std::move(navigation_data)); |
| 569 | 569 |
| 570 // Store the response and the StreamHandle until checks have been processed. | 570 // Store the response and the StreamHandle until checks have been processed. |
| 571 response_ = response; | 571 response_ = response; |
| 572 body_ = std::move(body); | 572 body_ = std::move(body); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 591 // WebUI backend won't find a handler for them. They will be processed in the | 591 // WebUI backend won't find a handler for them. They will be processed in the |
| 592 // renderer, however do not discard the pending entry so that the URL bar | 592 // renderer, however do not discard the pending entry so that the URL bar |
| 593 // shows them correctly. | 593 // shows them correctly. |
| 594 if (!IsRendererDebugURL(common_params_.url)) { | 594 if (!IsRendererDebugURL(common_params_.url)) { |
| 595 frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded( | 595 frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded( |
| 596 navigation_handle_.get()); | 596 navigation_handle_.get()); |
| 597 } | 597 } |
| 598 | 598 |
| 599 // If the request was canceled by the user do not show an error page. | 599 // If the request was canceled by the user do not show an error page. |
| 600 if (net_error == net::ERR_ABORTED) { | 600 if (net_error == net::ERR_ABORTED) { |
| 601 frame_tree_node_->ResetNavigationRequest(false); | 601 frame_tree_node_->ResetNavigationRequest(false, true); |
| 602 return; | 602 return; |
| 603 } | 603 } |
| 604 | 604 |
| 605 // There are two types of error pages that need to be handled differently. | 605 // There are two types of error pages that need to be handled differently. |
| 606 // * Error pages resulting from blocking the request, because the original | 606 // * Error pages resulting from blocking the request, because the original |
| 607 // document wasn't even allowed to make the request. In such case, | 607 // document wasn't even allowed to make the request. In such case, |
| 608 // the error pages should be committed in the process of the original | 608 // the error pages should be committed in the process of the original |
| 609 // document, to avoid creating a process for the destination. | 609 // document, to avoid creating a process for the destination. |
| 610 // * Error pages resulting from either network outage (no network, DNS | 610 // * Error pages resulting from either network outage (no network, DNS |
| 611 // error, etc) or similar cases, where the user can reasonably expect that | 611 // error, etc) or similar cases, where the user can reasonably expect that |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 frame_tree_node_->render_manager()->speculative_frame_host()); | 826 frame_tree_node_->render_manager()->speculative_frame_host()); |
| 827 | 827 |
| 828 TransferNavigationHandleOwnership(render_frame_host); | 828 TransferNavigationHandleOwnership(render_frame_host); |
| 829 | 829 |
| 830 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); | 830 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); |
| 831 | 831 |
| 832 render_frame_host->CommitNavigation(response_.get(), std::move(body_), | 832 render_frame_host->CommitNavigation(response_.get(), std::move(body_), |
| 833 common_params_, request_params_, | 833 common_params_, request_params_, |
| 834 is_view_source_); | 834 is_view_source_); |
| 835 | 835 |
| 836 frame_tree_node_->ResetNavigationRequest(true); | 836 frame_tree_node_->ResetNavigationRequest(true, true); |
| 837 } | 837 } |
| 838 | 838 |
| 839 } // namespace content | 839 } // namespace content |
| OLD | NEW |