blob: ce4292441ed25081c52176b59c12bfeb472ae960 [file] [log] [blame]
[email protected]77816eaa2012-07-24 11:19:081// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]49df6022008-08-27 19:03:432// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
[email protected]6723f832008-08-11 15:38:274
[email protected]bcff05a2010-04-14 01:46:435#include "base/file_version_info_mac.h"
[email protected]6723f832008-08-11 15:38:276
[email protected]7c1e3032010-12-20 18:40:427#import <Foundation/Foundation.h>
[email protected]1265917f2008-08-12 17:33:528
[email protected]57999812013-02-24 05:40:529#include "base/files/file_path.h"
[email protected]7c1e3032010-12-20 18:40:4210#include "base/logging.h"
[email protected]2f1804c2012-01-19 14:59:0711#include "base/mac/bundle_locations.h"
[email protected]27d02e02011-05-05 21:27:0712#include "base/mac/foundation_util.h"
[email protected]9fe1a5b2013-02-07 19:18:0313#include "base/strings/sys_string_conversions.h"
avi9b6f42932015-12-26 22:15:1414#include "build/build_config.h"
[email protected]6723f832008-08-11 15:38:2715
[email protected]ea053a982011-04-11 19:17:1316FileVersionInfoMac::FileVersionInfoMac(NSBundle *bundle)
17 : bundle_([bundle retain]) {
[email protected]6723f832008-08-11 15:38:2718}
19
[email protected]64b29caf2011-02-24 20:23:0320FileVersionInfoMac::~FileVersionInfoMac() {}
21
[email protected]6723f832008-08-11 15:38:2722// static
23FileVersionInfo* FileVersionInfo::CreateFileVersionInfoForCurrentModule() {
[email protected]2f1804c2012-01-19 14:59:0724 return CreateFileVersionInfo(base::mac::FrameworkBundlePath());
[email protected]0956223822008-12-23 16:57:3625}
26
27// static
28FileVersionInfo* FileVersionInfo::CreateFileVersionInfo(
[email protected]aaa6df42013-02-17 19:36:0329 const base::FilePath& file_path) {
[email protected]7c1e3032010-12-20 18:40:4230 NSString* path = base::SysUTF8ToNSString(file_path.value());
31 NSBundle* bundle = [NSBundle bundleWithPath:path];
32 return new FileVersionInfoMac(bundle);
[email protected]6723f832008-08-11 15:38:2733}
34
[email protected]f527d9c2013-12-30 21:43:0035base::string16 FileVersionInfoMac::company_name() {
36 return base::string16();
[email protected]6723f832008-08-11 15:38:2737}
38
[email protected]f527d9c2013-12-30 21:43:0039base::string16 FileVersionInfoMac::company_short_name() {
40 return base::string16();
[email protected]6723f832008-08-11 15:38:2741}
42
[email protected]f527d9c2013-12-30 21:43:0043base::string16 FileVersionInfoMac::internal_name() {
44 return base::string16();
[email protected]6723f832008-08-11 15:38:2745}
46
[email protected]f527d9c2013-12-30 21:43:0047base::string16 FileVersionInfoMac::product_name() {
[email protected]4f260d02010-12-23 18:35:4248 return GetString16Value(kCFBundleNameKey);
[email protected]6723f832008-08-11 15:38:2749}
50
[email protected]f527d9c2013-12-30 21:43:0051base::string16 FileVersionInfoMac::product_short_name() {
[email protected]4f260d02010-12-23 18:35:4252 return GetString16Value(kCFBundleNameKey);
[email protected]6723f832008-08-11 15:38:2753}
54
[email protected]f527d9c2013-12-30 21:43:0055base::string16 FileVersionInfoMac::comments() {
56 return base::string16();
[email protected]6723f832008-08-11 15:38:2757}
58
[email protected]f527d9c2013-12-30 21:43:0059base::string16 FileVersionInfoMac::legal_copyright() {
[email protected]4f260d02010-12-23 18:35:4260 return GetString16Value(CFSTR("CFBundleGetInfoString"));
[email protected]6723f832008-08-11 15:38:2761}
62
[email protected]f527d9c2013-12-30 21:43:0063base::string16 FileVersionInfoMac::product_version() {
[email protected]77816eaa2012-07-24 11:19:0864 // On OS X, CFBundleVersion is used by LaunchServices, and must follow
65 // specific formatting rules, so the four-part Chrome version is in
stuartmorgan5e617ac2014-09-08 22:51:2466 // CFBundleShortVersionString. On iOS, both have a policy-enfoced limit
67 // of three version components, so the full version is stored in a custom
68 // key (CrBundleVersion) falling back to CFBundleVersion if not present.
[email protected]77816eaa2012-07-24 11:19:0869#if defined(OS_IOS)
stuartmorgan5e617ac2014-09-08 22:51:2470 base::string16 version(GetString16Value(CFSTR("CrBundleVersion")));
71 if (version.length() > 0)
72 return version;
[email protected]77816eaa2012-07-24 11:19:0873 return GetString16Value(CFSTR("CFBundleVersion"));
74#else
[email protected]4f260d02010-12-23 18:35:4275 return GetString16Value(CFSTR("CFBundleShortVersionString"));
[email protected]77816eaa2012-07-24 11:19:0876#endif // defined(OS_IOS)
[email protected]6723f832008-08-11 15:38:2777}
78
[email protected]f527d9c2013-12-30 21:43:0079base::string16 FileVersionInfoMac::file_description() {
80 return base::string16();
[email protected]6723f832008-08-11 15:38:2781}
82
[email protected]f527d9c2013-12-30 21:43:0083base::string16 FileVersionInfoMac::legal_trademarks() {
84 return base::string16();
[email protected]6723f832008-08-11 15:38:2785}
86
[email protected]f527d9c2013-12-30 21:43:0087base::string16 FileVersionInfoMac::private_build() {
88 return base::string16();
[email protected]6723f832008-08-11 15:38:2789}
90
[email protected]f527d9c2013-12-30 21:43:0091base::string16 FileVersionInfoMac::file_version() {
[email protected]41cd00a42009-10-14 15:51:5792 return product_version();
[email protected]6723f832008-08-11 15:38:2793}
94
[email protected]f527d9c2013-12-30 21:43:0095base::string16 FileVersionInfoMac::original_filename() {
[email protected]4f260d02010-12-23 18:35:4296 return GetString16Value(kCFBundleNameKey);
[email protected]6723f832008-08-11 15:38:2797}
98
[email protected]f527d9c2013-12-30 21:43:0099base::string16 FileVersionInfoMac::special_build() {
100 return base::string16();
[email protected]6723f832008-08-11 15:38:27101}
102
[email protected]f527d9c2013-12-30 21:43:00103base::string16 FileVersionInfoMac::last_change() {
[email protected]bbf52442012-08-23 22:53:18104 return GetString16Value(CFSTR("SCMRevision"));
[email protected]6723f832008-08-11 15:38:27105}
106
[email protected]bcff05a2010-04-14 01:46:43107bool FileVersionInfoMac::is_official_build() {
[email protected]1f2fe992009-06-01 18:27:27108#if defined (GOOGLE_CHROME_BUILD)
109 return true;
110#else
[email protected]6723f832008-08-11 15:38:27111 return false;
[email protected]1f2fe992009-06-01 18:27:27112#endif
[email protected]6723f832008-08-11 15:38:27113}
114
[email protected]f527d9c2013-12-30 21:43:00115base::string16 FileVersionInfoMac::GetString16Value(CFStringRef name) {
[email protected]6723f832008-08-11 15:38:27116 if (bundle_) {
[email protected]0378bf42011-01-01 18:20:14117 NSString *ns_name = base::mac::CFToNSCast(name);
[email protected]7c1e3032010-12-20 18:40:42118 NSString* value = [bundle_ objectForInfoDictionaryKey:ns_name];
[email protected]6723f832008-08-11 15:38:27119 if (value) {
[email protected]4f260d02010-12-23 18:35:42120 return base::SysNSStringToUTF16(value);
[email protected]6723f832008-08-11 15:38:27121 }
122 }
[email protected]f527d9c2013-12-30 21:43:00123 return base::string16();
[email protected]6723f832008-08-11 15:38:27124}