123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // Copyright 2019 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 "base/scoped_add_feature_flags.h"
- #include "base/base_switches.h"
- #include "base/command_line.h"
- #include "base/containers/contains.h"
- #include "base/strings/strcat.h"
- #include "base/strings/string_util.h"
- namespace base {
- ScopedAddFeatureFlags::ScopedAddFeatureFlags(CommandLine* command_line)
- : command_line_(command_line) {
- std::string enabled_features =
- command_line->GetSwitchValueASCII(switches::kEnableFeatures);
- std::string disabled_features =
- command_line->GetSwitchValueASCII(switches::kDisableFeatures);
- for (const StringPiece& feature :
- FeatureList::SplitFeatureListString(enabled_features)) {
- enabled_features_.emplace_back(feature);
- }
- for (const StringPiece& feature :
- FeatureList::SplitFeatureListString(disabled_features)) {
- disabled_features_.emplace_back(feature);
- }
- }
- ScopedAddFeatureFlags::~ScopedAddFeatureFlags() {
- command_line_->RemoveSwitch(switches::kEnableFeatures);
- command_line_->AppendSwitchASCII(switches::kEnableFeatures,
- JoinString(enabled_features_, ","));
- command_line_->RemoveSwitch(switches::kDisableFeatures);
- command_line_->AppendSwitchASCII(switches::kDisableFeatures,
- JoinString(disabled_features_, ","));
- }
- void ScopedAddFeatureFlags::EnableIfNotSet(const Feature& feature) {
- AddFeatureIfNotSet(feature, /*suffix=*/"", /*enable=*/true);
- }
- void ScopedAddFeatureFlags::EnableIfNotSetWithParameter(const Feature& feature,
- StringPiece name,
- StringPiece value) {
- std::string suffix = StrCat({":", name, "/", value});
- AddFeatureIfNotSet(feature, suffix, true /* enable */);
- }
- void ScopedAddFeatureFlags::DisableIfNotSet(const Feature& feature) {
- AddFeatureIfNotSet(feature, /*suffix=*/"", /*enable=*/false);
- }
- bool ScopedAddFeatureFlags::IsEnabled(const Feature& feature) {
- return IsEnabledWithParameter(feature, /*parameter_name=*/"",
- /*parameter_value=*/"");
- }
- bool ScopedAddFeatureFlags::IsEnabledWithParameter(
- const Feature& feature,
- StringPiece parameter_name,
- StringPiece parameter_value) {
- std::string feature_name = feature.name;
- if (!parameter_name.empty()) {
- StrAppend(&feature_name, {":", parameter_name, "/", parameter_value});
- }
- if (Contains(disabled_features_, feature_name))
- return false;
- if (Contains(enabled_features_, feature_name))
- return true;
- return feature.default_state == FEATURE_ENABLED_BY_DEFAULT;
- }
- void ScopedAddFeatureFlags::AddFeatureIfNotSet(const Feature& feature,
- StringPiece suffix,
- bool enable) {
- std::string feature_name = StrCat({feature.name, suffix});
- if (Contains(enabled_features_, feature_name) ||
- Contains(disabled_features_, feature_name)) {
- return;
- }
- if (enable) {
- enabled_features_.emplace_back(feature_name);
- } else {
- disabled_features_.emplace_back(feature_name);
- }
- }
- } // namespace base
|