Chromium Code Reviews| Index: content/browser/geolocation/wifi_data_provider_chromeos.cc |
| =================================================================== |
| --- content/browser/geolocation/wifi_data_provider_chromeos.cc (revision 174618) |
| +++ content/browser/geolocation/wifi_data_provider_chromeos.cc (working copy) |
| @@ -4,96 +4,27 @@ |
| // Provides wifi scan API binding for chromeos, using proprietary APIs. |
| -#include "chrome/browser/geolocation/wifi_data_provider_chromeos.h" |
| +#include "content/browser/geolocation/wifi_data_provider_chromeos.h" |
| #include "base/bind.h" |
| +#include "base/chromeos/chromeos_version.h" |
| #include "base/utf_string_conversions.h" |
| -#include "chrome/browser/chromeos/cros/cros_library.h" |
| -#include "chrome/browser/chromeos/cros/network_library.h" |
| +#include "chromeos/network/cros_network_functions.h" |
| +#include "chromeos/network/network_state_handler.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "third_party/cros_system_api/dbus/service_constants.h" |
| -using content::AccessPointData; |
| -using content::BrowserThread; |
| -using content::GenericPollingPolicy; |
| -using content::PollingPolicyInterface; |
| -using content::WifiData; |
| -using content::WifiDataProvider; |
| -using content::WifiDataProviderCommon; |
| -using content::WifiDataProviderImplBase; |
| - |
| +namespace content { |
| namespace { |
| + |
| // The time periods between successive polls of the wifi data. |
| const int kDefaultPollingIntervalMilliseconds = 10 * 1000; // 10s |
| const int kNoChangePollingIntervalMilliseconds = 2 * 60 * 1000; // 2 mins |
| const int kTwoNoChangePollingIntervalMilliseconds = 10 * 60 * 1000; // 10 mins |
| const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s |
| -WifiDataProviderImplBase* ChromeOSFactoryFunction() { |
| - return new WifiDataProviderChromeOs(); |
| -} |
| - |
| -// This global class forces code that links in this file to use that as a data |
| -// provider instead of the default Linux provider. |
| -class RegisterChromeOSWifiDataProvider { |
| - public: |
| - RegisterChromeOSWifiDataProvider() { |
| - WifiDataProvider::SetFactory(ChromeOSFactoryFunction); |
| - } |
| -}; |
| - |
| -RegisterChromeOSWifiDataProvider g_force_chrome_os_provider; |
| - |
| } // namespace |
| -namespace chromeos { |
| -namespace { |
| -// Wifi API binding to network_library.h, to allow reuse of the polling behavior |
| -// defined in WifiDataProviderCommon. |
| -class NetworkLibraryWlanApi : public WifiDataProviderCommon::WlanApiInterface { |
| - public: |
| - // Does not transfer ownership, |lib| must remain valid for lifetime of |
| - // this object. |
| - explicit NetworkLibraryWlanApi(NetworkLibrary* lib); |
| - ~NetworkLibraryWlanApi(); |
| - |
| - // WifiDataProviderCommon::WlanApiInterface |
| - bool GetAccessPointData(WifiData::AccessPointDataSet* data); |
| - |
| - private: |
| - NetworkLibrary* network_library_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(NetworkLibraryWlanApi); |
| -}; |
| - |
| -NetworkLibraryWlanApi::NetworkLibraryWlanApi(NetworkLibrary* lib) |
| - : network_library_(lib) { |
| - DCHECK(network_library_ != NULL); |
| -} |
| - |
| -NetworkLibraryWlanApi::~NetworkLibraryWlanApi() { |
| -} |
| - |
| -bool NetworkLibraryWlanApi::GetAccessPointData( |
| - WifiData::AccessPointDataSet* result) { |
| - WifiAccessPointVector access_points; |
| - if (!network_library_->GetWifiAccessPoints(&access_points)) |
| - return false; |
| - for (WifiAccessPointVector::const_iterator i = access_points.begin(); |
| - i != access_points.end(); ++i) { |
| - AccessPointData ap_data; |
| - ap_data.mac_address = ASCIIToUTF16(i->mac_address); |
| - ap_data.radio_signal_strength = i->signal_strength; |
| - ap_data.channel = i->channel; |
| - ap_data.signal_to_noise = i->signal_to_noise; |
| - ap_data.ssid = UTF8ToUTF16(i->name); |
| - result->insert(ap_data); |
| - } |
| - return !result->empty() || network_library_->wifi_enabled(); |
| -} |
| - |
| -} // namespace |
| -} // namespace chromeos |
| - |
| WifiDataProviderChromeOs::WifiDataProviderChromeOs() : started_(false) { |
| } |
| @@ -104,8 +35,11 @@ |
| DCHECK(CalledOnClientThread()); |
| DCHECK(polling_policy_ == NULL); |
| - polling_policy_.reset(NewPollingPolicy()); |
| - DCHECK(polling_policy_ != NULL); |
| + polling_policy_.reset( |
| + new GenericPollingPolicy<kDefaultPollingIntervalMilliseconds, |
| + kNoChangePollingIntervalMilliseconds, |
| + kTwoNoChangePollingIntervalMilliseconds, |
| + kNoWifiPollingIntervalMilliseconds>); |
| ScheduleStart(); |
| return true; |
| @@ -125,57 +59,21 @@ |
| return is_first_scan_complete_; |
| } |
| -WifiDataProviderCommon::WlanApiInterface* |
| - WifiDataProviderChromeOs::NewWlanApi(chromeos::NetworkLibrary* lib) { |
| - return new chromeos::NetworkLibraryWlanApi(lib); |
| -} |
| - |
| -WifiDataProviderCommon::WlanApiInterface* |
| - WifiDataProviderChromeOs::NewWlanApi() { |
| - chromeos::CrosLibrary* cros_lib = chromeos::CrosLibrary::Get(); |
| - DCHECK(cros_lib); |
| - return NewWlanApi(cros_lib->GetNetworkLibrary()); |
| -} |
| - |
| -PollingPolicyInterface* WifiDataProviderChromeOs::NewPollingPolicy() { |
| - return new GenericPollingPolicy<kDefaultPollingIntervalMilliseconds, |
| - kNoChangePollingIntervalMilliseconds, |
| - kTwoNoChangePollingIntervalMilliseconds, |
| - kNoWifiPollingIntervalMilliseconds>; |
| -} |
| - |
| void WifiDataProviderChromeOs::DoStartTaskOnUIThread() { |
| CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - wlan_api_.reset(NewWlanApi()); |
| - if (wlan_api_ == NULL) { |
| - client_loop()->PostTask( |
| - FROM_HERE, base::Bind(&WifiDataProviderChromeOs::DidStartFailed, this)); |
| - return; |
| - } |
| DoWifiScanTaskOnUIThread(); |
| } |
| -void WifiDataProviderChromeOs::DoStopTaskOnUIThread() { |
| - CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - wlan_api_.reset(); |
| -} |
| - |
| -void WifiDataProviderChromeOs::DidStartFailed() { |
| - CHECK(CalledOnClientThread()); |
| - // Error! Can't do scans, so don't try and schedule one. |
| - is_first_scan_complete_ = true; |
| -} |
| - |
| void WifiDataProviderChromeOs::DoWifiScanTaskOnUIThread() { |
| CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - // This method could be scheduled after a DoStopTaskOnUIThread. |
| - if (!wlan_api_.get()) |
| + // This method could be scheduled after a ScheduleStop. |
| + if (!started_) |
| return; |
| WifiData new_data; |
| - if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) { |
| + if (!GetAccessPointData(&new_data.access_point_data)) { |
| client_loop()->PostTask( |
| FROM_HERE, |
| base::Bind(&WifiDataProviderChromeOs::DidWifiScanTaskNoResults, this)); |
| @@ -229,10 +127,6 @@ |
| DCHECK(CalledOnClientThread()); |
| DCHECK(started_); |
| started_ = false; |
| - BrowserThread::PostTask( |
| - BrowserThread::UI, |
| - FROM_HERE, |
| - base::Bind(&WifiDataProviderChromeOs::DoStopTaskOnUIThread, this)); |
| } |
| void WifiDataProviderChromeOs::ScheduleStart() { |
| @@ -246,3 +140,35 @@ |
| FROM_HERE, |
| base::Bind(&WifiDataProviderChromeOs::DoStartTaskOnUIThread, this)); |
| } |
| + |
| +bool WifiDataProviderChromeOs::GetAccessPointData( |
| + WifiData::AccessPointDataSet* result) { |
| + if (!base::chromeos::IsRunningOnChromeOS()) { |
| + *result = WifiData::AccessPointDataSet(); |
| + return true; |
| + } |
| + |
| + chromeos::WifiAccessPointVector access_points; |
| + if (!chromeos::CrosGetWifiAccessPoints(&access_points)) |
| + return false; |
|
stevenjb
2013/01/04 20:41:04
So, this is OK, we can replace it when it has been
|
| + for (size_t i = 0; i < access_points.size(); ++i) { |
| + AccessPointData ap_data; |
| + ap_data.mac_address = ASCIIToUTF16(access_points[i].mac_address); |
| + ap_data.radio_signal_strength = access_points[i].signal_strength; |
| + ap_data.channel = access_points[i].channel; |
| + ap_data.signal_to_noise = access_points[i].signal_to_noise; |
| + ap_data.ssid = UTF8ToUTF16(access_points[i].name); |
| + result->insert(ap_data); |
| + } |
| + bool wifi_enabled = chromeos::NetworkStateHandler::Get()-> |
| + TechnologyEnabled(flimflam::kTypeWifi); |
|
stevenjb
2013/01/04 20:41:04
This is behind a flag and will crash without --ena
jam
2013/01/04 21:18:31
my plan was just to wait for your refactor
|
| + return !result->empty() || wifi_enabled; |
| +} |
| + |
| +// static |
| +template<> |
| +WifiDataProviderImplBase* WifiDataProvider::DefaultFactoryFunction() { |
| + return new WifiDataProviderChromeOs(); |
| +} |
| + |
| +} // namespace content |