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

Side by Side 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 unified diff | Download patch
OLDNEW
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
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, &params);
87
88 configuration.activation_level = ParseActivationLevel(
89 TakeVariationParamOrReturnEmpty(&params, kActivationLevelParameterName));
90
91 configuration.activation_scope = ParseActivationScope(
92 TakeVariationParamOrReturnEmpty(&params, kActivationScopeParameterName));
93
94 configuration.activation_list = ParseActivationList(
95 TakeVariationParamOrReturnEmpty(&params, kActivationListsParameterName));
96
97 configuration.performance_measurement_rate =
98 ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
99 &params, kPerformanceMeasurementRateParameterName));
100
101 configuration.should_suppress_notifications =
102 ParseBool(TakeVariationParamOrReturnEmpty(
103 &params, kSuppressNotificationsParameterName));
104
105 configuration.ruleset_flavor =
106 TakeVariationParamOrReturnEmpty(&params, kRulesetFlavorParameterName);
107
108 configuration.should_whitelist_site_on_reload =
109 ParseBool(TakeVariationParamOrReturnEmpty(
110 &params, 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
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, &params); 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(&params, kActivationLevelParameterName)); 168 base::MakeShared<ConfigurationList>(ParseFieldTrialConfiguration());
126 169 }
127 active_configuration.activation_scope = ParseActivationScope( 170 return g_active_configurations.Get();
128 TakeVariationParamOrReturnEmpty(&params, kActivationScopeParameterName));
129
130 active_configuration.activation_list = ParseActivationList(
131 TakeVariationParamOrReturnEmpty(&params, kActivationListsParameterName));
132
133 active_configuration.performance_measurement_rate =
134 ParsePerformanceMeasurementRate(TakeVariationParamOrReturnEmpty(
135 &params, kPerformanceMeasurementRateParameterName));
136
137 active_configuration.should_suppress_notifications =
138 ParseBool(TakeVariationParamOrReturnEmpty(
139 &params, kSuppressNotificationsParameterName));
140
141 active_configuration.ruleset_flavor =
142 TakeVariationParamOrReturnEmpty(&params, kRulesetFlavorParameterName);
143
144 active_configuration.should_whitelist_site_on_reload =
145 ParseBool(TakeVariationParamOrReturnEmpty(
146 &params, 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698