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 std::string TakeVariationParamOrReturnEmpty( |
21 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; | 21 std::map<std::string, std::string>* params, |
| 22 const std::string& key) { |
| 23 auto it = params->find(key); |
| 24 if (it == params->end()) |
| 25 return std::string(); |
| 26 std::string value = std::move(it->second); |
| 27 params->erase(it); |
| 28 return value; |
| 29 } |
22 | 30 |
23 // Legacy name `activation_state` is used in variation parameters. | 31 ActivationLevel ParseActivationLevel(const base::StringPiece activation_level) { |
24 const char kActivationLevelParameterName[] = "activation_state"; | |
25 const char kActivationLevelDryRun[] = "dryrun"; | |
26 const char kActivationLevelEnabled[] = "enabled"; | |
27 const char kActivationLevelDisabled[] = "disabled"; | |
28 | |
29 const char kActivationScopeParameterName[] = "activation_scope"; | |
30 const char kActivationScopeAllSites[] = "all_sites"; | |
31 const char kActivationScopeActivationList[] = "activation_list"; | |
32 const char kActivationScopeNoSites[] = "no_sites"; | |
33 | |
34 const char kActivationListsParameterName[] = "activation_lists"; | |
35 const char kActivationListSocialEngineeringAdsInterstitial[] = | |
36 "social_engineering_ads_interstitial"; | |
37 const char kActivationListPhishingInterstitial[] = "phishing_interstitial"; | |
38 const char kActivationListSubresourceFilter[] = "subresource_filter"; | |
39 | |
40 const char kRulesetFlavorParameterName[] = "ruleset_flavor"; | |
41 | |
42 const char kPerformanceMeasurementRateParameterName[] = | |
43 "performance_measurement_rate"; | |
44 | |
45 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; | |
46 | |
47 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; | |
48 | |
49 ActivationLevel GetMaximumActivationLevel() { | |
50 std::string activation_level = variations::GetVariationParamValueByFeature( | |
51 kSafeBrowsingSubresourceFilter, kActivationLevelParameterName); | |
52 if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelEnabled)) | 32 if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelEnabled)) |
53 return ActivationLevel::ENABLED; | 33 return ActivationLevel::ENABLED; |
54 else if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelDryRun)) | 34 else if (base::LowerCaseEqualsASCII(activation_level, kActivationLevelDryRun)) |
55 return ActivationLevel::DRYRUN; | 35 return ActivationLevel::DRYRUN; |
56 return ActivationLevel::DISABLED; | 36 return ActivationLevel::DISABLED; |
57 } | 37 } |
58 | 38 |
59 ActivationScope GetCurrentActivationScope() { | 39 ActivationScope ParseActivationScope(const base::StringPiece activation_scope) { |
60 std::string activation_scope = variations::GetVariationParamValueByFeature( | |
61 kSafeBrowsingSubresourceFilter, kActivationScopeParameterName); | |
62 if (base::LowerCaseEqualsASCII(activation_scope, kActivationScopeAllSites)) | 40 if (base::LowerCaseEqualsASCII(activation_scope, kActivationScopeAllSites)) |
63 return ActivationScope::ALL_SITES; | 41 return ActivationScope::ALL_SITES; |
64 else if (base::LowerCaseEqualsASCII(activation_scope, | 42 else if (base::LowerCaseEqualsASCII(activation_scope, |
65 kActivationScopeActivationList)) | 43 kActivationScopeActivationList)) |
66 return ActivationScope::ACTIVATION_LIST; | 44 return ActivationScope::ACTIVATION_LIST; |
67 return ActivationScope::NO_SITES; | 45 return ActivationScope::NO_SITES; |
68 } | 46 } |
69 | 47 |
70 ActivationList GetCurrentActivationList() { | 48 ActivationList ParseActivationList(const base::StringPiece activation_lists) { |
71 std::string activation_lists = variations::GetVariationParamValueByFeature( | |
72 kSafeBrowsingSubresourceFilter, kActivationListsParameterName); | |
73 ActivationList activation_list_type = ActivationList::NONE; | 49 ActivationList activation_list_type = ActivationList::NONE; |
74 for (const base::StringPiece& activation_list : | 50 for (const base::StringPiece& activation_list : |
75 base::SplitStringPiece(activation_lists, ",", base::TRIM_WHITESPACE, | 51 base::SplitStringPiece(activation_lists, ",", base::TRIM_WHITESPACE, |
76 base::SPLIT_WANT_NONEMPTY)) { | 52 base::SPLIT_WANT_NONEMPTY)) { |
77 if (base::LowerCaseEqualsASCII(activation_list, | 53 if (base::LowerCaseEqualsASCII(activation_list, |
78 kActivationListPhishingInterstitial)) { | 54 kActivationListPhishingInterstitial)) { |
79 return ActivationList::PHISHING_INTERSTITIAL; | 55 return ActivationList::PHISHING_INTERSTITIAL; |
80 } else if (base::LowerCaseEqualsASCII( | 56 } else if (base::LowerCaseEqualsASCII( |
81 activation_list, | 57 activation_list, |
82 kActivationListSocialEngineeringAdsInterstitial)) { | 58 kActivationListSocialEngineeringAdsInterstitial)) { |
83 activation_list_type = ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; | 59 activation_list_type = ActivationList::SOCIAL_ENG_ADS_INTERSTITIAL; |
84 } else if (base::LowerCaseEqualsASCII(activation_list, | 60 } else if (base::LowerCaseEqualsASCII(activation_list, |
85 kActivationListSubresourceFilter)) { | 61 kActivationListSubresourceFilter)) { |
86 activation_list_type = ActivationList::SUBRESOURCE_FILTER; | 62 activation_list_type = ActivationList::SUBRESOURCE_FILTER; |
87 } | 63 } |
88 } | 64 } |
89 return activation_list_type; | 65 return activation_list_type; |
90 } | 66 } |
91 | 67 |
92 double GetPerformanceMeasurementRate() { | 68 double ParsePerformanceMeasurementRate(const std::string& rate) { |
93 const std::string rate = variations::GetVariationParamValueByFeature( | |
94 kSafeBrowsingSubresourceFilter, kPerformanceMeasurementRateParameterName); | |
95 double value = 0; | 69 double value = 0; |
96 if (!base::StringToDouble(rate, &value) || value < 0) | 70 if (!base::StringToDouble(rate, &value) || value < 0) |
97 return 0; | 71 return 0; |
98 return value < 1 ? value : 1; | 72 return value < 1 ? value : 1; |
99 } | 73 } |
100 | 74 |
101 bool ShouldSuppressNotifications() { | 75 bool ParseBool(const base::StringPiece value) { |
102 return base::GetFieldTrialParamByFeatureAsBool( | 76 return base::LowerCaseEqualsASCII(value, "true"); |
103 kSafeBrowsingSubresourceFilter, kSuppressNotificationsParameterName, | |
104 false /* default value */); | |
105 } | 77 } |
106 | 78 |
107 std::string GetRulesetFlavor() { | 79 } // namespace |
108 return variations::GetVariationParamValueByFeature( | |
109 subresource_filter::kSafeBrowsingSubresourceFilter, | |
110 subresource_filter::kRulesetFlavorParameterName); | |
111 } | |
112 | 80 |
113 bool ShouldWhitelistSiteOnReload() { | 81 const base::Feature kSafeBrowsingSubresourceFilter{ |
114 return base::GetFieldTrialParamByFeatureAsBool( | 82 "SubresourceFilter", base::FEATURE_DISABLED_BY_DEFAULT}; |
115 kSafeBrowsingSubresourceFilter, kWhitelistSiteOnReloadParameterName, | 83 |
116 false /* default value */); | 84 const base::Feature kSafeBrowsingSubresourceFilterExperimentalUI{ |
| 85 "SubresourceFilterExperimentalUI", base::FEATURE_DISABLED_BY_DEFAULT}; |
| 86 |
| 87 // Legacy name `activation_state` is used in variation parameters. |
| 88 const char kActivationLevelParameterName[] = "activation_state"; |
| 89 const char kActivationLevelDryRun[] = "dryrun"; |
| 90 const char kActivationLevelEnabled[] = "enabled"; |
| 91 const char kActivationLevelDisabled[] = "disabled"; |
| 92 |
| 93 const char kActivationScopeParameterName[] = "activation_scope"; |
| 94 const char kActivationScopeAllSites[] = "all_sites"; |
| 95 const char kActivationScopeActivationList[] = "activation_list"; |
| 96 const char kActivationScopeNoSites[] = "no_sites"; |
| 97 |
| 98 const char kActivationListsParameterName[] = "activation_lists"; |
| 99 const char kActivationListSocialEngineeringAdsInterstitial[] = |
| 100 "social_engineering_ads_interstitial"; |
| 101 const char kActivationListPhishingInterstitial[] = "phishing_interstitial"; |
| 102 const char kActivationListSubresourceFilter[] = "subresource_filter"; |
| 103 |
| 104 const char kRulesetFlavorParameterName[] = "ruleset_flavor"; |
| 105 |
| 106 const char kPerformanceMeasurementRateParameterName[] = |
| 107 "performance_measurement_rate"; |
| 108 |
| 109 const char kSuppressNotificationsParameterName[] = "suppress_notifications"; |
| 110 |
| 111 const char kWhitelistSiteOnReloadParameterName[] = "whitelist_site_on_reload"; |
| 112 |
| 113 Configuration::Configuration() = default; |
| 114 Configuration::~Configuration() = default; |
| 115 Configuration::Configuration(Configuration&&) = default; |
| 116 Configuration& Configuration::operator=(Configuration&&) = default; |
| 117 |
| 118 Configuration GetActiveConfiguration() { |
| 119 Configuration active_configuration; |
| 120 |
| 121 std::map<std::string, std::string> params; |
| 122 base::GetFieldTrialParamsByFeature(kSafeBrowsingSubresourceFilter, ¶ms); |
| 123 |
| 124 active_configuration.activation_level = ParseActivationLevel( |
| 125 TakeVariationParamOrReturnEmpty(¶ms, kActivationLevelParameterName)); |
| 126 |
| 127 active_configuration.activation_scope = ParseActivationScope( |
| 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; |
117 } | 149 } |
118 | 150 |
119 } // namespace subresource_filter | 151 } // namespace subresource_filter |
OLD | NEW |