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

Unified Diff: components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc

Issue 2632633006: Implement NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE. (Closed)
Patch Set: Rebase. Created 3 years, 7 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: components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
diff --git a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
index 020b42f8bf4d5e85601f6447fe5b3c873804a383..c3e65b4e49fd54ea8356f1cfe1b3435c79d2f7b8 100644
--- a/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
+++ b/components/subresource_filter/content/browser/subframe_navigation_filtering_throttle.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/logging.h"
#include "content/public/browser/navigation_handle.h"
+#include "content/public/common/browser_side_navigation_policy.h"
namespace subresource_filter {
@@ -24,12 +25,12 @@ SubframeNavigationFilteringThrottle::~SubframeNavigationFilteringThrottle() {}
content::NavigationThrottle::ThrottleCheckResult
SubframeNavigationFilteringThrottle::WillStartRequest() {
- return DeferToCalculateLoadPolicy();
+ return DeferToCalculateLoadPolicy(false /* is_redirect */);
}
content::NavigationThrottle::ThrottleCheckResult
SubframeNavigationFilteringThrottle::WillRedirectRequest() {
- return DeferToCalculateLoadPolicy();
+ return DeferToCalculateLoadPolicy(true /* is_redirect */);
}
const char* SubframeNavigationFilteringThrottle::GetNameForLogging() {
@@ -37,22 +38,29 @@ const char* SubframeNavigationFilteringThrottle::GetNameForLogging() {
}
content::NavigationThrottle::ThrottleCheckResult
-SubframeNavigationFilteringThrottle::DeferToCalculateLoadPolicy() {
+SubframeNavigationFilteringThrottle::DeferToCalculateLoadPolicy(
+ bool is_redirect) {
parent_frame_filter_->GetLoadPolicyForSubdocument(
navigation_handle()->GetURL(),
base::Bind(&SubframeNavigationFilteringThrottle::OnCalculatedLoadPolicy,
- weak_ptr_factory_.GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr(), is_redirect));
return content::NavigationThrottle::ThrottleCheckResult::DEFER;
}
void SubframeNavigationFilteringThrottle::OnCalculatedLoadPolicy(
+ bool was_deferring_redirect,
LoadPolicy policy) {
// TODO(csharrison): Support WouldDisallow pattern and expose the policy for
- // metrics. Also, cancel with BLOCK_AND_COLLAPSE when it is implemented.
+ // metrics.
if (policy == LoadPolicy::DISALLOW) {
parent_frame_filter_->ReportDisallowedLoad();
+
+ const bool block_and_collapse_is_supported =
+ content::IsBrowserSideNavigationEnabled() || !was_deferring_redirect;
navigation_handle()->CancelDeferredNavigation(
- content::NavigationThrottle::CANCEL);
+ block_and_collapse_is_supported
+ ? content::NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE
+ : content::NavigationThrottle::CANCEL);
} else {
navigation_handle()->Resume();
}

Powered by Google App Engine
This is Rietveld 408576698