| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/subresource_filter/core/browser/subresource_filter_features
.h" | 5 #include "components/subresource_filter/core/browser/subresource_filter_features
.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> |
| 8 | 9 |
| 10 #include "base/lazy_instance.h" |
| 9 #include "base/metrics/field_trial_params.h" | 11 #include "base/metrics/field_trial_params.h" |
| 10 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_piece.h" | 13 #include "base/strings/string_piece.h" |
| 12 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
| 13 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/synchronization/lock.h" |
| 14 #include "components/variations/variations_associated_data.h" | 17 #include "components/variations/variations_associated_data.h" |
| 15 | 18 |
| 16 namespace subresource_filter { | 19 namespace subresource_filter { |
| 17 | 20 |
| 18 namespace { | 21 namespace { |
| 19 | 22 |
| 20 std::string TakeVariationParamOrReturnEmpty( | 23 std::string TakeVariationParamOrReturnEmpty( |
| 21 std::map<std::string, std::string>* params, | 24 std::map<std::string, std::string>* params, |
| 22 const std::string& key) { | 25 const std::string& key) { |
| 23 auto it = params->find(key); | 26 auto it = params->find(key); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 double value = 0; | 72 double value = 0; |
| 70 if (!base::StringToDouble(rate, &value) || value < 0) | 73 if (!base::StringToDouble(rate, &value) || value < 0) |
| 71 return 0; | 74 return 0; |
| 72 return value < 1 ? value : 1; | 75 return value < 1 ? value : 1; |
| 73 } | 76 } |
| 74 | 77 |
| 75 bool ParseBool(const base::StringPiece value) { | 78 bool ParseBool(const base::StringPiece value) { |
| 76 return base::LowerCaseEqualsASCII(value, "true"); | 79 return base::LowerCaseEqualsASCII(value, "true"); |
| 77 } | 80 } |
| 78 | 81 |
| 82 Configuration ParseFieldTrialConfiguration() { |
| 83 Configuration configuration; |
| 84 |
| 85 std::map<std::string, std::string> params; |
| 86 base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, ¶ms); |
| 87 |
| 88 configuration.activation_level = ParseActivationLevel( |
| 89 TakeVariationParamOrReturnEmpty(¶ms, kActivationLevelParameterName)); |
| 90 |
| 91 configuration.activation_scope = ParseActivationScope( |
| 92 TakeVariationParamOrReturnEmpty(¶ms, kActivationScopeParameterName)); |
| 93 |
| 94 configuration.activation_list = ParseActivationList( |
| 95 TakeVariationParamOrReturnEmpty(¶ms, kActivationListsParameterName)); |
| 96 |
| 97 configuration.performance_measurement_rate = |
| 98 ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty( |
| 99 ¶ms, kPerformanceMeasurementRateParameterName)); |
| 100 |
| 101 configuration.should_suppress_notifications = |
| 102 ParseBool(TakeVariationParamOrReturnEmpty( |
| 103 ¶ms, kSuppressNotificationsParameterName)); |
| 104 |
| 105 configuration.ruleset_flavor = |
| 106 TakeVariationParamOrReturnEmpty(¶ms, kRulesetFlavorParameterName); |
| 107 |
| 108 configuration.should_whitelist_site_on_reload = |
| 109 ParseBool(TakeVariationParamOrReturnEmpty( |
| 110 ¶ms, kWhitelistSiteOnReloadParameterName)); |
| 111 |
| 112 return configuration; |
| 113 } |
| 114 |
| 115 base::LazyInstance<base::Lock>::Leaky g_active_configurations_lock = |
| 116 LAZY_INSTANCE_INITIALIZER; |
| 117 |
| 118 base::LazyInstance<scoped_refptr<ConfigurationList>>::Leaky |
| 119 g_active_configurations = LAZY_INSTANCE_INITIALIZER; |
| 120 |
| 79 } // namespace | 121 } // namespace |
| 80 | 122 |
| 81 const base::Feature kSafeBrowsingSubresourceFilter{ | 123 const base::Feature kSafeBrowsingSubresourceFilter{ |
| 82 "SubresourceFilter", base::FEATURE_DISABLED_BY_DEFAULT}; | 124 "SubresourceFilter", base::FEATURE_DISABLED_BY_DEFAULT}; |
| 83 | 125 |
| 84 const base::Feature kSafeBrowsingSubresourceFilterExperimentalUI{ | 126 const base::Feature kSafeBrowsingSubresourceFilterExperimentalUI{ |
| 85 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; | 127 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; |
| 86 | 128 |
| 87 // Legacy name `activation_state` is used in variation parameters. | 129 // Legacy name `activation_state` is used in variation parameters. |
| 88 const char kActivationLevelParameterName[] = "activation_state"; | 130 const char kActivationLevelParameterName[] = "activation_state"; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 108 | 150 |
| 109 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; | 151 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; |
| 110 | 152 |
| 111 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; | 153 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; |
| 112 | 154 |
| 113 Configuration::Configuration() = default; | 155 Configuration::Configuration() = default; |
| 114 Configuration::~Configuration() = default; | 156 Configuration::~Configuration() = default; |
| 115 Configuration::Configuration(Configuration&&) = default; | 157 Configuration::Configuration(Configuration&&) = default; |
| 116 Configuration& Configuration::operator=(Configuration&&) = default; | 158 Configuration& Configuration::operator=(Configuration&&) = default; |
| 117 | 159 |
| 118 Configuration GetActiveConfiguration() { | 160 ConfigurationList::ConfigurationList(Configuration config) |
| 119 Configuration active_configuration; | 161 : config_(std::move(config)) {} |
| 162 ConfigurationList::~ConfigurationList() = default; |
| 120 | 163 |
| 121 std::map<std::string, std::string> params; | 164 scoped_refptr<ConfigurationList> GetActiveConfigurations() { |
| 122 base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, ¶ms); | 165 base::AutoLock lock(g_active_configurations_lock.Get()); |
| 123 | 166 if (!g_active_configurations.Get()) { |
| 124 active_configuration.activation_level = ParseActivationLevel( | 167 g_active_configurations.Get() = |
| 125 TakeVariationParamOrReturnEmpty(¶ms, kActivationLevelParameterName)); | 168 base::MakeShared<ConfigurationList>(ParseFieldTrialConfiguration()); |
| 126 | 169 } |
| 127 active_configuration.activation_scope = ParseActivationScope( | 170 return g_active_configurations.Get(); |
| 128 TakeVariationParamOrReturnEmpty(¶ms, kActivationScopeParameterName)); | |
| 129 | |
| 130 active_configuration.activation_list = ParseActivationList( | |
| 131 TakeVariationParamOrReturnEmpty(¶ms, kActivationListsParameterName)); | |
| 132 | |
| 133 active_configuration.performance_measurement_rate = | |
| 134 ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty( | |
| 135 ¶ms, kPerformanceMeasurementRateParameterName)); | |
| 136 | |
| 137 active_configuration.should_suppress_notifications = | |
| 138 ParseBool(TakeVariationParamOrReturnEmpty( | |
| 139 ¶ms, kSuppressNotificationsParameterName)); | |
| 140 | |
| 141 active_configuration.ruleset_flavor = | |
| 142 TakeVariationParamOrReturnEmpty(¶ms, kRulesetFlavorParameterName); | |
| 143 | |
| 144 active_configuration.should_whitelist_site_on_reload = | |
| 145 ParseBool(TakeVariationParamOrReturnEmpty( | |
| 146 ¶ms, kWhitelistSiteOnReloadParameterName)); | |
| 147 | |
| 148 return active_configuration; | |
| 149 } | 171 } |
| 150 | 172 |
| 173 namespace testing { |
| 174 |
| 175 void ClearCachedActiveConfigurations() { |
| 176 base::AutoLock lock(g_active_configurations_lock.Get()); |
| 177 g_active_configurations.Get() = nullptr; |
| 178 } |
| 179 |
| 180 } // namespace testing |
| 181 |
| 151 } // namespace subresource_filter | 182 } // namespace subresource_filter |
| OLD | NEW |