blob: 7efa308dbecd46fff0b87de24840037e1cbf55a6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// Copyright 2020 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 "extensions/common/features/feature_flags.h"
#include <algorithm>
#include "base/check.h"
#include "base/feature_list.h"
namespace extensions {
namespace {
// Feature flags for extension features. These can be used to implement remote
// kill switches for extension features. Note any such feature flags must
// generally be removed once the API has been stable for a few releases.
constexpr base::Feature kFeatureFlags[] = {
{"DeclarativeNetRequest", base::FEATURE_ENABLED_BY_DEFAULT}};
const std::vector<base::Feature>* g_feature_flags_test_override = nullptr;
template <typename T>
const base::Feature* GetFeature(T begin,
T end,
const std::string& feature_flag) {
T it =
std::find_if(begin, end, [&feature_flag](const base::Feature& feature) {
return feature.name == feature_flag;
});
return it == end ? nullptr : &(*it);
}
const base::Feature* GetFeature(const std::string& feature_flag) {
if (g_feature_flags_test_override) {
return GetFeature(g_feature_flags_test_override->begin(),
g_feature_flags_test_override->end(), feature_flag);
}
return GetFeature(std::begin(kFeatureFlags), std::end(kFeatureFlags),
feature_flag);
}
} // namespace
bool IsFeatureFlagEnabled(const std::string& feature_flag) {
const base::Feature* feature = GetFeature(feature_flag);
CHECK(feature) << feature_flag;
return base::FeatureList::IsEnabled(*feature);
}
ScopedFeatureFlagsOverride CreateScopedFeatureFlagsOverrideForTesting(
const std::vector<base::Feature>* features) {
return base::AutoReset<const std::vector<base::Feature>*>(
&g_feature_flags_test_override, features);
}
} // namespace extensions
|