Index: components/flags_ui/flags_state.cc |
diff --git a/components/flags_ui/flags_state.cc b/components/flags_ui/flags_state.cc |
index cadb8ee140137388db6ffb2bd33d001dad07430c..441949bcbc49a75abbcb3218995ff541c8df7ed0 100644 |
--- a/components/flags_ui/flags_state.cc |
+++ b/components/flags_ui/flags_state.cc |
@@ -199,11 +199,14 @@ base::Value* CreateOptionsData(const FeatureEntry& entry, |
// |kTrialGroupAboutFlags|. |
void RegisterFeatureVariationParameters( |
const std::string& feature_trial_name, |
- const FeatureEntry::FeatureVariation& feature_variation) { |
+ const FeatureEntry::FeatureVariation* feature_variation) { |
std::map<std::string, std::string> params; |
- for (int i = 0; i < feature_variation.num_params; ++i) { |
- params[feature_variation.params[i].param_name] = |
- feature_variation.params[i].param_value; |
+ if (feature_variation) { |
+ // Copy the parameters for non-null variations. |
+ for (int i = 0; i < feature_variation->num_params; ++i) { |
+ params[feature_variation->params[i].param_name] = |
+ feature_variation->params[i].param_value; |
+ } |
} |
bool success = variations::AssociateVariationParams( |
@@ -443,9 +446,10 @@ void FlagsState::RegisterAllFeatureVariationParameters( |
for (int j = 0; j < e.num_options; ++j) { |
const FeatureEntry::FeatureVariation* variation = |
e.VariationForOption(j); |
- if (variation != nullptr && enabled_entries.count(e.NameForOption(j))) { |
- // If the option is selected by the user & has variation, register it. |
- RegisterFeatureVariationParameters(e.feature_trial_name, *variation); |
+ if (e.StateForOption(j) == FeatureEntry::FeatureState::ENABLED && |
+ enabled_entries.count(e.NameForOption(j))) { |
+ // If the option is enabled by the user, register it. |
+ RegisterFeatureVariationParameters(e.feature_trial_name, variation); |
// TODO(jkrcal) The code does not associate the feature with the field |
// trial |e.feature_trial_name|. The reason is that features |
// overridden in chrome://flags are translated to command-line flags |