Home | History | Annotate | Download | only in common
      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 
     10 namespace chrome {
     11 
     12 namespace {
     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.
     17 VersionInfo::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
     50 std::string VersionInfo::GetVersionStringModifier() {
     51   std::string modifier;
     52   GetChannelImpl(&modifier);
     53   return modifier;
     54 }
     55 
     56 // static
     57 VersionInfo::Channel VersionInfo::GetChannel() {
     58   return GetChannelImpl(NULL);
     59 }
     60 
     61 }  // namespace chrome
     62