Index: components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.cc |
diff --git a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.cc b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.cc |
index 5b1204fbcb145991ebc8a455bdb04cf400de05b0..fddc75bd4d237f1f23e968a3f9bcf14ac66dce20 100644 |
--- a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.cc |
+++ b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle.cc |
@@ -58,12 +58,11 @@ void ActivationStateComputingNavigationThrottle:: |
const ActivationState& page_activation_state) { |
DCHECK(navigation_handle()->IsInMainFrame()); |
DCHECK(!parent_activation_state_); |
- DCHECK(!activation_state_); |
DCHECK(!ruleset_handle_); |
// DISABLED implies null ruleset. |
DCHECK(page_activation_state.activation_level != ActivationLevel::DISABLED || |
!ruleset_handle); |
- parent_activation_state_.emplace(page_activation_state); |
+ parent_activation_state_ = page_activation_state; |
ruleset_handle_ = ruleset_handle; |
} |
@@ -75,7 +74,6 @@ ActivationStateComputingNavigationThrottle::WillProcessResponse() { |
parent_activation_state_->activation_level == ActivationLevel::DISABLED) { |
DCHECK(navigation_handle()->IsInMainFrame()); |
DCHECK(!ruleset_handle_); |
- activation_state_.emplace(ActivationLevel::DISABLED); |
return content::NavigationThrottle::ThrottleCheckResult::PROCEED; |
} |
@@ -90,34 +88,31 @@ ActivationStateComputingNavigationThrottle::WillProcessResponse() { |
DCHECK(parent); |
params.parent_document_origin = parent->GetLastCommittedOrigin(); |
} |
- // TODO(csharrison): Replace the empty OnceClosure with a UI-triggering |
- // callback. |
+ |
async_filter_ = base::MakeUnique<AsyncDocumentSubresourceFilter>( |
ruleset_handle_, std::move(params), |
base::Bind(&ActivationStateComputingNavigationThrottle:: |
- SetActivationStateAndResume, |
- weak_ptr_factory_.GetWeakPtr()), |
- base::OnceClosure()); |
+ OnActivationStateComputed, |
+ weak_ptr_factory_.GetWeakPtr())); |
return content::NavigationThrottle::ThrottleCheckResult::DEFER; |
} |
-void ActivationStateComputingNavigationThrottle::SetActivationStateAndResume( |
+void ActivationStateComputingNavigationThrottle::OnActivationStateComputed( |
ActivationState state) { |
- // Cannot send activation level to the renderer until ReadyToCommitNavigation, |
- // the driver will pull the state out of |this| when that callback occurs. |
- DCHECK(!activation_state_); |
- activation_state_.emplace(state); |
navigation_handle()->Resume(); |
} |
+// Ensure the caller cannot take ownership of a subresource filter for cases |
+// when activation IPCs are not sent to the render process. |
std::unique_ptr<AsyncDocumentSubresourceFilter> |
ActivationStateComputingNavigationThrottle::ReleaseFilter() { |
- return std::move(async_filter_); |
+ return will_send_activation_to_renderer_ ? std::move(async_filter_) : nullptr; |
} |
-const ActivationState& |
-ActivationStateComputingNavigationThrottle::GetActivationState() const { |
- return activation_state_.value(); |
+void ActivationStateComputingNavigationThrottle:: |
+ WillSendActivationToRenderer() { |
+ DCHECK(async_filter_); |
+ will_send_activation_to_renderer_ = true; |
} |
} // namespace subresource_filter |