1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_GEOLOCATION_WIFI_DATA_PROVIDER_CHROMEOS_H_
6#define CONTENT_BROWSER_GEOLOCATION_WIFI_DATA_PROVIDER_CHROMEOS_H_
7
8#include "base/compiler_specific.h"
9#include "content/browser/geolocation/wifi_data_provider.h"
10#include "content/browser/geolocation/wifi_polling_policy.h"
11
12namespace content {
13
14class CONTENT_EXPORT WifiDataProviderChromeOs : public WifiDataProvider {
15 public:
16  WifiDataProviderChromeOs();
17
18  // WifiDataProvider
19  virtual void StartDataProvider() OVERRIDE;
20  virtual void StopDataProvider() OVERRIDE;
21  virtual bool GetData(WifiData* data) OVERRIDE;
22
23 private:
24  friend class GeolocationChromeOsWifiDataProviderTest;
25  virtual ~WifiDataProviderChromeOs();
26
27  // UI thread
28  void DoWifiScanTaskOnUIThread();  // The polling task
29  void DoStartTaskOnUIThread();
30
31  // Client thread
32  void DidWifiScanTaskNoResults();
33  void DidWifiScanTask(const WifiData& new_data);
34
35  // Will schedule a scan; i.e. enqueue DoWifiScanTask deferred task.
36  void ScheduleNextScan(int interval);
37
38  // Will schedule starting of the scanning process.
39  void ScheduleStart();
40
41  // Will schedule stopping of the scanning process.
42  void ScheduleStop();
43
44  // Get access point data from chromeos.
45  bool GetAccessPointData(WifiData::AccessPointDataSet* data);
46
47  // Controls the polling update interval. (client thread)
48  scoped_ptr<WifiPollingPolicy> polling_policy_;
49
50  // The latest wifi data. (client thread)
51  WifiData wifi_data_;
52
53  // Whether we have strated the data provider. (client thread)
54  bool started_;
55
56  // Whether we've successfully completed a scan for WiFi data. (client thread)
57  bool is_first_scan_complete_;
58
59  DISALLOW_COPY_AND_ASSIGN(WifiDataProviderChromeOs);
60};
61
62}  // namespace content
63
64#endif  // CONTENT_BROWSER_GEOLOCATION_WIFI_DATA_PROVIDER_CHROMEOS_H_
65