Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Side by Side Diff: content/browser/frame_host/navigation_request.cc

Issue 2735183003: PlzNavigate: stop navigations when opening a document for write (Closed)
Patch Set: Rebase + fixed compilation error Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 466
467 // For non browser initiated navigations we need to check if the source has 467 // For non browser initiated navigations we need to check if the source has
468 // access to the URL. We always allow browser initiated requests. 468 // access to the URL. We always allow browser initiated requests.
469 // TODO(clamy): Kill the renderer if FilterURL fails? 469 // TODO(clamy): Kill the renderer if FilterURL fails?
470 GURL url = common_params_.url; 470 GURL url = common_params_.url;
471 if (!browser_initiated_ && source_site_instance()) { 471 if (!browser_initiated_ && source_site_instance()) {
472 source_site_instance()->GetProcess()->FilterURL(false, &url); 472 source_site_instance()->GetProcess()->FilterURL(false, &url);
473 // FilterURL sets the URL to about:blank if the CSP checks prevent the 473 // FilterURL sets the URL to about:blank if the CSP checks prevent the
474 // renderer from accessing it. 474 // renderer from accessing it.
475 if ((url == url::kAboutBlankURL) && (url != common_params_.url)) { 475 if ((url == url::kAboutBlankURL) && (url != common_params_.url)) {
476 frame_tree_node_->ResetNavigationRequest(false); 476 frame_tree_node_->ResetNavigationRequest(false, true);
477 return; 477 return;
478 } 478 }
479 } 479 }
480 480
481 // It's safe to use base::Unretained because this NavigationRequest owns the 481 // It's safe to use base::Unretained because this NavigationRequest owns the
482 // NavigationHandle where the callback will be stored. 482 // NavigationHandle where the callback will be stored.
483 // TODO(clamy): pass the real value for |is_external_protocol| if needed. 483 // TODO(clamy): pass the real value for |is_external_protocol| if needed.
484 navigation_handle_->WillRedirectRequest( 484 navigation_handle_->WillRedirectRequest(
485 common_params_.url, common_params_.method, common_params_.referrer.url, 485 common_params_.url, common_params_.method, common_params_.referrer.url,
486 false, response->head.headers, response->head.connection_info, 486 false, response->head.headers, response->head.connection_info,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 render_frame_host != frame_tree_node_->current_frame_host()) { 545 render_frame_host != frame_tree_node_->current_frame_host()) {
546 // Reset the source location information if the navigation will not commit 546 // Reset the source location information if the navigation will not commit
547 // in the current renderer process. This information originated in another 547 // in the current renderer process. This information originated in another
548 // process (the current one), it should not be transferred to the new one. 548 // process (the current one), it should not be transferred to the new one.
549 common_params_.source_location.reset(); 549 common_params_.source_location.reset();
550 550
551 // Allow the embedder to cancel the cross-process commit if needed. 551 // Allow the embedder to cancel the cross-process commit if needed.
552 // TODO(clamy): Rename ShouldTransferNavigation once PlzNavigate ships. 552 // TODO(clamy): Rename ShouldTransferNavigation once PlzNavigate ships.
553 if (!frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation( 553 if (!frame_tree_node_->navigator()->GetDelegate()->ShouldTransferNavigation(
554 frame_tree_node_->IsMainFrame())) { 554 frame_tree_node_->IsMainFrame())) {
555 frame_tree_node_->ResetNavigationRequest(false); 555 frame_tree_node_->ResetNavigationRequest(false, true);
556 return; 556 return;
557 } 557 }
558 } 558 }
559 559
560 if (navigation_data) 560 if (navigation_data)
561 navigation_handle_->set_navigation_data(std::move(navigation_data)); 561 navigation_handle_->set_navigation_data(std::move(navigation_data));
562 562
563 // Store the response and the StreamHandle until checks have been processed. 563 // Store the response and the StreamHandle until checks have been processed.
564 response_ = response; 564 response_ = response;
565 body_ = std::move(body); 565 body_ = std::move(body);
(...skipping 18 matching lines...) Expand all
584 // WebUI backend won't find a handler for them. They will be processed in the 584 // WebUI backend won't find a handler for them. They will be processed in the
585 // renderer, however do not discard the pending entry so that the URL bar 585 // renderer, however do not discard the pending entry so that the URL bar
586 // shows them correctly. 586 // shows them correctly.
587 if (!IsRendererDebugURL(common_params_.url)) { 587 if (!IsRendererDebugURL(common_params_.url)) {
588 frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded( 588 frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded(
589 navigation_handle_.get()); 589 navigation_handle_.get());
590 } 590 }
591 591
592 // If the request was canceled by the user do not show an error page. 592 // If the request was canceled by the user do not show an error page.
593 if (net_error == net::ERR_ABORTED) { 593 if (net_error == net::ERR_ABORTED) {
594 frame_tree_node_->ResetNavigationRequest(false); 594 frame_tree_node_->ResetNavigationRequest(false, true);
595 return; 595 return;
596 } 596 }
597 597
598 // There are two types of error pages that need to be handled differently. 598 // There are two types of error pages that need to be handled differently.
599 // * Error pages resulting from blocking the request, because the original 599 // * Error pages resulting from blocking the request, because the original
600 // document wasn't even allowed to make the request. In such case, 600 // document wasn't even allowed to make the request. In such case,
601 // the error pages should be committed in the process of the original 601 // the error pages should be committed in the process of the original
602 // document, to avoid creating a process for the destination. 602 // document, to avoid creating a process for the destination.
603 // * Error pages resulting from either network outage (no network, DNS 603 // * Error pages resulting from either network outage (no network, DNS
604 // error, etc) or similar cases, where the user can reasonably expect that 604 // error, etc) or similar cases, where the user can reasonably expect that
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 frame_tree_node_->render_manager()->speculative_frame_host()); 819 frame_tree_node_->render_manager()->speculative_frame_host());
820 820
821 TransferNavigationHandleOwnership(render_frame_host); 821 TransferNavigationHandleOwnership(render_frame_host);
822 822
823 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture); 823 DCHECK_EQ(request_params_.has_user_gesture, begin_params_.has_user_gesture);
824 824
825 render_frame_host->CommitNavigation(response_.get(), std::move(body_), 825 render_frame_host->CommitNavigation(response_.get(), std::move(body_),
826 common_params_, request_params_, 826 common_params_, request_params_,
827 is_view_source_); 827 is_view_source_);
828 828
829 frame_tree_node_->ResetNavigationRequest(true); 829 frame_tree_node_->ResetNavigationRequest(true, true);
830 } 830 }
831 831
832 } // namespace content 832 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698