0

Make FileVersionInfo return a unique_ptr.

Bug: none
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Id324ad0abc178937ce373e03180d2135fe3d2c97
Reviewed-on: https://chromium-review.googlesource.com/c/1235113
Commit-Queue: David Benjamin <davidben@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Rebekah Potter <rbpotter@chromium.org>
Reviewed-by: Robert Liao <robliao@chromium.org>
Reviewed-by: Albert J. Wong <ajwong@chromium.org>
Cr-Commit-Position: refs/heads/master@{#626899}
This commit is contained in:
David Benjamin
2019-01-29 05:30:33 +00:00
committed by Commit Bot
parent 157db05444
commit 04cc2b4dfa
9 changed files with 63 additions and 62 deletions

@ -5,6 +5,7 @@
#ifndef BASE_FILE_VERSION_INFO_H_
#define BASE_FILE_VERSION_INFO_H_
#include <memory>
#include <string>
#include "build/build_config.h"
@ -33,21 +34,23 @@ class BASE_EXPORT FileVersionInfo {
public:
virtual ~FileVersionInfo() {}
#if defined(OS_WIN) || defined(OS_MACOSX)
// Creates a FileVersionInfo for the specified path. Returns NULL if something
// goes wrong (typically the file does not exit or cannot be opened). The
// returned object should be deleted when you are done with it.
static FileVersionInfo* CreateFileVersionInfo(
// Creates a FileVersionInfo for the specified path. Returns nullptr if
// something goes wrong (typically the file does not exit or cannot be
// opened).
static std::unique_ptr<FileVersionInfo> CreateFileVersionInfo(
const base::FilePath& file_path);
#endif // OS_WIN || OS_MACOSX
#if defined(OS_WIN)
// Creates a FileVersionInfo for the specified module. Returns NULL in case
// of error. The returned object should be deleted when you are done with it.
static FileVersionInfo* CreateFileVersionInfoForModule(HMODULE module);
// Creates a FileVersionInfo for the specified module. Returns nullptr in
// case of error.
static std::unique_ptr<FileVersionInfo> CreateFileVersionInfoForModule(
HMODULE module);
#else
// Creates a FileVersionInfo for the current module. Returns NULL in case
// of error. The returned object should be deleted when you are done with it.
static FileVersionInfo* CreateFileVersionInfoForCurrentModule();
// Creates a FileVersionInfo for the current module. Returns nullptr in case
// of error.
static std::unique_ptr<FileVersionInfo>
CreateFileVersionInfoForCurrentModule();
#endif // OS_WIN
// Accessors to the different version properties.

@ -20,16 +20,17 @@ FileVersionInfoMac::FileVersionInfoMac(NSBundle *bundle)
FileVersionInfoMac::~FileVersionInfoMac() {}
// static
FileVersionInfo* FileVersionInfo::CreateFileVersionInfoForCurrentModule() {
std::unique_ptr<FileVersionInfo>
FileVersionInfo::CreateFileVersionInfoForCurrentModule() {
return CreateFileVersionInfo(base::mac::FrameworkBundlePath());
}
// static
FileVersionInfo* FileVersionInfo::CreateFileVersionInfo(
std::unique_ptr<FileVersionInfo> FileVersionInfo::CreateFileVersionInfo(
const base::FilePath& file_path) {
NSString* path = base::SysUTF8ToNSString(file_path.value());
NSBundle* bundle = [NSBundle bundleWithPath:path];
return new FileVersionInfoMac(bundle);
return std::make_unique<FileVersionInfoMac>(bundle);
}
base::string16 FileVersionInfoMac::company_name() {

@ -9,6 +9,7 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/stl_util.h"
#include "base/threading/scoped_blocking_call.h"
#include "base/win/resource_util.h"
@ -49,8 +50,8 @@ VS_FIXEDFILEINFO* GetVsFixedFileInfo(const void* data) {
FileVersionInfoWin::~FileVersionInfoWin() = default;
// static
FileVersionInfo* FileVersionInfo::CreateFileVersionInfoForModule(
HMODULE module) {
std::unique_ptr<FileVersionInfo>
FileVersionInfo::CreateFileVersionInfoForModule(HMODULE module) {
void* data;
size_t version_info_length;
const bool has_version_resource = base::win::GetResourceFromModule(
@ -62,13 +63,19 @@ FileVersionInfo* FileVersionInfo::CreateFileVersionInfoForModule(
if (!translate)
return nullptr;
return new FileVersionInfoWin(data, translate->language,
translate->code_page);
return base::WrapUnique(
new FileVersionInfoWin(data, translate->language, translate->code_page));
}
// static
FileVersionInfo* FileVersionInfo::CreateFileVersionInfo(
std::unique_ptr<FileVersionInfo> FileVersionInfo::CreateFileVersionInfo(
const FilePath& file_path) {
return FileVersionInfoWin::CreateFileVersionInfoWin(file_path);
}
// static
std::unique_ptr<FileVersionInfoWin>
FileVersionInfoWin::CreateFileVersionInfoWin(const FilePath& file_path) {
base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK);
DWORD dummy;
@ -86,8 +93,8 @@ FileVersionInfo* FileVersionInfo::CreateFileVersionInfo(
if (!translate)
return nullptr;
return new FileVersionInfoWin(std::move(data), translate->language,
translate->code_page);
return base::WrapUnique(new FileVersionInfoWin(
std::move(data), translate->language, translate->code_page));
}
base::string16 FileVersionInfoWin::company_name() {

@ -53,6 +53,10 @@ class BASE_EXPORT FileVersionInfoWin : public FileVersionInfo {
// Get the fixed file info if it exists. Otherwise NULL
const VS_FIXEDFILEINFO* fixed_file_info() const { return fixed_file_info_; }
// Behaves like CreateFileVersionInfo, but returns a FileVersionInfoWin.
static std::unique_ptr<FileVersionInfoWin> CreateFileVersionInfoWin(
const base::FilePath& file_path);
private:
friend FileVersionInfo;

@ -13,7 +13,6 @@
#include "base/file_version_info.h"
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/path_service.h"
#include "base/scoped_native_library.h"
#include "testing/gtest/include/gtest/gtest.h"
@ -37,7 +36,7 @@ class FileVersionInfoFactory {
explicit FileVersionInfoFactory(const FilePath& path) : path_(path) {}
std::unique_ptr<FileVersionInfo> Create() const {
return base::WrapUnique(FileVersionInfo::CreateFileVersionInfo(path_));
return FileVersionInfo::CreateFileVersionInfo(path_);
}
private:
@ -58,8 +57,7 @@ class FileVersionInfoForModuleFactory {
}
std::unique_ptr<FileVersionInfo> Create() const {
return base::WrapUnique(
FileVersionInfo::CreateFileVersionInfoForModule(library_.get()));
return FileVersionInfo::CreateFileVersionInfoForModule(library_.get());
}
private:

@ -194,17 +194,15 @@ Version OSInfo::Kernel32Version() const {
// kernel32 will still be the "real" version.
base::Version OSInfo::Kernel32BaseVersion() const {
static const base::NoDestructor<base::Version> version([] {
std::unique_ptr<FileVersionInfoWin> file_version_info(
static_cast<FileVersionInfoWin*>(
FileVersionInfoWin::CreateFileVersionInfo(
base::FilePath(FILE_PATH_LITERAL("kernel32.dll")))));
std::unique_ptr<FileVersionInfoWin> file_version_info =
FileVersionInfoWin::CreateFileVersionInfoWin(
base::FilePath(FILE_PATH_LITERAL("kernel32.dll")));
if (!file_version_info) {
// crbug.com/912061: on some systems it seems kernel32.dll might be
// corrupted or not in a state to get version info. In this case try
// kernelbase.dll as a fallback.
file_version_info.reset(static_cast<FileVersionInfoWin*>(
FileVersionInfoWin::CreateFileVersionInfo(
base::FilePath(FILE_PATH_LITERAL("kernelbase.dll")))));
file_version_info = FileVersionInfoWin::CreateFileVersionInfoWin(
base::FilePath(FILE_PATH_LITERAL("kernelbase.dll")));
}
CHECK(file_version_info);
const int major =

@ -7,7 +7,7 @@
#include <windows.h>
#include "base/command_line.h"
#include "base/file_version_info_win.h"
#include "base/file_version_info.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
@ -60,12 +60,10 @@ void SetGoogleUpdateKeys(const base::string16& product_id,
// Get the version from the resource file.
base::string16 version_string;
std::unique_ptr<FileVersionInfo> version_info(
FileVersionInfo::CreateFileVersionInfoForModule(CURRENT_MODULE()));
if (version_info.get()) {
FileVersionInfoWin* version_info_win =
static_cast<FileVersionInfoWin*>(version_info.get());
version_string = version_info_win->product_version();
std::unique_ptr<FileVersionInfo> version_info =
FileVersionInfo::CreateFileVersionInfoForModule(CURRENT_MODULE());
if (version_info) {
version_string = version_info->product_version();
} else {
LOG(ERROR) << "Unable to get version string";
// Use a random version string so that Google Update has something to go by.
@ -149,14 +147,12 @@ void CreateUninstallKey(const base::string16& uninstall_id,
key.WriteValue(kInstallLocation, unstall_binary.DirName().value().c_str());
// Get the version resource.
std::unique_ptr<FileVersionInfo> version_info(
FileVersionInfo::CreateFileVersionInfoForModule(CURRENT_MODULE()));
std::unique_ptr<FileVersionInfo> version_info =
FileVersionInfo::CreateFileVersionInfoForModule(CURRENT_MODULE());
if (version_info.get()) {
FileVersionInfoWin* version_info_win =
static_cast<FileVersionInfoWin*>(version_info.get());
key.WriteValue(kDisplayVersion, version_info_win->file_version().c_str());
key.WriteValue(kPublisher, version_info_win->company_name().c_str());
if (version_info) {
key.WriteValue(kDisplayVersion, version_info->file_version().c_str());
key.WriteValue(kPublisher, version_info->company_name().c_str());
} else {
LOG(ERROR) << "Unable to get version string";
}

@ -320,18 +320,17 @@ bool BadAMDVulkanDriverVersion() {
// 32-bit dll will be used to detect the AMD Vulkan driver.
const base::FilePath kAmdDriver64(FILE_PATH_LITERAL("amdvlk64.dll"));
const base::FilePath kAmdDriver32(FILE_PATH_LITERAL("amdvlk32.dll"));
auto file_version_info =
base::WrapUnique(FileVersionInfoWin::CreateFileVersionInfo(kAmdDriver64));
std::unique_ptr<FileVersionInfoWin> file_version_info =
FileVersionInfoWin::CreateFileVersionInfoWin(kAmdDriver64);
if (!file_version_info) {
file_version_info.reset(
FileVersionInfoWin::CreateFileVersionInfo(kAmdDriver32));
file_version_info =
FileVersionInfoWin::CreateFileVersionInfoWin(kAmdDriver32);
if (!file_version_info)
return false;
}
const VS_FIXEDFILEINFO* fixed_file_info =
static_cast<FileVersionInfoWin*>(file_version_info.get())
->fixed_file_info();
file_version_info->fixed_file_info();
const int major = HIWORD(fixed_file_info->dwFileVersionMS);
const int minor = LOWORD(fixed_file_info->dwFileVersionMS);
const int minor_1 = HIWORD(fixed_file_info->dwFileVersionLS);
@ -348,17 +347,14 @@ bool BadAMDVulkanDriverVersion() {
}
bool BadVulkanDllVersion() {
std::unique_ptr<FileVersionInfoWin> file_version_info(
static_cast<FileVersionInfoWin*>(
FileVersionInfoWin::CreateFileVersionInfo(
base::FilePath(FILE_PATH_LITERAL("vulkan-1.dll")))));
std::unique_ptr<FileVersionInfoWin> file_version_info =
FileVersionInfoWin::CreateFileVersionInfoWin(
base::FilePath(FILE_PATH_LITERAL("vulkan-1.dll")));
if (!file_version_info)
return false;
const VS_FIXEDFILEINFO* fixed_file_info =
static_cast<FileVersionInfoWin*>(file_version_info.get())
->fixed_file_info();
file_version_info->fixed_file_info();
const int major = HIWORD(fixed_file_info->dwFileVersionMS);
const int minor = LOWORD(fixed_file_info->dwFileVersionMS);
const int build_1 = HIWORD(fixed_file_info->dwFileVersionLS);

@ -43,10 +43,8 @@ bool GetNvmlDeviceInfo(uint32_t pci_device_id,
}
dll_path = dll_path.Append(L"NVIDIA Corporation\\NVSMI\\nvml.dll");
std::unique_ptr<FileVersionInfoWin> file_version_info(
static_cast<FileVersionInfoWin*>(
FileVersionInfoWin::CreateFileVersionInfo(dll_path)));
std::unique_ptr<FileVersionInfoWin> file_version_info =
FileVersionInfoWin::CreateFileVersionInfoWin(dll_path);
if (!file_version_info) {
return false;
}