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. 4 5 #include "base/file_version_info_mac.h" 6 7 #import <Foundation/Foundation.h> 8 9 #include "base/files/file_path.h" 10 #include "base/logging.h" 11 #include "base/mac/bundle_locations.h" 12 #include "base/mac/foundation_util.h" 13 #include "base/strings/sys_string_conversions.h" 14 15 FileVersionInfoMac::FileVersionInfoMac(NSBundle *bundle) 16 : bundle_([bundle retain]) { 17 } 18 19 FileVersionInfoMac::~FileVersionInfoMac() {} 20 21 // static 22 FileVersionInfo* FileVersionInfo::CreateFileVersionInfoForCurrentModule() { 23 return CreateFileVersionInfo(base::mac::FrameworkBundlePath()); 24 } 25 26 // static 27 FileVersionInfo* FileVersionInfo::CreateFileVersionInfo( 28 const base::FilePath& file_path) { 29 NSString* path = base::SysUTF8ToNSString(file_path.value()); 30 NSBundle* bundle = [NSBundle bundleWithPath:path]; 31 return new FileVersionInfoMac(bundle); 32 } 33 34 string16 FileVersionInfoMac::company_name() { 35 return string16(); 36 } 37 38 string16 FileVersionInfoMac::company_short_name() { 39 return string16(); 40 } 41 42 string16 FileVersionInfoMac::internal_name() { 43 return string16(); 44 } 45 46 string16 FileVersionInfoMac::product_name() { 47 return GetString16Value(kCFBundleNameKey); 48 } 49 50 string16 FileVersionInfoMac::product_short_name() { 51 return GetString16Value(kCFBundleNameKey); 52 } 53 54 string16 FileVersionInfoMac::comments() { 55 return string16(); 56 } 57 58 string16 FileVersionInfoMac::legal_copyright() { 59 return GetString16Value(CFSTR("CFBundleGetInfoString")); 60 } 61 62 string16 FileVersionInfoMac::product_version() { 63 // On OS X, CFBundleVersion is used by LaunchServices, and must follow 64 // specific formatting rules, so the four-part Chrome version is in 65 // CFBundleShortVersionString. On iOS, however, CFBundleVersion can be the 66 // full version, but CFBundleShortVersionString has a policy-enfoced limit 67 // of three version components. 68 #if defined(OS_IOS) 69 return GetString16Value(CFSTR("CFBundleVersion")); 70 #else 71 return GetString16Value(CFSTR("CFBundleShortVersionString")); 72 #endif // defined(OS_IOS) 73 } 74 75 string16 FileVersionInfoMac::file_description() { 76 return string16(); 77 } 78 79 string16 FileVersionInfoMac::legal_trademarks() { 80 return string16(); 81 } 82 83 string16 FileVersionInfoMac::private_build() { 84 return string16(); 85 } 86 87 string16 FileVersionInfoMac::file_version() { 88 return product_version(); 89 } 90 91 string16 FileVersionInfoMac::original_filename() { 92 return GetString16Value(kCFBundleNameKey); 93 } 94 95 string16 FileVersionInfoMac::special_build() { 96 return string16(); 97 } 98 99 string16 FileVersionInfoMac::last_change() { 100 return GetString16Value(CFSTR("SCMRevision")); 101 } 102 103 bool FileVersionInfoMac::is_official_build() { 104 #if defined (GOOGLE_CHROME_BUILD) 105 return true; 106 #else 107 return false; 108 #endif 109 } 110 111 string16 FileVersionInfoMac::GetString16Value(CFStringRef name) { 112 if (bundle_) { 113 NSString *ns_name = base::mac::CFToNSCast(name); 114 NSString* value = [bundle_ objectForInfoDictionaryKey:ns_name]; 115 if (value) { 116 return base::SysNSStringToUTF16(value); 117 } 118 } 119 return string16(); 120 } 121