| 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();
|
| }
|
|
|