Avi Drissman | e4622aa | 2022-09-08 20:36:06 | [diff] [blame] | 1 | // Copyright 2011 The Chromium Authors |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef BASE_FILE_VERSION_INFO_WIN_H_ |
| 6 | #define BASE_FILE_VERSION_INFO_WIN_H_ |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 7 | |
fdoray | 5b7de9e | 2016-06-29 23:13:11 | [diff] [blame] | 8 | #include <windows.h> |
| 9 | |
| 10 | #include <stdint.h> |
| 11 | |
dcheng | 093de9b | 2016-04-04 21:25:51 | [diff] [blame] | 12 | #include <memory> |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 13 | #include <string> |
fdoray | 5b7de9e | 2016-06-29 23:13:11 | [diff] [blame] | 14 | #include <vector> |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 15 | |
darin@chromium.org | 0bea725 | 2011-08-05 15:34:00 | [diff] [blame] | 16 | #include "base/base_export.h" |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 17 | #include "base/file_version_info.h" |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 18 | #include "base/memory/raw_ptr.h" |
Ali Hijazi | a887789 | 2022-11-10 20:51:03 | [diff] [blame] | 19 | #include "base/memory/raw_ref.h" |
Alan Screen | e93de3a | 2019-10-02 13:56:09 | [diff] [blame] | 20 | #include "base/version.h" |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 21 | |
| 22 | struct tagVS_FIXEDFILEINFO; |
| 23 | typedef tagVS_FIXEDFILEINFO VS_FIXEDFILEINFO; |
| 24 | |
mgiuca | 8137fc2 | 2015-05-07 02:20:31 | [diff] [blame] | 25 | class BASE_EXPORT FileVersionInfoWin : public FileVersionInfo { |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 26 | public: |
David Bienvenu | b4b441e | 2020-09-23 05:49:57 | [diff] [blame] | 27 | FileVersionInfoWin(const FileVersionInfoWin&) = delete; |
| 28 | FileVersionInfoWin& operator=(const FileVersionInfoWin&) = delete; |
mgiuca | 8137fc2 | 2015-05-07 02:20:31 | [diff] [blame] | 29 | ~FileVersionInfoWin() override; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 30 | |
| 31 | // Accessors to the different version properties. |
| 32 | // Returns an empty string if the property is not found. |
Jan Wilken Dörrie | 85285b0 | 2021-03-11 23:38:47 | [diff] [blame] | 33 | std::u16string company_name() override; |
| 34 | std::u16string company_short_name() override; |
| 35 | std::u16string product_name() override; |
| 36 | std::u16string product_short_name() override; |
| 37 | std::u16string internal_name() override; |
| 38 | std::u16string product_version() override; |
| 39 | std::u16string special_build() override; |
| 40 | std::u16string original_filename() override; |
| 41 | std::u16string file_description() override; |
| 42 | std::u16string file_version() override; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 43 | |
Lei Zhang | 4bb23de | 2019-10-04 16:17:08 | [diff] [blame] | 44 | // Lets you access other properties not covered above. |value| is only |
| 45 | // modified if GetValue() returns true. |
Jan Wilken Dörrie | 85285b0 | 2021-03-11 23:38:47 | [diff] [blame] | 46 | bool GetValue(const char16_t* name, std::u16string* value) const; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 47 | |
Jan Wilken Dörrie | 085b2aa | 2021-03-12 16:26:57 | [diff] [blame] | 48 | // Similar to GetValue but returns a std::u16string (empty string if the |
| 49 | // property does not exist). |
Jan Wilken Dörrie | 85285b0 | 2021-03-11 23:38:47 | [diff] [blame] | 50 | std::u16string GetStringValue(const char16_t* name) const; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 51 | |
Alan Screen | e93de3a | 2019-10-02 13:56:09 | [diff] [blame] | 52 | // Get file version number in dotted version format. |
| 53 | base::Version GetFileVersion() const; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 54 | |
David Benjamin | 04cc2b4 | 2019-01-29 05:30:33 | [diff] [blame] | 55 | // Behaves like CreateFileVersionInfo, but returns a FileVersionInfoWin. |
| 56 | static std::unique_ptr<FileVersionInfoWin> CreateFileVersionInfoWin( |
| 57 | const base::FilePath& file_path); |
| 58 | |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 59 | private: |
fdoray | 5b7de9e | 2016-06-29 23:13:11 | [diff] [blame] | 60 | friend FileVersionInfo; |
| 61 | |
| 62 | // |data| is a VS_VERSION_INFO resource. |language| and |code_page| are |
| 63 | // extracted from the \VarFileInfo\Translation value of |data|. |
| 64 | FileVersionInfoWin(std::vector<uint8_t>&& data, |
| 65 | WORD language, |
| 66 | WORD code_page); |
| 67 | FileVersionInfoWin(void* data, WORD language, WORD code_page); |
| 68 | |
| 69 | const std::vector<uint8_t> owned_data_; |
Keishi Hattori | 0e45c02 | 2021-11-27 09:25:52 | [diff] [blame] | 70 | const raw_ptr<const void> data_; |
fdoray | 5b7de9e | 2016-06-29 23:13:11 | [diff] [blame] | 71 | const WORD language_; |
| 72 | const WORD code_page_; |
| 73 | |
Lei Zhang | 4bb23de | 2019-10-04 16:17:08 | [diff] [blame] | 74 | // This is a reference for a portion of |data_|. |
Ali Hijazi | a887789 | 2022-11-10 20:51:03 | [diff] [blame] | 75 | const raw_ref<const VS_FIXEDFILEINFO> fixed_file_info_; |
tony@chromium.org | bcff05a | 2010-04-14 01:46:43 | [diff] [blame] | 76 | }; |
| 77 | |
| 78 | #endif // BASE_FILE_VERSION_INFO_WIN_H_ |