Chromium Code Reviews| 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 |