| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/flags_ui/flags_state.h" | 5 #include "components/flags_ui/flags_state.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 return result; | 192 return result; |
| 193 } | 193 } |
| 194 | 194 |
| 195 // Registers variation parameters specified by |feature_variation| for the field | 195 // Registers variation parameters specified by |feature_variation| for the field |
| 196 // trial named |feature_trial_name|, unless a group for this trial has already | 196 // trial named |feature_trial_name|, unless a group for this trial has already |
| 197 // been created (e.g. via command-line switches that take precedence over | 197 // been created (e.g. via command-line switches that take precedence over |
| 198 // about:flags). In the trial, the function creates a new constant group called | 198 // about:flags). In the trial, the function creates a new constant group called |
| 199 // |kTrialGroupAboutFlags|. | 199 // |kTrialGroupAboutFlags|. |
| 200 void RegisterFeatureVariationParameters( | 200 void RegisterFeatureVariationParameters( |
| 201 const std::string& feature_trial_name, | 201 const std::string& feature_trial_name, |
| 202 const FeatureEntry::FeatureVariation& feature_variation) { | 202 const FeatureEntry::FeatureVariation* feature_variation) { |
| 203 std::map<std::string, std::string> params; | 203 std::map<std::string, std::string> params; |
| 204 for (int i = 0; i < feature_variation.num_params; ++i) { | 204 if (feature_variation) { |
| 205 params[feature_variation.params[i].param_name] = | 205 // Copy the parameters for non-null variations. |
| 206 feature_variation.params[i].param_value; | 206 for (int i = 0; i < feature_variation->num_params; ++i) { |
| 207 params[feature_variation->params[i].param_name] = |
| 208 feature_variation->params[i].param_value; |
| 209 } |
| 207 } | 210 } |
| 208 | 211 |
| 209 bool success = variations::AssociateVariationParams( | 212 bool success = variations::AssociateVariationParams( |
| 210 feature_trial_name, internal::kTrialGroupAboutFlags, params); | 213 feature_trial_name, internal::kTrialGroupAboutFlags, params); |
| 211 if (success) { | 214 if (success) { |
| 212 // Successful association also means that no group is created and selected | 215 // Successful association also means that no group is created and selected |
| 213 // for the trial, yet. Thus, create the trial to select the group. This way, | 216 // for the trial, yet. Thus, create the trial to select the group. This way, |
| 214 // the parameters cannot get overwritten in later phases (such as from the | 217 // the parameters cannot get overwritten in later phases (such as from the |
| 215 // server). | 218 // server). |
| 216 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( | 219 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 FlagsStorage* flags_storage) { | 439 FlagsStorage* flags_storage) { |
| 437 std::set<std::string> enabled_entries; | 440 std::set<std::string> enabled_entries; |
| 438 GetSanitizedEnabledFlagsForCurrentPlatform(flags_storage, &enabled_entries); | 441 GetSanitizedEnabledFlagsForCurrentPlatform(flags_storage, &enabled_entries); |
| 439 | 442 |
| 440 for (size_t i = 0; i < num_feature_entries_; ++i) { | 443 for (size_t i = 0; i < num_feature_entries_; ++i) { |
| 441 const FeatureEntry& e = feature_entries_[i]; | 444 const FeatureEntry& e = feature_entries_[i]; |
| 442 if (e.type == FeatureEntry::FEATURE_WITH_VARIATIONS_VALUE) { | 445 if (e.type == FeatureEntry::FEATURE_WITH_VARIATIONS_VALUE) { |
| 443 for (int j = 0; j < e.num_options; ++j) { | 446 for (int j = 0; j < e.num_options; ++j) { |
| 444 const FeatureEntry::FeatureVariation* variation = | 447 const FeatureEntry::FeatureVariation* variation = |
| 445 e.VariationForOption(j); | 448 e.VariationForOption(j); |
| 446 if (variation != nullptr && enabled_entries.count(e.NameForOption(j))) { | 449 if (e.StateForOption(j) == FeatureEntry::FeatureState::ENABLED && |
| 447 // If the option is selected by the user & has variation, register it. | 450 enabled_entries.count(e.NameForOption(j))) { |
| 448 RegisterFeatureVariationParameters(e.feature_trial_name, *variation); | 451 // If the option is enabled by the user, register it. |
| 452 RegisterFeatureVariationParameters(e.feature_trial_name, variation); |
| 449 // TODO(jkrcal) The code does not associate the feature with the field | 453 // TODO(jkrcal) The code does not associate the feature with the field |
| 450 // trial |e.feature_trial_name|. The reason is that features | 454 // trial |e.feature_trial_name|. The reason is that features |
| 451 // overridden in chrome://flags are translated to command-line flags | 455 // overridden in chrome://flags are translated to command-line flags |
| 452 // and thus treated earlier in the initialization. The fix requires | 456 // and thus treated earlier in the initialization. The fix requires |
| 453 // larger changes. As a result: | 457 // larger changes. As a result: |
| 454 // - the API calls to variations::GetVariationParamValueByFeature and | 458 // - the API calls to variations::GetVariationParamValueByFeature and |
| 455 // to variations::GetVariationParamsByFeature do not work; and | 459 // to variations::GetVariationParamsByFeature do not work; and |
| 456 // - the API call to base::FeatureList::IsEnabled does not mark the | 460 // - the API call to base::FeatureList::IsEnabled does not mark the |
| 457 // field trial as active (and the trial does not appear in UMA). | 461 // field trial as active (and the trial does not appear in UMA). |
| 458 // If the code calls variations::GetVariationParamValue or | 462 // If the code calls variations::GetVariationParamValue or |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 } | 723 } |
| 720 | 724 |
| 721 std::set<std::string> new_enabled_entries = | 725 std::set<std::string> new_enabled_entries = |
| 722 base::STLSetIntersection<std::set<std::string>>(platform_entries, | 726 base::STLSetIntersection<std::set<std::string>>(platform_entries, |
| 723 *result); | 727 *result); |
| 724 | 728 |
| 725 result->swap(new_enabled_entries); | 729 result->swap(new_enabled_entries); |
| 726 } | 730 } |
| 727 | 731 |
| 728 } // namespace flags_ui | 732 } // namespace flags_ui |
| OLD | NEW |