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

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

Issue 2844063002: Add support for multiple simultaneous subresource_filter::Configurations. (Closed)
Patch Set: Minimal polish, still missing unittests for multiple simultaneous configs. 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: components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
index 90c0cb1883d1e5745533ad1ee9340bd526de8d57..926f4c25ceb1d41da3cb8f77409011ffdf9ec0a4 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
+++ b/components/subresource_filter/content/browser/content_subresource_filter_driver_factory.cc
@@ -91,10 +91,7 @@ ContentSubresourceFilterDriverFactory::ContentSubresourceFilterDriverFactory(
base::MakeUnique<ContentSubresourceFilterThrottleManager>(
this,
client_->GetRulesetDealer(),
- web_contents)),
- activation_level_(ActivationLevel::DISABLED),
- activation_decision_(ActivationDecision::UNKNOWN),
- measure_performance_(false) {}
+ web_contents)) {}
ContentSubresourceFilterDriverFactory::
~ContentSubresourceFilterDriverFactory() {}
@@ -109,30 +106,47 @@ void ContentSubresourceFilterDriverFactory::
url, GetListForThreatTypeAndMetadata(threat_type, threat_type_metadata));
}
+void ContentSubresourceFilterDriverFactory::
+ ComputeActivationDecisionForMainFrameNavigation(
+ content::NavigationHandle* navigation_handle) {
+ activation_decision_ = ActivationDecision::ACTIVATION_DISABLED;
+ const auto active_configs = GetActiveConfigurations();
+ for (const auto& config : active_configs->ordered_configs()) {
+ ActivationDecision decision =
+ ComputePerConfigActivationDecisionForMainFrameNavigation(
+ navigation_handle, config);
+ if (decision != ActivationDecision::ACTIVATION_DISABLED)
+ activation_decision_ = decision;
+ if (activation_decision_ == ActivationDecision::ACTIVATED) {
+ configuration_owner_ = active_configs;
+ configuration_ = &config;
+ break;
+ }
+ }
+}
+
ContentSubresourceFilterDriverFactory::ActivationDecision
ContentSubresourceFilterDriverFactory::
- ComputeActivationDecisionForMainFrameNavigation(
- content::NavigationHandle* navigation_handle) const {
+ ComputePerConfigActivationDecisionForMainFrameNavigation(
+ content::NavigationHandle* navigation_handle,
+ const Configuration& configuration) const {
const GURL& url(navigation_handle->GetURL());
-
- const auto configurations = GetActiveConfigurations();
- if (configurations->the_one_and_only().activation_level ==
- ActivationLevel::DISABLED)
+ if (configuration.activation_level == ActivationLevel::DISABLED)
return ActivationDecision::ACTIVATION_DISABLED;
- if (configurations->the_one_and_only().activation_scope ==
- ActivationScope::NO_SITES)
+ if (configuration.activation_scope == ActivationScope::NO_SITES)
return ActivationDecision::ACTIVATION_DISABLED;
if (!url.SchemeIsHTTPOrHTTPS())
return ActivationDecision::UNSUPPORTED_SCHEME;
+
// TODO(csharrison): The throttle manager also performs this check. Remove
// this one when the activation decision is sent directly to the throttle
// manager.
if (client_->ShouldSuppressActivation(navigation_handle))
return ActivationDecision::URL_WHITELISTED;
- switch (configurations->the_one_and_only().activation_scope) {
+ switch (configuration.activation_scope) {
case ActivationScope::ALL_SITES:
return ActivationDecision::ACTIVATED;
case ActivationScope::ACTIVATION_LIST: {
@@ -140,11 +154,10 @@ ContentSubresourceFilterDriverFactory::
// AddActivationListMatch to ensure the activation list only has relevant
// entries.
DCHECK(url.SchemeIsHTTPOrHTTPS() ||
- !DidURLMatchActivationList(
- url, configurations->the_one_and_only().activation_list));
- bool should_activate = DidURLMatchActivationList(
- url, configurations->the_one_and_only().activation_list);
- if (configurations->the_one_and_only().activation_list ==
+ !DidURLMatchActivationList(url, configuration.activation_list));
+ bool should_activate =
+ DidURLMatchActivationList(url, configuration.activation_list);
+ if (configuration.activation_list ==
ActivationList::PHISHING_INTERSTITIAL) {
// Handling special case, where activation on the phishing sites also
// mean the activation on the sites with social engineering metadata.
@@ -189,37 +202,37 @@ void ContentSubresourceFilterDriverFactory::WillProcessResponse(
RecordRedirectChainMatchPattern();
- const auto configurations = GetActiveConfigurations();
- if (configurations->the_one_and_only().should_whitelist_site_on_reload &&
+ ComputeActivationDecisionForMainFrameNavigation(navigation_handle);
+ DCHECK(activation_decision_ != ActivationDecision::UNKNOWN);
+
+ if (configuration_ && configuration_->should_whitelist_site_on_reload &&
NavigationIsPageReload(url, referrer, transition)) {
// Whitelist this host for the current as well as subsequent navigations.
+ activation_decision_ = ActivationDecision::URL_WHITELISTED;
client_->WhitelistInCurrentWebContents(url);
}
- activation_decision_ =
- ComputeActivationDecisionForMainFrameNavigation(navigation_handle);
- DCHECK(activation_decision_ != ActivationDecision::UNKNOWN);
if (activation_decision_ != ActivationDecision::ACTIVATED) {
ResetActivationState();
return;
}
- activation_level_ = configurations->the_one_and_only().activation_level;
+ DCHECK(configuration_);
measure_performance_ =
- activation_level_ != ActivationLevel::DISABLED &&
+ configuration_->activation_level != ActivationLevel::DISABLED &&
ShouldMeasurePerformanceForPageLoad(
- configurations->the_one_and_only().performance_measurement_rate);
- ActivationState state = ActivationState(activation_level_);
+ configuration_->performance_measurement_rate);
+ ActivationState state = ActivationState(configuration_->activation_level);
state.measure_performance = measure_performance_;
throttle_manager_->NotifyPageActivationComputed(navigation_handle, state);
}
void ContentSubresourceFilterDriverFactory::OnFirstSubresourceLoadDisallowed() {
- const auto configurations = GetActiveConfigurations();
- if (configurations->the_one_and_only().should_suppress_notifications)
+ if (!configuration_)
return;
-
- client_->ToggleNotificationVisibility(activation_level_ ==
+ if (configuration_->should_suppress_notifications)
+ return;
+ client_->ToggleNotificationVisibility(configuration_->activation_level ==
ActivationLevel::ENABLED);
}
@@ -231,7 +244,8 @@ bool ContentSubresourceFilterDriverFactory::ShouldSuppressActivation(
void ContentSubresourceFilterDriverFactory::ResetActivationState() {
navigation_chain_.clear();
activation_list_matches_.clear();
- activation_level_ = ActivationLevel::DISABLED;
+ configuration_ = nullptr;
+ configuration_owner_ = nullptr;
measure_performance_ = false;
}

Powered by Google App Engine
This is Rietveld 408576698