Index: base/metrics/field_trial_params.cc |
diff --git a/components/variations/variations_associated_data.cc b/base/metrics/field_trial_params.cc |
similarity index 27% |
copy from components/variations/variations_associated_data.cc |
copy to base/metrics/field_trial_params.cc |
index ec696a3e37fd0bd5d7db10c0f98d6c49754a5235..bcefa8944fb7bd79aca79d90b916bcd0e796e3f2 100644 |
--- a/components/variations/variations_associated_data.cc |
+++ b/base/metrics/field_trial_params.cc |
@@ -1,156 +1,17 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "components/variations/variations_associated_data.h" |
- |
-#include <map> |
-#include <utility> |
-#include <vector> |
+#include "base/metrics/field_trial_params.h" |
#include "base/feature_list.h" |
-#include "base/macros.h" |
-#include "base/memory/singleton.h" |
#include "base/metrics/field_trial.h" |
#include "base/metrics/field_trial_param_associator.h" |
#include "base/strings/string_number_conversions.h" |
-#include "base/strings/string_split.h" |
-#include "components/variations/variations_http_header_provider.h" |
- |
-namespace variations { |
- |
-namespace { |
- |
-// The internal singleton accessor for the map, used to keep it thread-safe. |
-class GroupMapAccessor { |
- public: |
- typedef std::map<ActiveGroupId, VariationID, ActiveGroupIdCompare> |
- GroupToIDMap; |
- |
- // Retrieve the singleton. |
- static GroupMapAccessor* GetInstance() { |
- return base::Singleton<GroupMapAccessor>::get(); |
- } |
- |
- // Note that this normally only sets the ID for a group the first time, unless |
- // |force| is set to true, in which case it will always override it. |
- void AssociateID(IDCollectionKey key, |
- const ActiveGroupId& group_identifier, |
- const VariationID id, |
- const bool force) { |
-#if !defined(NDEBUG) |
- DCHECK_EQ(4, ID_COLLECTION_COUNT); |
- // Ensure that at most one of the trigger/non-trigger/signed-in web property |
- // IDs are set. |
- if (key == GOOGLE_WEB_PROPERTIES || key == GOOGLE_WEB_PROPERTIES_TRIGGER || |
- key == GOOGLE_WEB_PROPERTIES_SIGNED_IN) { |
- if (key != GOOGLE_WEB_PROPERTIES) |
- DCHECK_EQ(EMPTY_ID, GetID(GOOGLE_WEB_PROPERTIES, group_identifier)); |
- if (key != GOOGLE_WEB_PROPERTIES_TRIGGER) { |
- DCHECK_EQ(EMPTY_ID, |
- GetID(GOOGLE_WEB_PROPERTIES_TRIGGER, group_identifier)); |
- } |
- if (key != GOOGLE_WEB_PROPERTIES_SIGNED_IN) { |
- DCHECK_EQ(EMPTY_ID, |
- GetID(GOOGLE_WEB_PROPERTIES_SIGNED_IN, group_identifier)); |
- } |
- } |
- |
- // Validate that all collections with this |group_identifier| have the same |
- // associated ID. |
- for (int i = 0; i < ID_COLLECTION_COUNT; ++i) { |
- IDCollectionKey other_key = static_cast<IDCollectionKey>(i); |
- if (other_key == key) |
- continue; |
- VariationID other_id = GetID(other_key, group_identifier); |
- DCHECK(other_id == EMPTY_ID || other_id == id); |
- } |
-#endif |
- |
- base::AutoLock scoped_lock(lock_); |
- GroupToIDMap* group_to_id_map = GetGroupToIDMap(key); |
- if (force || |
- group_to_id_map->find(group_identifier) == group_to_id_map->end()) |
- (*group_to_id_map)[group_identifier] = id; |
- } |
- |
- VariationID GetID(IDCollectionKey key, |
- const ActiveGroupId& group_identifier) { |
- base::AutoLock scoped_lock(lock_); |
- GroupToIDMap* group_to_id_map = GetGroupToIDMap(key); |
- GroupToIDMap::const_iterator it = group_to_id_map->find(group_identifier); |
- if (it == group_to_id_map->end()) |
- return EMPTY_ID; |
- return it->second; |
- } |
- |
- void ClearAllMapsForTesting() { |
- base::AutoLock scoped_lock(lock_); |
- |
- for (int i = 0; i < ID_COLLECTION_COUNT; ++i) { |
- GroupToIDMap* map = GetGroupToIDMap(static_cast<IDCollectionKey>(i)); |
- DCHECK(map); |
- map->clear(); |
- } |
- } |
- |
- private: |
- friend struct base::DefaultSingletonTraits<GroupMapAccessor>; |
- |
- // Retrieves the GroupToIDMap for |key|. |
- GroupToIDMap* GetGroupToIDMap(IDCollectionKey key) { |
- return &group_to_id_maps_[key]; |
- } |
+namespace base { |
- GroupMapAccessor() { |
- group_to_id_maps_.resize(ID_COLLECTION_COUNT); |
- } |
- ~GroupMapAccessor() {} |
- |
- base::Lock lock_; |
- std::vector<GroupToIDMap> group_to_id_maps_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GroupMapAccessor); |
-}; |
-} // namespace |
- |
-void AssociateGoogleVariationID(IDCollectionKey key, |
- const std::string& trial_name, |
- const std::string& group_name, |
- VariationID id) { |
- GroupMapAccessor::GetInstance()->AssociateID( |
- key, MakeActiveGroupId(trial_name, group_name), id, false); |
-} |
- |
-void AssociateGoogleVariationIDForce(IDCollectionKey key, |
- const std::string& trial_name, |
- const std::string& group_name, |
- VariationID id) { |
- AssociateGoogleVariationIDForceHashes( |
- key, MakeActiveGroupId(trial_name, group_name), id); |
-} |
- |
-void AssociateGoogleVariationIDForceHashes(IDCollectionKey key, |
- const ActiveGroupId& active_group, |
- VariationID id) { |
- GroupMapAccessor::GetInstance()->AssociateID(key, active_group, id, true); |
-} |
- |
-VariationID GetGoogleVariationID(IDCollectionKey key, |
- const std::string& trial_name, |
- const std::string& group_name) { |
- return GetGoogleVariationIDFromHashes( |
- key, MakeActiveGroupId(trial_name, group_name)); |
-} |
- |
-VariationID GetGoogleVariationIDFromHashes( |
- IDCollectionKey key, |
- const ActiveGroupId& active_group) { |
- return GroupMapAccessor::GetInstance()->GetID(key, active_group); |
-} |
- |
-bool AssociateVariationParams( |
+bool AssociateFieldTrialParams( |
const std::string& trial_name, |
const std::string& group_name, |
const std::map<std::string, std::string>& params) { |
@@ -158,14 +19,14 @@ bool AssociateVariationParams( |
->AssociateFieldTrialParams(trial_name, group_name, params); |
} |
-bool GetVariationParams(const std::string& trial_name, |
- std::map<std::string, std::string>* params) { |
+bool GetFieldTrialParams(const std::string& trial_name, |
+ std::map<std::string, std::string>* params) { |
return base::FieldTrialParamAssociator::GetInstance()->GetFieldTrialParams( |
trial_name, params); |
} |
-bool GetVariationParamsByFeature(const base::Feature& feature, |
- std::map<std::string, std::string>* params) { |
+bool GetFieldTrialParamsByFeature(const base::Feature& feature, |
+ std::map<std::string, std::string>* params) { |
if (!base::FeatureList::IsEnabled(feature)) |
return false; |
@@ -173,13 +34,13 @@ bool GetVariationParamsByFeature(const base::Feature& feature, |
if (!trial) |
return false; |
- return GetVariationParams(trial->trial_name(), params); |
+ return GetFieldTrialParams(trial->trial_name(), params); |
} |
-std::string GetVariationParamValue(const std::string& trial_name, |
- const std::string& param_name) { |
+std::string GetFieldTrialParamValue(const std::string& trial_name, |
+ const std::string& param_name) { |
std::map<std::string, std::string> params; |
- if (GetVariationParams(trial_name, ¶ms)) { |
+ if (GetFieldTrialParams(trial_name, ¶ms)) { |
std::map<std::string, std::string>::iterator it = params.find(param_name); |
if (it != params.end()) |
return it->second; |
@@ -187,8 +48,8 @@ std::string GetVariationParamValue(const std::string& trial_name, |
return std::string(); |
} |
-std::string GetVariationParamValueByFeature(const base::Feature& feature, |
- const std::string& param_name) { |
+std::string GetFieldTrialParamValueByFeature(const base::Feature& feature, |
+ const std::string& param_name) { |
if (!base::FeatureList::IsEnabled(feature)) |
return std::string(); |
@@ -196,18 +57,18 @@ std::string GetVariationParamValueByFeature(const base::Feature& feature, |
if (!trial) |
return std::string(); |
- return GetVariationParamValue(trial->trial_name(), param_name); |
+ return GetFieldTrialParamValue(trial->trial_name(), param_name); |
} |
-int GetVariationParamByFeatureAsInt(const base::Feature& feature, |
- const std::string& param_name, |
- int default_value) { |
+int GetFieldTrialParamByFeatureAsInt(const base::Feature& feature, |
+ const std::string& param_name, |
+ int default_value) { |
std::string value_as_string = |
- GetVariationParamValueByFeature(feature, param_name); |
+ GetFieldTrialParamValueByFeature(feature, param_name); |
int value_as_int = 0; |
if (!base::StringToInt(value_as_string, &value_as_int)) { |
if (!value_as_string.empty()) { |
- DLOG(WARNING) << "Failed to parse variation param " << param_name |
+ DLOG(WARNING) << "Failed to parse field trial param " << param_name |
<< " with string value " << value_as_string |
<< " under feature " << feature.name |
<< " into an int. Falling back to default value of " |
@@ -218,15 +79,15 @@ int GetVariationParamByFeatureAsInt(const base::Feature& feature, |
return value_as_int; |
} |
-double GetVariationParamByFeatureAsDouble(const base::Feature& feature, |
- const std::string& param_name, |
- double default_value) { |
+double GetFieldTrialParamByFeatureAsDouble(const base::Feature& feature, |
+ const std::string& param_name, |
+ double default_value) { |
std::string value_as_string = |
- GetVariationParamValueByFeature(feature, param_name); |
+ GetFieldTrialParamValueByFeature(feature, param_name); |
double value_as_double = 0; |
if (!base::StringToDouble(value_as_string, &value_as_double)) { |
if (!value_as_string.empty()) { |
- DLOG(WARNING) << "Failed to parse variation param " << param_name |
+ DLOG(WARNING) << "Failed to parse field trial param " << param_name |
<< " with string value " << value_as_string |
<< " under feature " << feature.name |
<< " into a double. Falling back to default value of " |
@@ -237,18 +98,18 @@ double GetVariationParamByFeatureAsDouble(const base::Feature& feature, |
return value_as_double; |
} |
-bool GetVariationParamByFeatureAsBool(const base::Feature& feature, |
- const std::string& param_name, |
- bool default_value) { |
+bool GetFieldTrialParamByFeatureAsBool(const base::Feature& feature, |
+ const std::string& param_name, |
+ bool default_value) { |
std::string value_as_string = |
- variations::GetVariationParamValueByFeature(feature, param_name); |
+ GetFieldTrialParamValueByFeature(feature, param_name); |
if (value_as_string == "true") |
return true; |
if (value_as_string == "false") |
return false; |
if (!value_as_string.empty()) { |
- DLOG(WARNING) << "Failed to parse variation param " << param_name |
+ DLOG(WARNING) << "Failed to parse field trial param " << param_name |
<< " with string value " << value_as_string |
<< " under feature " << feature.name |
<< " into a bool. Falling back to default value of " |
@@ -257,18 +118,4 @@ bool GetVariationParamByFeatureAsBool(const base::Feature& feature, |
return default_value; |
} |
-// Functions below are exposed for testing explicitly behind this namespace. |
-// They simply wrap existing functions in this file. |
-namespace testing { |
- |
-void ClearAllVariationIDs() { |
- GroupMapAccessor::GetInstance()->ClearAllMapsForTesting(); |
-} |
- |
-void ClearAllVariationParams() { |
- base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); |
-} |
- |
-} // namespace testing |
- |
-} // namespace variations |
+} // namespace base |