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

Unified Diff: content/browser/geolocation/wifi_data_provider_chromeos.cc

Issue 11881011: Move wifi_data_provider_chromeos -> content (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 11 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
Index: content/browser/geolocation/wifi_data_provider_chromeos.cc
diff --git a/chrome/browser/geolocation/wifi_data_provider_chromeos.cc b/content/browser/geolocation/wifi_data_provider_chromeos.cc
similarity index 52%
rename from chrome/browser/geolocation/wifi_data_provider_chromeos.cc
rename to content/browser/geolocation/wifi_data_provider_chromeos.cc
index ee7681dbdd1b4ee15d3751adb2ad09db4118897e..cf0b58a9a897bad9148a177faed969e38e4ee5b2 100644
--- a/chrome/browser/geolocation/wifi_data_provider_chromeos.cc
+++ b/content/browser/geolocation/wifi_data_provider_chromeos.cc
@@ -4,85 +4,24 @@
// 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/utf_string_conversions.h"
-#include "chrome/browser/chromeos/cros/cros_library.h"
-#include "chrome/browser/chromeos/cros/network_library.h"
+#include "chromeos/network/geolocation_handler.h"
#include "content/public/browser/browser_thread.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;
- // TODO(stevenjb): Re-implement this with chromeos::GeolocationHandler. The
- // previous code has been broken since switching to Shill. crbug.com/167987
- return false;
-}
-
} // namespace
-} // namespace chromeos
WifiDataProviderChromeOs::WifiDataProviderChromeOs() : started_(false) {
}
@@ -94,8 +33,11 @@ bool WifiDataProviderChromeOs::StartDataProvider() {
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;
@@ -115,57 +57,21 @@ bool WifiDataProviderChromeOs::GetData(WifiData* data) {
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));
@@ -219,10 +125,6 @@ void WifiDataProviderChromeOs::ScheduleStop() {
DCHECK(CalledOnClientThread());
DCHECK(started_);
started_ = false;
- BrowserThread::PostTask(
- BrowserThread::UI,
- FROM_HERE,
- base::Bind(&WifiDataProviderChromeOs::DoStopTaskOnUIThread, this));
}
void WifiDataProviderChromeOs::ScheduleStart() {
@@ -236,3 +138,39 @@ void WifiDataProviderChromeOs::ScheduleStart() {
FROM_HERE,
base::Bind(&WifiDataProviderChromeOs::DoStartTaskOnUIThread, this));
}
+
+bool WifiDataProviderChromeOs::GetAccessPointData(
+ WifiData::AccessPointDataSet* result) {
+ chromeos::WifiAccessPointVector access_points;
+ if (!chromeos::GeolocationHandler::Get()->wifi_enabled())
+ return false;
+ int64 age_ms = 0;
+ if (!chromeos::GeolocationHandler::Get()->GetWifiAccessPoints(
+ &access_points, &age_ms)) {
+ return false;
+ }
+ for (chromeos::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->ssid);
+ result->insert(ap_data);
+ }
+ // If the age is significantly longer than our long polling time, assume the
+ // data is stale and return false which will trigger a faster update.
+ if (age_ms > kTwoNoChangePollingIntervalMilliseconds * 2)
+ return false;
+ return true;
+}
+
+// static
+template<>
+WifiDataProviderImplBase* WifiDataProvider::DefaultFactoryFunction() {
+ return new WifiDataProviderChromeOs();
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698