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}
diff --git a/base/file_version_info.h b/base/file_version_info.h
index 3b9457c..a8343f7 100644
--- a/base/file_version_info.h
+++ b/base/file_version_info.h
@@ -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 @@
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.
diff --git a/base/file_version_info_mac.mm b/base/file_version_info_mac.mm
index ce42924..4e8718f 100644
--- a/base/file_version_info_mac.mm
+++ b/base/file_version_info_mac.mm
@@ -20,16 +20,17 @@
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() {
diff --git a/base/file_version_info_win.cc b/base/file_version_info_win.cc
index 2c1a7436..7abcd2a7 100644
--- a/base/file_version_info_win.cc
+++ b/base/file_version_info_win.cc
@@ -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 @@
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 @@
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 @@
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() {
diff --git a/base/file_version_info_win.h b/base/file_version_info_win.h
index d91b67f..4751db1e 100644
--- a/base/file_version_info_win.h
+++ b/base/file_version_info_win.h
@@ -53,6 +53,10 @@
// 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;
diff --git a/base/file_version_info_win_unittest.cc b/base/file_version_info_win_unittest.cc
index a4acc4ca3..43f7f7ad 100644
--- a/base/file_version_info_win_unittest.cc
+++ b/base/file_version_info_win_unittest.cc
@@ -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 @@
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 @@
}
std::unique_ptr<FileVersionInfo> Create() const {
- return base::WrapUnique(
- FileVersionInfo::CreateFileVersionInfoForModule(library_.get()));
+ return FileVersionInfo::CreateFileVersionInfoForModule(library_.get());
}
private:
diff --git a/base/win/windows_version.cc b/base/win/windows_version.cc
index 05a2f73..07c040a 100644
--- a/base/win/windows_version.cc
+++ b/base/win/windows_version.cc
@@ -194,17 +194,15 @@
// 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 =
diff --git a/cloud_print/common/win/install_utils.cc b/cloud_print/common/win/install_utils.cc
index 687fe1c..dae0282 100644
--- a/cloud_print/common/win/install_utils.cc
+++ b/cloud_print/common/win/install_utils.cc
@@ -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 @@
// 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 @@
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";
}
diff --git a/gpu/config/gpu_info_collector_win.cc b/gpu/config/gpu_info_collector_win.cc
index bde5ff3..4b0453b 100644
--- a/gpu/config/gpu_info_collector_win.cc
+++ b/gpu/config/gpu_info_collector_win.cc
@@ -320,18 +320,17 @@
// 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 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);
diff --git a/gpu/config/nvml_info.cc b/gpu/config/nvml_info.cc
index 2233380..066d6c2 100644
--- a/gpu/config/nvml_info.cc
+++ b/gpu/config/nvml_info.cc
@@ -43,10 +43,8 @@
}
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;
}