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

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

Issue 6696022: Refactor WifiDataProviderChromeOs to implement WifiDataProviderImplBase directly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 9 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/content/browser/geolocation/wifi_data_provider_chromeos.cc b/content/browser/geolocation/wifi_data_provider_chromeos.cc
index 555f7aef7c7f4bb409ba779129cff115a695e475..d98a63a0d050ff1608a9168839dcddd84069ef5c 100644
--- a/content/browser/geolocation/wifi_data_provider_chromeos.cc
+++ b/content/browser/geolocation/wifi_data_provider_chromeos.cc
@@ -9,6 +9,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/cros/network_library.h"
+#include "content/browser/browser_thread.h"
namespace {
// The time periods between successive polls of the wifi data.
@@ -72,12 +73,49 @@ WifiDataProviderImplBase* WifiDataProvider::DefaultFactoryFunction() {
return new WifiDataProviderChromeOs();
}
-WifiDataProviderChromeOs::WifiDataProviderChromeOs() {
+WifiDataProviderChromeOs::WifiDataProviderChromeOs() :
+ started_(false),
+ ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) {
}
WifiDataProviderChromeOs::~WifiDataProviderChromeOs() {
}
+bool WifiDataProviderChromeOs::StartDataProvider() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
bulach 2011/03/15 18:37:51 hmm, not sure this would work.. afaict, this would
stevenjb 2011/03/16 01:06:26 As bulach@ suggests, this CHECK gets triggered on
+ DCHECK(!started_);
+ started_ = true;
+
+ wlan_api_.reset(NewWlanApi());
+ if (wlan_api_ == NULL) {
+ // Error! Can't do scans, so don't try and schedule one.
+ is_first_scan_complete_ = true;
+ return false;
+ }
+
+ DCHECK(polling_policy_ == NULL);
+ polling_policy_.reset(NewPollingPolicy());
+ DCHECK(polling_policy_ != NULL);
+
+ // Perform first scan ASAP regardless of the polling policy. If this scan
+ // fails we'll retry at a rate in line with the polling policy.
+ ScheduleNextScan(0);
+ return true;
+}
+
+void WifiDataProviderChromeOs::StopDataProvider() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ started_ = false;
+ wlan_api_.reset();
+ polling_policy_.reset();
+}
+
+bool WifiDataProviderChromeOs::GetData(WifiData *data) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ *data = wifi_data_;
+ return is_first_scan_complete_;
+}
+
WifiDataProviderCommon::WlanApiInterface*
WifiDataProviderChromeOs::NewWlanApi(chromeos::NetworkLibrary* lib) {
return new chromeos::NetworkLibraryWlanApi(lib);
@@ -98,3 +136,28 @@ PollingPolicyInterface* WifiDataProviderChromeOs::NewPollingPolicy() {
kTwoNoChangePollingIntervalMilliseconds,
kNoWifiPollingIntervalMilliseconds>;
}
+
+void WifiDataProviderChromeOs::DoWifiScanTask() {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ bool update_available = false;
+ WifiData new_data;
+ if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) {
+ ScheduleNextScan(polling_policy_->NoWifiInterval());
+ } else {
+ update_available = wifi_data_.DiffersSignificantly(new_data);
+ wifi_data_ = new_data;
+ polling_policy_->UpdatePollingInterval(update_available);
+ ScheduleNextScan(polling_policy_->PollingInterval());
+ }
+ if (update_available || !is_first_scan_complete_) {
+ is_first_scan_complete_ = true;
+ NotifyListeners();
+ }
+}
+
+void WifiDataProviderChromeOs::ScheduleNextScan(int interval) {
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ task_factory_.NewRunnableMethod(&WifiDataProviderChromeOs::DoWifiScanTask),
bulach 2011/03/15 18:37:51 nit: >80cols
+ interval);
stevenjb 2011/03/16 01:06:26 I'm still unfamiliar with Chrome threading, but is
+}

Powered by Google App Engine
This is Rietveld 408576698