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

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: 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),
78 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) {
76 } 79 }
77 80
78 WifiDataProviderChromeOs::~WifiDataProviderChromeOs() { 81 WifiDataProviderChromeOs::~WifiDataProviderChromeOs() {
79 } 82 }
80 83
84 bool WifiDataProviderChromeOs::StartDataProvider() {
85 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
86 DCHECK(!started_);
87 started_ = true;
88
89 wlan_api_.reset(NewWlanApi());
90 if (wlan_api_ == NULL) {
91 // Error! Can't do scans, so don't try and schedule one.
92 is_first_scan_complete_ = true;
93 return false;
94 }
95
96 DCHECK(polling_policy_ == NULL);
97 polling_policy_.reset(NewPollingPolicy());
98 DCHECK(polling_policy_ != NULL);
99
100 // Perform first scan ASAP regardless of the polling policy. If this scan
101 // fails we'll retry at a rate in line with the polling policy.
102 ScheduleNextScan(0);
103 return true;
104 }
105
106 void WifiDataProviderChromeOs::StopDataProvider() {
107 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
108 started_ = false;
109 wlan_api_.reset();
110 polling_policy_.reset();
111 }
112
113 bool WifiDataProviderChromeOs::GetData(WifiData *data) {
114 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
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 bool update_available = false;
143 WifiData new_data;
144 if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) {
145 ScheduleNextScan(polling_policy_->NoWifiInterval());
146 } else {
147 update_available = wifi_data_.DiffersSignificantly(new_data);
148 wifi_data_ = new_data;
149 polling_policy_->UpdatePollingInterval(update_available);
150 ScheduleNextScan(polling_policy_->PollingInterval());
151 }
152 if (update_available || !is_first_scan_complete_) {
153 is_first_scan_complete_ = true;
154 NotifyListeners();
155 }
156 }
157
158 void WifiDataProviderChromeOs::ScheduleNextScan(int interval) {
159 MessageLoop::current()->PostDelayedTask(
160 FROM_HERE,
161 task_factory_.NewRunnableMethod(&WifiDataProviderChromeOs::DoWifiScanTask) ,
bulach 2011/03/15 18:37:51 nit: >80cols
162 interval);
stevenjb 2011/03/16 01:06:26 I'm still unfamiliar with Chrome threading, but is
163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698