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

Side by Side 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: Fix GeolocationDeviceDataProviderWifiData.CreateDestroy unit test. 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Provides wifi scan API binding for chromeos, using proprietary APIs. 5 // Provides wifi scan API binding for chromeos, using proprietary APIs.
6 6
7 #include "content/browser/geolocation/wifi_data_provider_chromeos.h" 7 #include "content/browser/geolocation/wifi_data_provider_chromeos.h"
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/chromeos/cros/cros_library.h" 10 #include "chrome/browser/chromeos/cros/cros_library.h"
11 #include "chrome/browser/chromeos/cros/network_library.h" 11 #include "chrome/browser/chromeos/cros/network_library.h"
12 #include "content/browser/browser_thread.h"
12 13
13 namespace { 14 namespace {
14 // The time periods between successive polls of the wifi data. 15 // The time periods between successive polls of the wifi data.
15 const int kDefaultPollingIntervalMilliseconds = 10 * 1000; // 10s 16 const int kDefaultPollingIntervalMilliseconds = 10 * 1000; // 10s
16 const int kNoChangePollingIntervalMilliseconds = 2 * 60 * 1000; // 2 mins 17 const int kNoChangePollingIntervalMilliseconds = 2 * 60 * 1000; // 2 mins
17 const int kTwoNoChangePollingIntervalMilliseconds = 10 * 60 * 1000; // 10 mins 18 const int kTwoNoChangePollingIntervalMilliseconds = 10 * 60 * 1000; // 10 mins
18 const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s 19 const int kNoWifiPollingIntervalMilliseconds = 20 * 1000; // 20s
19 } 20 }
20 21
21 namespace chromeos { 22 namespace chromeos {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 } 66 }
66 67
67 } // namespace 68 } // namespace
68 } // namespace chromeos 69 } // namespace chromeos
69 70
70 template<> 71 template<>
71 WifiDataProviderImplBase* WifiDataProvider::DefaultFactoryFunction() { 72 WifiDataProviderImplBase* WifiDataProvider::DefaultFactoryFunction() {
72 return new WifiDataProviderChromeOs(); 73 return new WifiDataProviderChromeOs();
73 } 74 }
74 75
75 WifiDataProviderChromeOs::WifiDataProviderChromeOs() { 76 WifiDataProviderChromeOs::WifiDataProviderChromeOs() :
77 started_(false) {
76 } 78 }
77 79
78 WifiDataProviderChromeOs::~WifiDataProviderChromeOs() { 80 WifiDataProviderChromeOs::~WifiDataProviderChromeOs() {
79 } 81 }
80 82
83 bool WifiDataProviderChromeOs::StartDataProvider() {
84 DCHECK(CalledOnClientThread());
85 DCHECK(!started_);
86 started_ = true;
87
88 wlan_api_.reset(NewWlanApi());
89 if (wlan_api_ == NULL) {
90 // Error! Can't do scans, so don't try and schedule one.
91 is_first_scan_complete_ = true;
92 return true;
93 }
94
95 DCHECK(polling_policy_ == NULL);
96 polling_policy_.reset(NewPollingPolicy());
97 DCHECK(polling_policy_ != NULL);
98
99 // Perform first scan ASAP regardless of the polling policy. If this scan
100 // fails we'll retry at a rate in line with the polling policy.
101 ScheduleNextScan(0);
102 return true;
103 }
104
105 void WifiDataProviderChromeOs::StopDataProvider() {
106 DCHECK(CalledOnClientThread());
107 started_ = false;
108 wlan_api_.reset();
109 polling_policy_.reset();
110 }
111
112 bool WifiDataProviderChromeOs::GetData(WifiData* data) {
113 DCHECK(CalledOnClientThread());
114 DCHECK(data);
115 *data = wifi_data_;
116 return is_first_scan_complete_;
117 }
118
81 WifiDataProviderCommon::WlanApiInterface* 119 WifiDataProviderCommon::WlanApiInterface*
82 WifiDataProviderChromeOs::NewWlanApi(chromeos::NetworkLibrary* lib) { 120 WifiDataProviderChromeOs::NewWlanApi(chromeos::NetworkLibrary* lib) {
83 return new chromeos::NetworkLibraryWlanApi(lib); 121 return new chromeos::NetworkLibraryWlanApi(lib);
84 } 122 }
85 123
86 WifiDataProviderCommon::WlanApiInterface* 124 WifiDataProviderCommon::WlanApiInterface*
87 WifiDataProviderChromeOs::NewWlanApi() { 125 WifiDataProviderChromeOs::NewWlanApi() {
88 chromeos::CrosLibrary* cros_lib = chromeos::CrosLibrary::Get(); 126 chromeos::CrosLibrary* cros_lib = chromeos::CrosLibrary::Get();
89 DCHECK(cros_lib); 127 DCHECK(cros_lib);
90 if (!cros_lib->EnsureLoaded()) 128 if (!cros_lib->EnsureLoaded())
91 return NULL; 129 return NULL;
92 return NewWlanApi(cros_lib->GetNetworkLibrary()); 130 return NewWlanApi(cros_lib->GetNetworkLibrary());
93 } 131 }
94 132
95 PollingPolicyInterface* WifiDataProviderChromeOs::NewPollingPolicy() { 133 PollingPolicyInterface* WifiDataProviderChromeOs::NewPollingPolicy() {
96 return new GenericPollingPolicy<kDefaultPollingIntervalMilliseconds, 134 return new GenericPollingPolicy<kDefaultPollingIntervalMilliseconds,
97 kNoChangePollingIntervalMilliseconds, 135 kNoChangePollingIntervalMilliseconds,
98 kTwoNoChangePollingIntervalMilliseconds, 136 kTwoNoChangePollingIntervalMilliseconds,
99 kNoWifiPollingIntervalMilliseconds>; 137 kNoWifiPollingIntervalMilliseconds>;
100 } 138 }
139
140 void WifiDataProviderChromeOs::DoWifiScanTask() {
141 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
142 WifiData new_data;
143 if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) {
144 client_loop()->PostTask(FROM_HERE, NewRunnableMethod(
145 this, &WifiDataProviderChromeOs::DidWifiScanTaskNoResults));
146 }
147 else {
148 client_loop()->PostTask(FROM_HERE, NewRunnableMethod(
149 this, &WifiDataProviderChromeOs::DidWifiScanTask,
150 new_data));
151 }
152 }
153
154 void WifiDataProviderChromeOs::DidWifiScanTaskNoResults() {
155 DCHECK(CalledOnClientThread());
156 ScheduleNextScan(polling_policy_->NoWifiInterval());
157 MaybeNotifyListeners(false);
158 }
159
160 void WifiDataProviderChromeOs::DidWifiScanTask(const WifiData& new_data) {
161 DCHECK(CalledOnClientThread());
162 bool update_available = wifi_data_.DiffersSignificantly(new_data);
163 wifi_data_ = new_data;
164 polling_policy_->UpdatePollingInterval(update_available);
165 ScheduleNextScan(polling_policy_->PollingInterval());
166 MaybeNotifyListeners(update_available);
167 }
168
169 void WifiDataProviderChromeOs::MaybeNotifyListeners(bool update_available) {
170 if (update_available || !is_first_scan_complete_) {
171 is_first_scan_complete_ = true;
172 NotifyListeners();
173 }
174 }
175
176 void WifiDataProviderChromeOs::ScheduleNextScan(int interval) {
177 DCHECK(CalledOnClientThread());
178 if (started_) {
179 BrowserThread::PostDelayedTask(
180 BrowserThread::UI,
181 FROM_HERE,
182 NewRunnableMethod(this,
183 &WifiDataProviderChromeOs::DoWifiScanTask),
184 interval);
185 }
186 }
OLDNEW
« no previous file with comments | « content/browser/geolocation/wifi_data_provider_chromeos.h ('k') | content/browser/geolocation/wifi_data_provider_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698