Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Unified Diff: device/geolocation/wifi_data_provider_win.cc

Issue 2833273002: Geolocation cleanup: use unique_ptr<>s and rename New{WlanApi/PollingPolicy} to CreateBla() (Closed)
Patch Set: reillyg@s nits Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/geolocation/wifi_data_provider_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/geolocation/wifi_data_provider_win.cc
diff --git a/device/geolocation/wifi_data_provider_win.cc b/device/geolocation/wifi_data_provider_win.cc
index c31440f675c929ced824e24b6dd859ea4eb6580a..8b296ae1f4e84d546b2063be834608a05dc25a6e 100644
--- a/device/geolocation/wifi_data_provider_win.cc
+++ b/device/geolocation/wifi_data_provider_win.cc
@@ -28,6 +28,7 @@
#include <wlanapi.h>
#include "base/memory/free_deleter.h"
+#include "base/memory/ptr_util.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/utf_string_conversions.h"
#include "base/win/windows_version.h"
@@ -86,17 +87,17 @@ typedef DWORD(WINAPI* WlanCloseHandleFunction)(HANDLE hClientHandle,
// Local classes and functions
class WindowsWlanApi : public WifiDataProviderCommon::WlanApiInterface {
public:
- ~WindowsWlanApi() override;
// Factory function. Will return NULL if this API is unavailable.
- static WindowsWlanApi* Create();
+ static std::unique_ptr<WindowsWlanApi> Create();
+
+ // Takes ownership of the library handle.
+ explicit WindowsWlanApi(HINSTANCE library);
+ ~WindowsWlanApi() override;
// WlanApiInterface
bool GetAccessPointData(WifiData::AccessPointDataSet* data) override;
private:
- // Takes ownership of the library handle.
- explicit WindowsWlanApi(HINSTANCE library);
-
// Loads the required functions from the DLL.
void GetWLANFunctions(HINSTANCE wlan_library);
int GetInterfaceDataWLAN(HANDLE wlan_handle,
@@ -119,8 +120,11 @@ class WindowsWlanApi : public WifiDataProviderCommon::WlanApiInterface {
class WindowsNdisApi : public WifiDataProviderCommon::WlanApiInterface {
public:
+ static std::unique_ptr<WindowsNdisApi> Create();
+
+ // Swaps in content of the vector passed
+ explicit WindowsNdisApi(std::vector<base::string16>* interface_service_names);
~WindowsNdisApi() override;
- static WindowsNdisApi* Create();
// WlanApiInterface
bool GetAccessPointData(WifiData::AccessPointDataSet* data) override;
@@ -128,10 +132,6 @@ class WindowsNdisApi : public WifiDataProviderCommon::WlanApiInterface {
private:
static bool GetInterfacesNDIS(
std::vector<base::string16>* interface_service_names_out);
-
- // Swaps in content of the vector passed
- explicit WindowsNdisApi(std::vector<base::string16>* interface_service_names);
-
bool GetInterfaceDataNDIS(HANDLE adapter_handle,
WifiData::AccessPointDataSet* data);
// NDIS variables.
@@ -157,7 +157,7 @@ bool ResizeBuffer(int requested_size,
// Gets the system directory and appends a trailing slash if not already
// present.
bool GetSystemDirectory(base::string16* path);
-} // namespace
+} // anonymous namespace
WifiDataProvider* WifiDataProviderManager::DefaultFactoryFunction() {
return new WifiDataProviderWin();
@@ -167,20 +167,20 @@ WifiDataProviderWin::WifiDataProviderWin() {}
WifiDataProviderWin::~WifiDataProviderWin() {}
-WifiDataProviderCommon::WlanApiInterface* WifiDataProviderWin::NewWlanApi() {
+std::unique_ptr<WifiDataProviderCommon::WlanApiInterface>
+WifiDataProviderWin::CreateWlanApi() {
// Use the WLAN interface if we're on Vista and if it's available. Otherwise,
// use NDIS.
- WlanApiInterface* api = WindowsWlanApi::Create();
- if (api) {
+ std::unique_ptr<WlanApiInterface> api = WindowsWlanApi::Create();
+ if (api)
return api;
- }
return WindowsNdisApi::Create();
}
-WifiPollingPolicy* WifiDataProviderWin::NewPollingPolicy() {
- return new GenericWifiPollingPolicy<
+std::unique_ptr<WifiPollingPolicy> WifiDataProviderWin::CreatePollingPolicy() {
+ return base::MakeUnique<GenericWifiPollingPolicy<
kDefaultPollingInterval, kNoChangePollingInterval,
- kTwoNoChangePollingInterval, kNoWifiPollingIntervalMilliseconds>;
+ kTwoNoChangePollingInterval, kNoWifiPollingIntervalMilliseconds>>();
}
// Local classes and functions
@@ -195,22 +195,20 @@ WindowsWlanApi::~WindowsWlanApi() {
FreeLibrary(library_);
}
-WindowsWlanApi* WindowsWlanApi::Create() {
+std::unique_ptr<WindowsWlanApi> WindowsWlanApi::Create() {
if (base::win::GetVersion() < base::win::VERSION_VISTA)
- return NULL;
+ return nullptr;
// We use an absolute path to load the DLL to avoid DLL preloading attacks.
base::string16 system_directory;
- if (!GetSystemDirectory(&system_directory)) {
- return NULL;
- }
+ if (!GetSystemDirectory(&system_directory))
+ return nullptr;
DCHECK(!system_directory.empty());
base::string16 dll_path = system_directory + L"wlanapi.dll";
HINSTANCE library =
LoadLibraryEx(dll_path.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (!library) {
- return NULL;
- }
- return new WindowsWlanApi(library);
+ if (!library)
+ return nullptr;
+ return base::MakeUnique<WindowsWlanApi>(library);
}
void WindowsWlanApi::GetWLANFunctions(HINSTANCE wlan_library) {
@@ -347,12 +345,11 @@ WindowsNdisApi::WindowsNdisApi(
WindowsNdisApi::~WindowsNdisApi() {}
-WindowsNdisApi* WindowsNdisApi::Create() {
+std::unique_ptr<WindowsNdisApi> WindowsNdisApi::Create() {
std::vector<base::string16> interface_service_names;
- if (GetInterfacesNDIS(&interface_service_names)) {
- return new WindowsNdisApi(&interface_service_names);
- }
- return NULL;
+ if (GetInterfacesNDIS(&interface_service_names))
+ return base::MakeUnique<WindowsNdisApi>(&interface_service_names);
+ return nullptr;
}
bool WindowsNdisApi::GetAccessPointData(WifiData::AccessPointDataSet* data) {
@@ -362,23 +359,20 @@ bool WindowsNdisApi::GetAccessPointData(WifiData::AccessPointDataSet* data) {
for (int i = 0; i < static_cast<int>(interface_service_names_.size()); ++i) {
// First, check that we have a DOS device for this adapter.
- if (!DefineDosDeviceIfNotExists(interface_service_names_[i])) {
+ if (!DefineDosDeviceIfNotExists(interface_service_names_[i]))
continue;
- }
// Get the handle to the device. This will fail if the named device is not
// valid.
HANDLE adapter_handle = GetFileHandle(interface_service_names_[i]);
- if (adapter_handle == INVALID_HANDLE_VALUE) {
+ if (adapter_handle == INVALID_HANDLE_VALUE)
continue;
- }
// Get the data.
- if (GetInterfaceDataNDIS(adapter_handle, data)) {
+ if (GetInterfaceDataNDIS(adapter_handle, data))
++interfaces_succeeded;
- } else {
+ else
++interfaces_failed;
- }
// Clean up.
CloseHandle(adapter_handle);
@@ -437,9 +431,8 @@ bool WindowsNdisApi::GetInterfaceDataNDIS(HANDLE adapter_handle,
std::unique_ptr<BYTE, base::FreeDeleter> buffer(
static_cast<BYTE*>(malloc(oid_buffer_size_)));
- if (buffer == NULL) {
+ if (!buffer)
return false;
- }
DWORD bytes_out;
int result;
@@ -454,11 +447,11 @@ bool WindowsNdisApi::GetInterfaceDataNDIS(HANDLE adapter_handle,
result == NDIS_STATUS_BUFFER_TOO_SHORT) {
// The buffer we supplied is too small, so increase it. bytes_out should
// provide the required buffer size, but this is not always the case.
- if (bytes_out > static_cast<DWORD>(oid_buffer_size_)) {
+ if (bytes_out > static_cast<DWORD>(oid_buffer_size_))
oid_buffer_size_ = bytes_out;
- } else {
+ else
oid_buffer_size_ *= 2;
- }
+
if (!ResizeBuffer(oid_buffer_size_, &buffer)) {
oid_buffer_size_ = kInitialBufferSize; // Reset for next time.
return false;
@@ -515,9 +508,8 @@ bool DefineDosDeviceIfNotExists(const base::string16& device_name) {
return true;
}
- if (GetLastError() != ERROR_FILE_NOT_FOUND) {
+ if (GetLastError() != ERROR_FILE_NOT_FOUND)
return false;
- }
if (!DefineDosDevice(DDD_RAW_TARGET_PATH, device_name.c_str(),
target_path.c_str())) {
@@ -572,23 +564,20 @@ bool GetSystemDirectory(base::string16* path) {
DCHECK(path);
// Return value includes terminating NULL.
int buffer_size = ::GetSystemDirectory(NULL, 0);
- if (buffer_size == 0) {
+ if (buffer_size == 0)
return false;
- }
std::unique_ptr<base::char16[]> buffer(new base::char16[buffer_size]);
// Return value excludes terminating NULL.
int characters_written = ::GetSystemDirectory(buffer.get(), buffer_size);
- if (characters_written == 0) {
+ if (characters_written == 0)
return false;
- }
DCHECK_EQ(buffer_size - 1, characters_written);
path->assign(buffer.get(), characters_written);
- if (*path->rbegin() != L'\\') {
+ if (*path->rbegin() != L'\\')
path->append(L"\\");
- }
DCHECK_EQ(L'\\', *path->rbegin());
return true;
}
« no previous file with comments | « device/geolocation/wifi_data_provider_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698