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

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

Issue 2632633006: Implement NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE. (Closed)
Patch Set: ... and without breaking stuff. Created 3 years, 8 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 46866467c1b8cdbff04a4724cd1a56569396b7e6..bde20dbda9394cd0a29c40d6028a5777656d15c1 100644
--- a/content/browser/frame_host/navigation_handle_impl.cc
+++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -355,7 +355,15 @@ void NavigationHandleImpl::CancelDeferredNavigation(
state_ == DEFERRING_REDIRECT ||
state_ == DEFERRING_RESPONSE);
DCHECK(result == NavigationThrottle::CANCEL_AND_IGNORE ||
- result == NavigationThrottle::CANCEL);
+ result == NavigationThrottle::CANCEL ||
+ result == NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE);
+ DCHECK(result != NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE ||
+ state_ == DEFERRING_START ||
+ (state_ == DEFERRING_REDIRECT && IsBrowserSideNavigationEnabled()));
+
+ if (result == NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE)
+ frame_tree_node_->SetCollapsed(true);
+
state_ = CANCELING;
RunCompleteCallback(result);
}
@@ -680,6 +688,13 @@ void NavigationHandleImpl::DidCommitNavigation(
state_ = DID_COMMIT_ERROR_PAGE;
} else {
state_ = DID_COMMIT;
+
+ // Getting this far means that the navigation was not blocked, and neither
+ // is this the error page navigation following a blocked navigation. Ensure
+ // the frame owner element is no longer collapsed as a result of a prior
+ // navigation having been blocked with BLOCK_REQUEST_AND_COLLAPSE.
+ if (!frame_tree_node()->IsMainFrame())
+ frame_tree_node()->SetCollapsed(false);
clamy 2017/04/24 13:15:18 What about SameDocument navigations? We should che
engedy 2017/04/28 13:43:59 If the frame is currently collapsed, it will be sh
}
if (url_.SchemeIs(url::kDataScheme) && IsInMainFrame() &&
@@ -722,6 +737,11 @@ NavigationHandleImpl::CheckWillStartRequest() {
state_ = CANCELING;
return result;
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
clamy 2017/04/24 13:15:18 nit: I'd prefer if we were consistent when using f
engedy 2017/04/28 13:43:58 Done.
+ frame_tree_node_->SetCollapsed(true);
+ state_ = CANCELING;
+ return result;
+
case NavigationThrottle::DEFER:
state_ = DEFERRING_START;
next_index_ = i + 1;
@@ -748,9 +768,13 @@ NavigationHandleImpl::CheckWillRedirectRequest() {
case NavigationThrottle::PROCEED:
continue;
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
+ frame_tree_node_->SetCollapsed(true);
+ // Fall through.
nasko 2017/04/20 15:53:40 nit: Indent this to match the call above.
engedy 2017/04/28 13:43:59 I moved it after the call, clang-format does not l
case NavigationThrottle::BLOCK_REQUEST:
CHECK(IsBrowserSideNavigationEnabled())
- << "BLOCK_REQUEST must not be used on redirect without PlzNavigate";
+ << "BLOCK_REQUEST and BLOCK_REQUEST_AND_COLLAPSE must not be used "
+ "on redirect without PlzNavigate";
case NavigationThrottle::CANCEL:
case NavigationThrottle::CANCEL_AND_IGNORE:
state_ = CANCELING;
@@ -799,6 +823,7 @@ NavigationHandleImpl::CheckWillProcessResponse() {
return result;
case NavigationThrottle::BLOCK_REQUEST:
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE:
NOTREACHED();
}
}

Powered by Google App Engine
This is Rietveld 408576698