1 // Copyright (c) 2012 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.
5 #include "chrome/common/chrome_version_info.h"
7 #import <Foundation/Foundation.h>
9 #include "base/basictypes.h"
10 #include "base/mac/bundle_locations.h"
11 #include "base/strings/sys_string_conversions.h"
16 std::string VersionInfo::GetVersionStringModifier() {
17 #if defined(GOOGLE_CHROME_BUILD)
18 // Use the main Chrome application bundle and not the framework bundle.
19 // Keystone keys don't live in the framework.
20 NSBundle* bundle = base::mac::OuterBundle();
21 NSString* channel = [bundle objectForInfoDictionaryKey:@"KSChannelID"];
23 // Only ever return "", "unknown", "beta", "dev", or "canary" in a branded
25 if (![bundle objectForInfoDictionaryKey:@"KSProductID"]) {
26 // This build is not Keystone-enabled, it can't have a channel.
28 } else if (!channel) {
29 // For the stable channel, KSChannelID is not set.
31 } else if ([channel isEqual:@"beta"] ||
32 [channel isEqual:@"dev"] ||
33 [channel isEqual:@"canary"]) {
39 return base::SysNSStringToUTF8(channel);
46 VersionInfo::Channel VersionInfo::GetChannel() {
47 #if defined(GOOGLE_CHROME_BUILD)
48 std::string channel = GetVersionStringModifier();
49 if (channel.empty()) {
50 return CHANNEL_STABLE;
51 } else if (channel == "beta") {
53 } else if (channel == "dev") {
55 } else if (channel == "canary") {
56 return CHANNEL_CANARY;
60 return CHANNEL_UNKNOWN;