1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FILE_VERSION_INFO_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_FILE_VERSION_INFO_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <string> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 15*6777b538SAndroid Build Coastguard Worker #include <windows.h> 16*6777b538SAndroid Build Coastguard Worker #endif 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace base { 19*6777b538SAndroid Build Coastguard Worker class FilePath; 20*6777b538SAndroid Build Coastguard Worker } 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker // Provides an interface for accessing the version information for a file. This 23*6777b538SAndroid Build Coastguard Worker // is the information you access when you select a file in the Windows Explorer, 24*6777b538SAndroid Build Coastguard Worker // right-click select Properties, then click the Version tab, and on the Mac 25*6777b538SAndroid Build Coastguard Worker // when you select a file in the Finder and do a Get Info. 26*6777b538SAndroid Build Coastguard Worker // 27*6777b538SAndroid Build Coastguard Worker // This list of properties is straight out of Win32's VerQueryValue 28*6777b538SAndroid Build Coastguard Worker // <http://msdn.microsoft.com/en-us/library/ms647464.aspx> and the Mac 29*6777b538SAndroid Build Coastguard Worker // version returns values from the Info.plist as appropriate. TODO(avi): make 30*6777b538SAndroid Build Coastguard Worker // this a less-obvious Windows-ism. 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT FileVersionInfo { 33*6777b538SAndroid Build Coastguard Worker public: ~FileVersionInfo()34*6777b538SAndroid Build Coastguard Worker virtual ~FileVersionInfo() {} 35*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) 36*6777b538SAndroid Build Coastguard Worker // Creates a FileVersionInfo for the specified path. Returns nullptr if 37*6777b538SAndroid Build Coastguard Worker // something goes wrong (typically the file does not exit or cannot be 38*6777b538SAndroid Build Coastguard Worker // opened). 39*6777b538SAndroid Build Coastguard Worker static std::unique_ptr<FileVersionInfo> CreateFileVersionInfo( 40*6777b538SAndroid Build Coastguard Worker const base::FilePath& file_path); 41*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 44*6777b538SAndroid Build Coastguard Worker // Creates a FileVersionInfo for the specified module. Returns nullptr in 45*6777b538SAndroid Build Coastguard Worker // case of error. 46*6777b538SAndroid Build Coastguard Worker static std::unique_ptr<FileVersionInfo> CreateFileVersionInfoForModule( 47*6777b538SAndroid Build Coastguard Worker HMODULE module); 48*6777b538SAndroid Build Coastguard Worker #else 49*6777b538SAndroid Build Coastguard Worker // Creates a FileVersionInfo for the current module. Returns nullptr in case 50*6777b538SAndroid Build Coastguard Worker // of error. 51*6777b538SAndroid Build Coastguard Worker static std::unique_ptr<FileVersionInfo> 52*6777b538SAndroid Build Coastguard Worker CreateFileVersionInfoForCurrentModule(); 53*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker // Accessors to the different version properties. 56*6777b538SAndroid Build Coastguard Worker // Returns an empty string if the property is not found. 57*6777b538SAndroid Build Coastguard Worker virtual std::u16string company_name() = 0; 58*6777b538SAndroid Build Coastguard Worker virtual std::u16string company_short_name() = 0; 59*6777b538SAndroid Build Coastguard Worker virtual std::u16string product_name() = 0; 60*6777b538SAndroid Build Coastguard Worker virtual std::u16string product_short_name() = 0; 61*6777b538SAndroid Build Coastguard Worker virtual std::u16string internal_name() = 0; 62*6777b538SAndroid Build Coastguard Worker virtual std::u16string product_version() = 0; 63*6777b538SAndroid Build Coastguard Worker virtual std::u16string special_build() = 0; 64*6777b538SAndroid Build Coastguard Worker virtual std::u16string original_filename() = 0; 65*6777b538SAndroid Build Coastguard Worker virtual std::u16string file_description() = 0; 66*6777b538SAndroid Build Coastguard Worker virtual std::u16string file_version() = 0; 67*6777b538SAndroid Build Coastguard Worker }; 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker #endif // BASE_FILE_VERSION_INFO_H_ 70