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 | 8 |
9 #include "base/metrics/field_trial_params.h" | 9 #include "base/metrics/field_trial_params.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/string_piece.h" | |
11 #include "base/strings/string_split.h" | 12 #include "base/strings/string_split.h" |
12 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
13 #include "components/variations/variations_associated_data.h" | 14 #include "components/variations/variations_associated_data.h" |
14 | 15 |
15 namespace subresource_filter { | 16 namespace subresource_filter { |
16 | 17 |
17 const base::Feature kSafeBrowsingSubresourceFilter{ | 18 namespace { |
18 "SubresourceFilter", base::FEATURE_DISABLED_BY_DEFAULT}; | |
19 | 19 |
20 const base::Feature kSafeBrowsingSubresourceFilterExperimentalUI{ | 20 base::StringPiece GetVariationParamOrEmpty( |
Charlie Harrison
2017/04/05 20:43:04
A little odd to have this return a non-owning Stri
engedy
2017/04/07 08:40:58
Indeed. I reworked this slightly, what do you thin
| |
21 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; | 21 const std::map<std::string, std::string>& params, |
22 const std::string& key) { | |
23 auto it = params.find(key); | |
24 return it != params.end() ? it->second : base::StringPiece(); | |
25 } | |
22 | 26 |
23 const base::Feature kSubresourceFilterSafeBrowsingActivationThrottle{ | 27 ActivationLevel ParseActivationLevel(const base::StringPiece activation_level) { |
24 "SubresourceFilterSafeBrowsingActivationThrottle", | |
25 base::FEATURE_DISABLED_BY_DEFAULT}; | |
26 | |
27 // Legacy name `activation_state` is used in variation parameters. | |
28 const char kActivationLevelParameterName[] = "activation_state"; | |
29 const char kActivationLevelDryRun[] = "dryrun"; | |
30 const char kActivationLevelEnabled[] = "enabled"; | |
31 const char kActivationLevelDisabled[] = "disabled"; | |
32 | |
33 const char kActivationScopeParameterName[] = "activation_scope"; | |
34 const char kActivationScopeAllSites[] = "all_sites"; | |
35 const char kActivationScopeActivationList[] = "activation_list"; | |
36 const char kActivationScopeNoSites[] = "no_sites"; | |
37 | |
38 const char kActivationListsParameterName[] = "activation_lists"; | |
39 const char kActivationListSocialEngineeringAdsInterstitial[] = | |
40 "social_engineering_ads_interstitial"; | |
41 const char kActivationListPhishingInterstitial[] = "phishing_interstitial"; | |
42 const char kActivationListSubresourceFilter[] = "subresource_filter"; | |
43 | |
44 const char kRulesetFlavorParameterName[] = "ruleset_flavor"; | |
45 | |
46 const char kPerformanceMeasurementRateParameterName[] = | |
47 "performance_measurement_rate"; | |
48 | |
49 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; | |
50 | |
51 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; | |
52 | |
53 ActivationLevel GetMaximumActivationLevel() { | |
54 std::string activation_level = variations::GetVariationParamValueByFeature( | |
55 kSafeBrowsingSubresourceFilter, kActivationLevelParameterName); | |
56 if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelEnabled)) | 28 if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelEnabled)) |
57 return ActivationLevel::ENABLED; | 29 return ActivationLevel::ENABLED; |
58 else if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelDryRun)) | 30 else if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelDryRun)) |
59 return ActivationLevel::DRYRUN; | 31 return ActivationLevel::DRYRUN; |
60 return ActivationLevel::DISABLED; | 32 return ActivationLevel::DISABLED; |
61 } | 33 } |
62 | 34 |
63 ActivationScope GetCurrentActivationScope() { | 35 ActivationScope ParseActivationScope(const base::StringPiece activation_scope) { |
64 std::string activation_scope = variations::GetVariationParamValueByFeature( | |
65 kSafeBrowsingSubresourceFilter, kActivationScopeParameterName); | |
66 if (base::LowerCaseEqualsASCII(activation_scope, kActivationScopeAllSites)) | 36 if (base::LowerCaseEqualsASCII(activation_scope, kActivationScopeAllSites)) |
67 return ActivationScope::ALL_SITES; | 37 return ActivationScope::ALL_SITES; |
68 else if (base::LowerCaseEqualsASCII(activation_scope, | 38 else if (base::LowerCaseEqualsASCII(activation_scope, |
69 kActivationScopeActivationList)) | 39 kActivationScopeActivationList)) |
70 return ActivationScope::ACTIVATION_LIST; | 40 return ActivationScope::ACTIVATION_LIST; |
71 return ActivationScope::NO_SITES; | 41 return ActivationScope::NO_SITES; |
72 } | 42 } |
73 | 43 |
74 ActivationList GetCurrentActivationList() { | 44 ActivationList ParseActivationList(const base::StringPiece activation_lists) { |
75 std::string activation_lists = variations::GetVariationParamValueByFeature( | |
76 kSafeBrowsingSubresourceFilter, kActivationListsParameterName); | |
77 ActivationList activation_list_type = ActivationList::NONE; | 45 ActivationList activation_list_type = ActivationList::NONE; |
78 for (const base::StringPiece& activation_list : | 46 for (const base::StringPiece& activation_list : |
79 base::SplitStringPiece(activation_lists, ",", base::TRIM_WHITESPACE, | 47 base::SplitStringPiece(activation_lists, ",", base::TRIM_WHITESPACE, |
80 base::SPLIT_WANT_NONEMPTY)) { | 48 base::SPLIT_WANT_NONEMPTY)) { |
81 if (base::LowerCaseEqualsASCII(activation_list, | 49 if (base::LowerCaseEqualsASCII(activation_list, |
82 kActivationListPhishingInterstitial)) { | 50 kActivationListPhishingInterstitial)) { |
83 return ActivationList::PHISHING_INTERSTITIAL; | 51 return ActivationList::PHISHING_INTERSTITIAL; |
84 } else if (base::LowerCaseEqualsASCII( | 52 } else if (base::LowerCaseEqualsASCII( |
85 activation_list, | 53 activation_list, |
86 kActivationListSocialEngineeringAdsInterstitial)) { | 54 kActivationListSocialEngineeringAdsInterstitial)) { |
87 activation_list_type = ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; | 55 activation_list_type = ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; |
88 } else if (base::LowerCaseEqualsASCII(activation_list, | 56 } else if (base::LowerCaseEqualsASCII(activation_list, |
89 kActivationListSubresourceFilter)) { | 57 kActivationListSubresourceFilter)) { |
90 activation_list_type = ActivationList::SUBRESOURCE_FILTER; | 58 activation_list_type = ActivationList::SUBRESOURCE_FILTER; |
91 } | 59 } |
92 } | 60 } |
93 return activation_list_type; | 61 return activation_list_type; |
94 } | 62 } |
95 | 63 |
96 double GetPerformanceMeasurementRate() { | 64 double ParsePerformanceMeasurementRate(const base::StringPiece rate) { |
97 const std::string rate = variations::GetVariationParamValueByFeature( | |
98 kSafeBrowsingSubresourceFilter, kPerformanceMeasurementRateParameterName); | |
99 double value = 0; | 65 double value = 0; |
100 if (!base::StringToDouble(rate, &value) || value < 0) | 66 // TODO(engedy): Refactor StringToDouble to take a StringPiece. |
67 if (!base::StringToDouble(rate.as_string(), &value) || value < 0) | |
101 return 0; | 68 return 0; |
102 return value < 1 ? value : 1; | 69 return value < 1 ? value : 1; |
103 } | 70 } |
104 | 71 |
105 bool ShouldSuppressNotifications() { | 72 bool ParseBool(const base::StringPiece value) { |
106 return base::GetFieldTrialParamByFeatureAsBool( | 73 return base::LowerCaseEqualsASCII(value, "true"); |
107 kSafeBrowsingSubresourceFilter, kSuppressNotificationsParameterName, | |
108 false /* default value */); | |
109 } | 74 } |
110 | 75 |
111 std::string GetRulesetFlavor() { | 76 } // namespace |
112 return variations::GetVariationParamValueByFeature( | |
113 subresource_filter::kSafeBrowsingSubresourceFilter, | |
114 subresource_filter::kRulesetFlavorParameterName); | |
115 } | |
116 | 77 |
117 bool ShouldWhitelistSiteOnReload() { | 78 const base::Feature kSafeBrowsingSubresourceFilter{ |
118 return base::GetFieldTrialParamByFeatureAsBool( | 79 "SubresourceFilter", base::FEATURE_DISABLED_BY_DEFAULT}; |
119 kSafeBrowsingSubresourceFilter, kWhitelistSiteOnReloadParameterName, | 80 |
120 false /* default value */); | 81 const base::Feature kSafeBrowsingSubresourceFilterExperimentalUI{ |
82 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; | |
83 | |
84 const base::Feature kSubresourceFilterSafeBrowsingActivationThrottle{ | |
85 "SubresourceFilterSafeBrowsingActivationThrottle", | |
86 base::FEATURE_DISABLED_BY_DEFAULT}; | |
87 | |
88 // Legacy name `activation_state` is used in variation parameters. | |
89 const char kActivationLevelParameterName[] = "activation_state"; | |
90 const char kActivationLevelDryRun[] = "dryrun"; | |
91 const char kActivationLevelEnabled[] = "enabled"; | |
92 const char kActivationLevelDisabled[] = "disabled"; | |
93 | |
94 const char kActivationScopeParameterName[] = "activation_scope"; | |
95 const char kActivationScopeAllSites[] = "all_sites"; | |
96 const char kActivationScopeActivationList[] = "activation_list"; | |
97 const char kActivationScopeNoSites[] = "no_sites"; | |
98 | |
99 const char kActivationListsParameterName[] = "activation_lists"; | |
100 const char kActivationListSocialEngineeringAdsInterstitial[] = | |
101 "social_engineering_ads_interstitial"; | |
102 const char kActivationListPhishingInterstitial[] = "phishing_interstitial"; | |
103 const char kActivationListSubresourceFilter[] = "subresource_filter"; | |
104 | |
105 const char kRulesetFlavorParameterName[] = "ruleset_flavor"; | |
106 | |
107 const char kPerformanceMeasurementRateParameterName[] = | |
108 "performance_measurement_rate"; | |
109 | |
110 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; | |
111 | |
112 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; | |
113 | |
114 Configuration::Configuration() = default; | |
115 Configuration::~Configuration() = default; | |
116 | |
117 Configuration GetActiveConfiguration() { | |
118 Configuration active_configuration; | |
119 | |
120 std::map<std::string, std::string> params; | |
121 base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, ¶ms); | |
122 | |
123 active_configuration.activation_level = ParseActivationLevel( | |
124 GetVariationParamOrEmpty(params, kActivationLevelParameterName)); | |
125 | |
126 active_configuration.activation_scope = ParseActivationScope( | |
127 GetVariationParamOrEmpty(params, kActivationScopeParameterName)); | |
128 | |
129 active_configuration.activation_list = ParseActivationList( | |
130 GetVariationParamOrEmpty(params, kActivationListsParameterName)); | |
131 | |
132 active_configuration.performance_measurement_rate = | |
133 ParsePerformanceMeasurementRate(GetVariationParamOrEmpty( | |
134 params, kPerformanceMeasurementRateParameterName)); | |
135 | |
136 active_configuration.should_suppress_notifications = ParseBool( | |
137 GetVariationParamOrEmpty(params, kSuppressNotificationsParameterName)); | |
138 | |
139 active_configuration.ruleset_flavor = | |
140 GetVariationParamOrEmpty(params, kRulesetFlavorParameterName).as_string(); | |
141 | |
142 active_configuration.should_whitelist_site_on_reload = ParseBool( | |
143 GetVariationParamOrEmpty(params, kWhitelistSiteOnReloadParameterName)); | |
144 | |
145 return active_configuration; | |
121 } | 146 } |
122 | 147 |
123 } // namespace subresource_filter | 148 } // namespace subresource_filter |
OLD | NEW |