Index: chrome/browser/geolocation/win7_location_api_win.cc |
diff --git a/chrome/browser/geolocation/win7_location_api_win.cc b/chrome/browser/geolocation/win7_location_api_win.cc |
index 7b6c3ca352a9c052b47e92198ef8c8e43ce25ae2..7df034079d18e656c02c1a507a5abf480034fd25 100644 |
--- a/chrome/browser/geolocation/win7_location_api_win.cc |
+++ b/chrome/browser/geolocation/win7_location_api_win.cc |
@@ -9,6 +9,7 @@ |
#include "base/file_path.h" |
#include "base/logging.h" |
#include "base/path_service.h" |
+#include "base/scoped_ptr.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/geoposition.h" |
@@ -26,13 +27,18 @@ HINSTANCE LoadWin7Library(const string16& lib_name) { |
} |
} |
-Win7LocationApi::Win7LocationApi( |
- HINSTANCE prop_library, |
+Win7LocationApi::Win7LocationApi() |
+ : prop_lib_(0), |
+ PropVariantToDouble_function_(0), |
+ locator_(0) { |
+} |
+ |
+void Win7LocationApi::Init(HINSTANCE prop_library, |
PropVariantToDoubleFunction PropVariantToDouble_function, |
- ILocation* locator) |
- : prop_lib_(prop_library), |
- PropVariantToDouble_function_(PropVariantToDouble_function), |
- locator_(locator) { |
+ ILocation* locator) { |
+ prop_lib_ = prop_library; |
+ PropVariantToDouble_function_ = PropVariantToDouble_function; |
+ locator_ = locator; |
} |
Win7LocationApi::~Win7LocationApi() { |
@@ -44,6 +50,8 @@ Win7LocationApi* Win7LocationApi::Create() { |
if (!CommandLine::ForCurrentProcess() |
->HasSwitch(switches::kExperimentalLocationFeatures)) |
return NULL; |
+ |
+ scoped_ptr<Win7LocationApi> result(new Win7LocationApi); |
// Load probsys.dll |
string16 lib_needed = L"propsys.dll"; |
HINSTANCE prop_lib = LoadWin7Library(lib_needed); |
@@ -69,9 +77,16 @@ Win7LocationApi* Win7LocationApi::Create() { |
} |
IID reports_needed[] = { IID_ILatLongReport }; |
result_type = locator->RequestPermissions(NULL, reports_needed, 1, TRUE); |
- return new Win7LocationApi(prop_lib, |
- PropVariantToDouble_function, |
- locator); |
+ result->Init(prop_lib, PropVariantToDouble_function, locator); |
+ return result.release(); |
+} |
+ |
+Win7LocationApi* Win7LocationApi::CreateForTesting( |
+ PropVariantToDoubleFunction PropVariantToDouble_function, |
+ ILocation* locator) { |
+ Win7LocationApi* result = new Win7LocationApi; |
+ result->Init(NULL, PropVariantToDouble_function, locator); |
+ return result; |
} |
void Win7LocationApi::GetPosition(Geoposition* position) { |
@@ -101,19 +116,19 @@ bool Win7LocationApi::GetPositionIfFixed(Geoposition* position) { |
CComPtr<ILatLongReport> lat_long_report; |
result_type = locator_->GetReport(IID_ILatLongReport, &location_report); |
// Checks to see if location access is allowed. |
- if (result_type == E_ACCESSDENIED) |
+ if (result_type == E_ACCESSDENIED) |
position->error_code = Geoposition::ERROR_CODE_PERMISSION_DENIED; |
// Checks for any other errors while requesting a location report. |
- if(!SUCCEEDED(result_type)) |
+ if (!SUCCEEDED(result_type)) |
return false; |
result_type = location_report->QueryInterface(&lat_long_report); |
- if(!SUCCEEDED(result_type)) |
+ if (!SUCCEEDED(result_type)) |
return false; |
result_type = lat_long_report->GetLatitude(&position->latitude); |
- if(!SUCCEEDED(result_type)) |
+ if (!SUCCEEDED(result_type)) |
return false; |
result_type = lat_long_report->GetLongitude(&position->longitude); |
- if(!SUCCEEDED(result_type)) |
+ if (!SUCCEEDED(result_type)) |
return false; |
result_type = lat_long_report->GetErrorRadius(&position->accuracy); |
if (!SUCCEEDED(result_type) || position->accuracy <= 0) |
@@ -124,7 +139,7 @@ bool Win7LocationApi::GetPositionIfFixed(Geoposition* position) { |
position->altitude = temp_dbl; |
result_type = lat_long_report->GetAltitudeError(&temp_dbl); |
if (SUCCEEDED(result_type)) |
- position->altitude_accuracy = temp_dbl; |
+ position->altitude_accuracy = temp_dbl; |
PROPVARIANT heading; |
PropVariantInit(&heading); |
result_type = lat_long_report->GetValue( |