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

Unified Diff: content/browser/frame_host/navigation_handle_impl.cc

Issue 2698623006: PlzNavigate: add support for BLOCK_REQUEST during redirects (Closed)
Patch Set: Take CL from: https://codereview.chromium.org/2729433003/ 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/frame_host/navigation_handle_impl.cc
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc
index 2e525bbe4956a473d0c41d0d2051e1d5801bdef4..aa09fe9997c00d754f8996a6f004ee86f0683815 100644
--- a/content/browser/frame_host/navigation_handle_impl.cc
+++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -317,6 +317,18 @@ void NavigationHandleImpl::Resume() {
result = CheckWillStartRequest();
} else if (state_ == DEFERRING_REDIRECT) {
result = CheckWillRedirectRequest();
+ if (!IsBrowserSideNavigationEnabled() &&
+ result != NavigationThrottle::PROCEED &&
+ result != NavigationThrottle::DEFER) {
+ // The renderer will not be informed of the redirect, as the navigation
+ // will have been cancelled before sending the
+ // ResourceMsg_ReceivedRedirect IPC. Reset the URL of the NavigationHandle
+ // to the URL it had prior to the redirect, to match the commit of an
+ // error page.
+ redirect_chain_.pop_back();
+ DCHECK(!redirect_chain_.empty());
+ url_ = redirect_chain_.back();
Charlie Reis 2017/03/09 17:39:03 Does this mean that if we're redirecting from A to
arthursonzogni 2017/03/10 11:55:28 Yes unfortunately.
+ }
} else {
result = CheckWillProcessResponse();
@@ -563,14 +575,27 @@ void NavigationHandleImpl::WillRedirectRequest(
state_ = WILL_REDIRECT_REQUEST;
complete_callback_ = callback;
+ // Notify each throttle of the request.
+ NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER;
if (IsSelfReferentialURL()) {
state_ = CANCELING;
- RunCompleteCallback(NavigationThrottle::CANCEL);
- return;
+ result = NavigationThrottle::CANCEL;
+ } else {
+ result = CheckWillRedirectRequest();
}
- // Notify each throttle of the request.
- NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest();
+ if (!IsBrowserSideNavigationEnabled() &&
+ result != NavigationThrottle::PROCEED &&
+ result != NavigationThrottle::DEFER) {
+ // The renderer will not be informed of the redirect, as the navigation
+ // will have been cancelled before sending the
+ // ResourceMsg_ReceivedRedirect IPC. Reset the URL of the NavigationHandle
+ // to the URL it had prior to the redirect, to match the commit of an
+ // error page.
+ redirect_chain_.pop_back();
+ DCHECK(!redirect_chain_.empty());
+ url_ = redirect_chain_.back();
+ }
// If the navigation is not deferred, run the callback.
if (result != NavigationThrottle::DEFER)
@@ -683,9 +708,9 @@ NavigationHandleImpl::CheckWillStartRequest() {
case NavigationThrottle::PROCEED:
continue;
+ case NavigationThrottle::BLOCK_REQUEST:
case NavigationThrottle::CANCEL:
case NavigationThrottle::CANCEL_AND_IGNORE:
- case NavigationThrottle::BLOCK_REQUEST:
state_ = CANCELING;
return result;
@@ -715,6 +740,7 @@ NavigationHandleImpl::CheckWillRedirectRequest() {
case NavigationThrottle::PROCEED:
continue;
+ case NavigationThrottle::BLOCK_REQUEST:
case NavigationThrottle::CANCEL:
case NavigationThrottle::CANCEL_AND_IGNORE:
state_ = CANCELING;
@@ -725,7 +751,6 @@ NavigationHandleImpl::CheckWillRedirectRequest() {
next_index_ = i + 1;
return result;
- case NavigationThrottle::BLOCK_REQUEST:
case NavigationThrottle::BLOCK_RESPONSE:
NOTREACHED();
Charlie Reis 2017/03/09 17:39:03 Unrelated: NOTREACHED is compiled out of release b
arthursonzogni 2017/03/10 11:55:28 It is impossible to have NavigationThrottle::BLOCK
Charlie Reis 2017/03/13 20:48:02 My concern was that a poorly written NavigationThr
}

Powered by Google App Engine
This is Rietveld 408576698