| Index: extensions/common/features/feature_channel.cc
|
| diff --git a/extensions/common/features/feature_channel.cc b/extensions/common/features/feature_channel.cc
|
| index 13bd6e1dcaee847aaccae4e4510fac40a71aea5f..26346f4a3418ce01892786d3ccdcddb767101a7f 100644
|
| --- a/extensions/common/features/feature_channel.cc
|
| +++ b/extensions/common/features/feature_channel.cc
|
| @@ -4,37 +4,49 @@
|
|
|
| #include "extensions/common/features/feature_channel.h"
|
|
|
| +#include "base/logging.h"
|
| #include "components/version_info/version_info.h"
|
|
|
| namespace {
|
|
|
| -const version_info::Channel kDefaultChannel = version_info::Channel::STABLE;
|
| -version_info::Channel g_current_channel = kDefaultChannel;
|
| +// The current channel to be reported, unless overridden by
|
| +// |ScopedCurrentChannel|.
|
| +version_info::Channel g_current_channel = version_info::Channel::STABLE;
|
| +
|
| +// The current channel overridden by |ScopedCurrentChannel|. The value is valid
|
| +// only whenever |g_override_count| is non-zero.
|
| +version_info::Channel g_overridden_channel = version_info::Channel::STABLE;
|
| +
|
| +// The number of currently existing instances of |ScopedCurrentChannel|.
|
| +int g_override_count = 0;
|
|
|
| } // namespace
|
|
|
| namespace extensions {
|
|
|
| version_info::Channel GetCurrentChannel() {
|
| - return g_current_channel;
|
| + return g_override_count ? g_overridden_channel : g_current_channel;
|
| }
|
|
|
| void SetCurrentChannel(version_info::Channel channel) {
|
| g_current_channel = channel;
|
| }
|
|
|
| -version_info::Channel GetDefaultChannel() {
|
| - return kDefaultChannel;
|
| -}
|
| -
|
| ScopedCurrentChannel::ScopedCurrentChannel(version_info::Channel channel)
|
| - : original_channel_(version_info::Channel::UNKNOWN) {
|
| - original_channel_ = GetCurrentChannel();
|
| - SetCurrentChannel(channel);
|
| + : channel_(channel),
|
| + original_overridden_channel_(g_overridden_channel),
|
| + original_override_count_(g_override_count) {
|
| + g_overridden_channel = channel;
|
| + ++g_override_count;
|
| }
|
|
|
| ScopedCurrentChannel::~ScopedCurrentChannel() {
|
| - SetCurrentChannel(original_channel_);
|
| + DCHECK_EQ(original_override_count_ + 1, g_override_count)
|
| + << "Scoped channel setters are not nested properly";
|
| + DCHECK_EQ(g_overridden_channel, channel_)
|
| + << "Scoped channel setters are not nested properly";
|
| + g_overridden_channel = original_overridden_channel_;
|
| + --g_override_count;
|
| }
|
|
|
| } // namespace extensions
|
|
|