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

Unified Diff: components/subresource_filter/core/browser/subresource_filter_features.cc

Issue 2831373002: Introduce subresource_filter::ConfigurationList and make querying it cheap. (Closed)
Patch Set: Rebase. 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/core/browser/subresource_filter_features.cc
diff --git a/components/subresource_filter/core/browser/subresource_filter_features.cc b/components/subresource_filter/core/browser/subresource_filter_features.cc
index 2ad875eaf25275bec0c8c68ff3c1a123e4b6cfe5..943c2e78f29f1c68fa657f1c522f9ff525d910e9 100644
--- a/components/subresource_filter/core/browser/subresource_filter_features.cc
+++ b/components/subresource_filter/core/browser/subresource_filter_features.cc
@@ -5,12 +5,15 @@
#include "components/subresource_filter/core/browser/subresource_filter_features.h"
#include <string>
+#include <utility>
+#include "base/lazy_instance.h"
#include "base/metrics/field_trial_params.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
+#include "base/synchronization/lock.h"
#include "components/variations/variations_associated_data.h"
namespace subresource_filter {
@@ -76,6 +79,45 @@ bool ParseBool(const base::StringPiece value) {
return base::LowerCaseEqualsASCII(value, "true");
}
+Configuration ParseFieldTrialConfiguration() {
+ Configuration configuration;
+
+ std::map<std::string, std::string> params;
+ base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, &params);
+
+ configuration.activation_level = ParseActivationLevel(
+ TakeVariationParamOrReturnEmpty(&params, kActivationLevelParameterName));
+
+ configuration.activation_scope = ParseActivationScope(
+ TakeVariationParamOrReturnEmpty(&params, kActivationScopeParameterName));
+
+ configuration.activation_list = ParseActivationList(
+ TakeVariationParamOrReturnEmpty(&params, kActivationListsParameterName));
+
+ configuration.performance_measurement_rate =
+ ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
+ &params, kPerformanceMeasurementRateParameterName));
+
+ configuration.should_suppress_notifications =
+ ParseBool(TakeVariationParamOrReturnEmpty(
+ &params, kSuppressNotificationsParameterName));
+
+ configuration.ruleset_flavor =
+ TakeVariationParamOrReturnEmpty(&params, kRulesetFlavorParameterName);
+
+ configuration.should_whitelist_site_on_reload =
+ ParseBool(TakeVariationParamOrReturnEmpty(
+ &params, kWhitelistSiteOnReloadParameterName));
+
+ return configuration;
+}
+
+base::LazyInstance<base::Lock>::Leaky g_active_configurations_lock =
+ LAZY_INSTANCE_INITIALIZER;
+
+base::LazyInstance<scoped_refptr<ConfigurationList>>::Leaky
+ g_active_configurations = LAZY_INSTANCE_INITIALIZER;
+
} // namespace
const base::Feature kSafeBrowsingSubresourceFilter{
@@ -115,37 +157,26 @@ Configuration::~Configuration() = default;
Configuration::Configuration(Configuration&&) = default;
Configuration& Configuration::operator=(Configuration&&) = default;
-Configuration GetActiveConfiguration() {
- Configuration active_configuration;
-
- std::map<std::string, std::string> params;
- base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, &params);
-
- active_configuration.activation_level = ParseActivationLevel(
- TakeVariationParamOrReturnEmpty(&params, kActivationLevelParameterName));
-
- active_configuration.activation_scope = ParseActivationScope(
- TakeVariationParamOrReturnEmpty(&params, kActivationScopeParameterName));
+ConfigurationList::ConfigurationList(Configuration config)
+ : config_(std::move(config)) {}
+ConfigurationList::~ConfigurationList() = default;
- active_configuration.activation_list = ParseActivationList(
- TakeVariationParamOrReturnEmpty(&params, kActivationListsParameterName));
-
- active_configuration.performance_measurement_rate =
- ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
- &params, kPerformanceMeasurementRateParameterName));
-
- active_configuration.should_suppress_notifications =
- ParseBool(TakeVariationParamOrReturnEmpty(
- &params, kSuppressNotificationsParameterName));
-
- active_configuration.ruleset_flavor =
- TakeVariationParamOrReturnEmpty(&params, kRulesetFlavorParameterName);
+scoped_refptr<ConfigurationList> GetActiveConfigurations() {
+ base::AutoLock lock(g_active_configurations_lock.Get());
+ if (!g_active_configurations.Get()) {
+ g_active_configurations.Get() =
+ base::MakeShared<ConfigurationList>(ParseFieldTrialConfiguration());
+ }
+ return g_active_configurations.Get();
+}
- active_configuration.should_whitelist_site_on_reload =
- ParseBool(TakeVariationParamOrReturnEmpty(
- &params, kWhitelistSiteOnReloadParameterName));
+namespace testing {
- return active_configuration;
+void ClearCachedActiveConfigurations() {
+ base::AutoLock lock(g_active_configurations_lock.Get());
+ g_active_configurations.Get() = nullptr;
}
+} // namespace testing
+
} // namespace subresource_filter

Powered by Google App Engine
This is Rietveld 408576698