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

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

Issue 11710002: Move wifi_data_provider_chromeos.* from chrome\browser\geolocation to content\browser\geolocation b… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync after r175087 moved cros_network_functions Created 7 years, 12 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
===================================================================
--- 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

Powered by Google App Engine
This is Rietveld 408576698