blob: 6c0fd0b44914ad409ac4701c189bdc1790715971 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/variations/feature_overrides.h"
namespace variations {
FeatureOverrides::FeatureOverrides(base::FeatureList& feature_list)
: feature_list_(feature_list) {}
FeatureOverrides::~FeatureOverrides() {
// TODO(crbug.com/379864779): This doesn't play well with potential server-
// side overrides.
for (const auto& field_trial_override : field_trial_overrides_) {
feature_list_->RegisterFieldTrialOverride(
field_trial_override.feature->name, field_trial_override.override_state,
field_trial_override.field_trial);
}
feature_list_->RegisterExtraFeatureOverrides(
std::move(overrides_), /*replace_use_default_overrides=*/true);
}
void FeatureOverrides::EnableFeature(const base::Feature& feature) {
overrides_.emplace_back(
std::cref(feature),
base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE);
}
void FeatureOverrides::DisableFeature(const base::Feature& feature) {
overrides_.emplace_back(
std::cref(feature),
base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE);
}
void FeatureOverrides::OverrideFeatureWithFieldTrial(
const base::Feature& feature,
base::FeatureList::OverrideState override_state,
base::FieldTrial* field_trial) {
field_trial_overrides_.emplace_back(FieldTrialOverride{
.feature = raw_ref(feature),
.override_state = override_state,
.field_trial = field_trial,
});
}
} // namespace variations