chrome_version_info_posix.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/common/chrome_version_info.h"
6
7#include "base/strings/string_util.h"
8#include "build/build_config.h"
9
10namespace chrome {
11
12namespace {
13
14// Helper function to return both the channel enum and modifier string.
15// Implements both together to prevent their behavior from diverging, which has
16// happened multiple times in the past.
17VersionInfo::Channel GetChannelImpl(std::string* modifier_out) {
18  VersionInfo::Channel channel = VersionInfo::CHANNEL_UNKNOWN;
19  std::string modifier;
20
21  char* env = getenv("CHROME_VERSION_EXTRA");
22  if (env)
23    modifier = env;
24
25#if defined(GOOGLE_CHROME_BUILD)
26  // Only ever return "", "unknown", "dev" or "beta" in a branded build.
27  if (modifier == "unstable")  // linux version of "dev"
28    modifier = "dev";
29  if (modifier == "stable") {
30    channel = VersionInfo::CHANNEL_STABLE;
31    modifier = "";
32  } else if (modifier == "dev") {
33    channel = VersionInfo::CHANNEL_DEV;
34  } else if (modifier == "beta") {
35    channel = VersionInfo::CHANNEL_BETA;
36  } else {
37    modifier = "unknown";
38  }
39#endif
40
41  if (modifier_out)
42    modifier_out->swap(modifier);
43
44  return channel;
45}
46
47}  // namespace
48
49// static
50std::string VersionInfo::GetVersionStringModifier() {
51  std::string modifier;
52  GetChannelImpl(&modifier);
53  return modifier;
54}
55
56// static
57VersionInfo::Channel VersionInfo::GetChannel() {
58  return GetChannelImpl(NULL);
59}
60
61}  // namespace chrome
62