| 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, ¶ms);
|
| +
|
| + configuration.activation_level = ParseActivationLevel(
|
| + TakeVariationParamOrReturnEmpty(¶ms, kActivationLevelParameterName));
|
| +
|
| + configuration.activation_scope = ParseActivationScope(
|
| + TakeVariationParamOrReturnEmpty(¶ms, kActivationScopeParameterName));
|
| +
|
| + configuration.activation_list = ParseActivationList(
|
| + TakeVariationParamOrReturnEmpty(¶ms, kActivationListsParameterName));
|
| +
|
| + configuration.performance_measurement_rate =
|
| + ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
|
| + ¶ms, kPerformanceMeasurementRateParameterName));
|
| +
|
| + configuration.should_suppress_notifications =
|
| + ParseBool(TakeVariationParamOrReturnEmpty(
|
| + ¶ms, kSuppressNotificationsParameterName));
|
| +
|
| + configuration.ruleset_flavor =
|
| + TakeVariationParamOrReturnEmpty(¶ms, kRulesetFlavorParameterName);
|
| +
|
| + configuration.should_whitelist_site_on_reload =
|
| + ParseBool(TakeVariationParamOrReturnEmpty(
|
| + ¶ms, 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, ¶ms);
|
| -
|
| - active_configuration.activation_level = ParseActivationLevel(
|
| - TakeVariationParamOrReturnEmpty(¶ms, kActivationLevelParameterName));
|
| -
|
| - active_configuration.activation_scope = ParseActivationScope(
|
| - TakeVariationParamOrReturnEmpty(¶ms, kActivationScopeParameterName));
|
| +ConfigurationList::ConfigurationList(Configuration config)
|
| + : config_(std::move(config)) {}
|
| +ConfigurationList::~ConfigurationList() = default;
|
|
|
| - active_configuration.activation_list = ParseActivationList(
|
| - TakeVariationParamOrReturnEmpty(¶ms, kActivationListsParameterName));
|
| -
|
| - active_configuration.performance_measurement_rate =
|
| - ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
|
| - ¶ms, kPerformanceMeasurementRateParameterName));
|
| -
|
| - active_configuration.should_suppress_notifications =
|
| - ParseBool(TakeVariationParamOrReturnEmpty(
|
| - ¶ms, kSuppressNotificationsParameterName));
|
| -
|
| - active_configuration.ruleset_flavor =
|
| - TakeVariationParamOrReturnEmpty(¶ms, 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(
|
| - ¶ms, 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
|
|
|