// Copyright 2013 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_channel.h"

#include "base/logging.h"
#include "components/version_info/version_info.h"

namespace {

// 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_override_count ? g_overridden_channel : g_current_channel;
}

void SetCurrentChannel(version_info::Channel channel) {
  // In certain unit tests, SetCurrentChannel can be called within the same
  // process (where e.g. utility processes run as a separate thread). Don't
  // write if the value is the same to avoid TSAN failures.
  if (channel != g_current_channel)
    g_current_channel = channel;
}

ScopedCurrentChannel::ScopedCurrentChannel(version_info::Channel channel)
    : channel_(channel),
      original_overridden_channel_(g_overridden_channel),
      original_override_count_(g_override_count) {
  g_overridden_channel = channel;
  ++g_override_count;
}

ScopedCurrentChannel::~ScopedCurrentChannel() {
  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
