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 a5459d616a3ec8087786bbe6be27ca47b1aa541f..4618ff5ead4a88123ac9044bc785e72edbf3ca11 100644 |
--- a/content/browser/frame_host/navigation_handle_impl.cc |
+++ b/content/browser/frame_host/navigation_handle_impl.cc |
@@ -338,7 +338,14 @@ 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(state_ != DEFERRING_RESPONSE || |
+ result != NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE); |
+ |
+ if (result == NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE) |
+ frame_tree_node_->SetFrameOwnerCollapsedState(true); |
+ |
state_ = CANCELING; |
RunCompleteCallback(result); |
} |
@@ -649,6 +656,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()->SetFrameOwnerCollapsedState(false); |
} |
} |
@@ -681,6 +695,11 @@ NavigationHandleImpl::CheckWillStartRequest() { |
state_ = CANCELING; |
return result; |
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: |
+ frame_tree_node_->SetFrameOwnerCollapsedState(true); |
+ state_ = CANCELING; |
+ return result; |
+ |
case NavigationThrottle::DEFER: |
state_ = DEFERRING_START; |
next_index_ = i + 1; |
@@ -712,6 +731,11 @@ NavigationHandleImpl::CheckWillRedirectRequest() { |
state_ = CANCELING; |
return result; |
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: |
+ frame_tree_node_->SetFrameOwnerCollapsedState(true); |
+ state_ = CANCELING; |
+ return result; |
+ |
case NavigationThrottle::DEFER: |
state_ = DEFERRING_REDIRECT; |
next_index_ = i + 1; |
@@ -756,6 +780,7 @@ NavigationHandleImpl::CheckWillProcessResponse() { |
return result; |
case NavigationThrottle::BLOCK_REQUEST: |
+ case NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE: |
NOTREACHED(); |
} |
} |