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

Side by Side Diff: device/geolocation/wifi_data_provider_common.cc

Issue 2192683003: Revert of Reland: Geolocation: move from content/browser to device/ (patchset #2 id:20001 of https:… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2810
Patch Set: Created 4 years, 4 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 #include "device/geolocation/wifi_data_provider_common.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/single_thread_task_runner.h"
10 #include "base/strings/stringprintf.h"
11 #include "base/strings/utf_string_conversions.h"
12
13 namespace device {
14
15 base::string16 MacAddressAsString16(const uint8_t mac_as_int[6]) {
16 // mac_as_int is big-endian. Write in byte chunks.
17 // Format is XX-XX-XX-XX-XX-XX.
18 static const char* const kMacFormatString =
19 "%02x-%02x-%02x-%02x-%02x-%02x";
20 return base::ASCIIToUTF16(base::StringPrintf(kMacFormatString,
21 mac_as_int[0],
22 mac_as_int[1],
23 mac_as_int[2],
24 mac_as_int[3],
25 mac_as_int[4],
26 mac_as_int[5]));
27 }
28
29 WifiDataProviderCommon::WifiDataProviderCommon()
30 : is_first_scan_complete_(false),
31 weak_factory_(this) {
32 }
33
34 WifiDataProviderCommon::~WifiDataProviderCommon() {
35 }
36
37 void WifiDataProviderCommon::StartDataProvider() {
38 DCHECK(wlan_api_ == NULL);
39 wlan_api_.reset(NewWlanApi());
40 if (wlan_api_ == NULL) {
41 // Error! Can't do scans, so don't try and schedule one.
42 is_first_scan_complete_ = true;
43 return;
44 }
45
46 DCHECK(polling_policy_ == NULL);
47 polling_policy_.reset(NewPollingPolicy());
48 DCHECK(polling_policy_ != NULL);
49
50 // Perform first scan ASAP regardless of the polling policy. If this scan
51 // fails we'll retry at a rate in line with the polling policy.
52 ScheduleNextScan(0);
53 }
54
55 void WifiDataProviderCommon::StopDataProvider() {
56 wlan_api_.reset();
57 polling_policy_.reset();
58 }
59
60 bool WifiDataProviderCommon::GetData(WifiData* data) {
61 *data = wifi_data_;
62 // If we've successfully completed a scan, indicate that we have all of the
63 // data we can get.
64 return is_first_scan_complete_;
65 }
66
67 void WifiDataProviderCommon::DoWifiScanTask() {
68 bool update_available = false;
69 WifiData new_data;
70 if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) {
71 ScheduleNextScan(polling_policy_->NoWifiInterval());
72 } else {
73 update_available = wifi_data_.DiffersSignificantly(new_data);
74 wifi_data_ = new_data;
75 polling_policy_->UpdatePollingInterval(update_available);
76 ScheduleNextScan(polling_policy_->PollingInterval());
77 }
78 if (update_available || !is_first_scan_complete_) {
79 is_first_scan_complete_ = true;
80 RunCallbacks();
81 }
82 }
83
84 void WifiDataProviderCommon::ScheduleNextScan(int interval) {
85 client_task_runner()->PostDelayedTask(
86 FROM_HERE, base::Bind(&WifiDataProviderCommon::DoWifiScanTask,
87 weak_factory_.GetWeakPtr()),
88 base::TimeDelta::FromMilliseconds(interval));
89 }
90
91 } // namespace device
OLDNEW
« no previous file with comments | « device/geolocation/wifi_data_provider_common.h ('k') | device/geolocation/wifi_data_provider_common_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698