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

Unified Diff: chrome/browser/geolocation/wifi_data_provider_common.h

Issue 604019: Refactor the state-machine & threading out of the windows wifi provider into ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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: chrome/browser/geolocation/wifi_data_provider_common.h
===================================================================
--- chrome/browser/geolocation/wifi_data_provider_common.h (revision 38765)
+++ chrome/browser/geolocation/wifi_data_provider_common.h (working copy)
@@ -9,7 +9,9 @@
#include "base/logging.h"
#include "base/string16.h"
-#include "base/basictypes.h"
+#include "base/task.h"
+#include "base/thread.h"
+#include "chrome/browser/geolocation/device_data_provider.h"
// Converts a MAC address stored as an array of uint8 to a string.
string16 MacAddressAsString16(const uint8 mac_as_int[6]);
@@ -50,4 +52,71 @@
int polling_interval_;
};
+// Base class to promote code sharing between platform specific wifi data
+// providers. It's optional for specific platforms to derive this, but if they
+// do threading and polling is taken care of by this base class, and all the
+// platform need do is provide the underlying WLAN access API and policy policy,
+// both of which will be create & accessed in the worker thread (only).
+// Also designed this way to promotes ease of testing the cross-platform
+// behavior w.r.t. polling & threading.
+class WifiDataProviderCommon
+ : public WifiDataProviderImplBase,
+ private base::Thread {
+ public:
+ // Interface to abstract the low level data OS library call, and to allow
+ // mocking (hence public).
+ class WlanApiInterface {
+ public:
+ virtual ~WlanApiInterface() {}
+ // Gets wifi data for all visible access points.
+ virtual bool GetAccessPointData(WifiData::AccessPointDataSet* data) = 0;
+ };
+
+ WifiDataProviderCommon();
+
+ // WifiDataProviderImplBase implementation
+ virtual bool StartDataProvider();
+ virtual void StopDataProvider();
+ virtual bool GetData(WifiData *data);
+
+ protected:
+ virtual ~WifiDataProviderCommon();
+
+ // Returns ownership. Will be called from the worker thread.
+ virtual WlanApiInterface* NewWlanApi() = 0;
+
+ // Returns ownership. Will be called from the worker thread.
+ virtual PollingPolicyInterface* NewPolicyPolicy() = 0;
+
+ private:
+ // Thread implementation
+ virtual void Init();
+ virtual void CleanUp();
+
+ // Task which run in the child thread.
+ void DoWifiScanTask();
+
+ // Will schedule a scan; i.e. enqueue DoWifiScanTask deferred task.
+ void ScheduleNextScan();
+
+ WifiData wifi_data_;
+ Lock data_mutex_;
+
+ // Whether we've successfully completed a scan for WiFi data (or the polling
+ // thread has terminated early).
+ bool is_first_scan_complete_;
+
+ // Underlying OS wifi API.
+ scoped_ptr<WlanApiInterface> wlan_api_;
+
+ // Controls the polling update interval.
+ scoped_ptr<PollingPolicyInterface> polling_policy_;
+
+ // Holder for the tasks which run on the thread; takes care of cleanup.
+ ScopedRunnableMethodFactory<WifiDataProviderCommon> task_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(WifiDataProviderCommon);
+};
+
jorlow 2010/02/14 22:09:27 2 newlines
joth 2010/02/15 11:28:54 Done.
+
#endif // CHROME_BROWSER_GEOLOCATION_WIFI_DATA_PROVIDER_COMMON_H_

Powered by Google App Engine
This is Rietveld 408576698