| Index: content/browser/geolocation/wifi_data_provider_common.cc
|
| diff --git a/content/browser/geolocation/wifi_data_provider_common.cc b/content/browser/geolocation/wifi_data_provider_common.cc
|
| index 2642176358c983604d59c740702aa565e4ba5244..9132752e5fcc3316a7a30f8542508649c970faec 100644
|
| --- a/content/browser/geolocation/wifi_data_provider_common.cc
|
| +++ b/content/browser/geolocation/wifi_data_provider_common.cc
|
| @@ -25,40 +25,14 @@ string16 MacAddressAsString16(const uint8 mac_as_int[6]) {
|
| }
|
|
|
| WifiDataProviderCommon::WifiDataProviderCommon()
|
| - : Thread("Geolocation_wifi_provider"),
|
| - is_first_scan_complete_(false),
|
| + : is_first_scan_complete_(false),
|
| weak_factory_(this) {
|
| }
|
|
|
| WifiDataProviderCommon::~WifiDataProviderCommon() {
|
| - // Thread must be stopped before entering destructor chain to avoid race
|
| - // conditions; see comment in DeviceDataProvider::Unregister.
|
| - DCHECK(!IsRunning()); // Must call StopDataProvider before destroying me.
|
| }
|
|
|
| -bool WifiDataProviderCommon::StartDataProvider() {
|
| - DCHECK(CalledOnClientThread());
|
| - DCHECK(!IsRunning()); // StartDataProvider must only be called once.
|
| - return Start();
|
| -}
|
| -
|
| -void WifiDataProviderCommon::StopDataProvider() {
|
| - DCHECK(CalledOnClientThread());
|
| - Stop();
|
| -}
|
| -
|
| -bool WifiDataProviderCommon::GetData(WifiData* data) {
|
| - DCHECK(CalledOnClientThread());
|
| - DCHECK(data);
|
| - base::AutoLock lock(data_mutex_);
|
| - *data = wifi_data_;
|
| - // If we've successfully completed a scan, indicate that we have all of the
|
| - // data we can get.
|
| - return is_first_scan_complete_;
|
| -}
|
| -
|
| -// Thread implementation
|
| -void WifiDataProviderCommon::Init() {
|
| +void WifiDataProviderCommon::StartDataProvider() {
|
| DCHECK(wlan_api_ == NULL);
|
| wlan_api_.reset(NewWlanApi());
|
| if (wlan_api_ == NULL) {
|
| @@ -76,23 +50,26 @@ void WifiDataProviderCommon::Init() {
|
| ScheduleNextScan(0);
|
| }
|
|
|
| -void WifiDataProviderCommon::CleanUp() {
|
| - // Destroy these instances in the thread on which they were created.
|
| +void WifiDataProviderCommon::StopDataProvider() {
|
| wlan_api_.reset();
|
| polling_policy_.reset();
|
| }
|
|
|
| +bool WifiDataProviderCommon::GetData(WifiData* data) {
|
| + *data = wifi_data_;
|
| + // If we've successfully completed a scan, indicate that we have all of the
|
| + // data we can get.
|
| + return is_first_scan_complete_;
|
| +}
|
| +
|
| void WifiDataProviderCommon::DoWifiScanTask() {
|
| bool update_available = false;
|
| WifiData new_data;
|
| if (!wlan_api_->GetAccessPointData(&new_data.access_point_data)) {
|
| ScheduleNextScan(polling_policy_->NoWifiInterval());
|
| } else {
|
| - {
|
| - base::AutoLock lock(data_mutex_);
|
| - update_available = wifi_data_.DiffersSignificantly(new_data);
|
| - wifi_data_ = new_data;
|
| - }
|
| + update_available = wifi_data_.DiffersSignificantly(new_data);
|
| + wifi_data_ = new_data;
|
| polling_policy_->UpdatePollingInterval(update_available);
|
| ScheduleNextScan(polling_policy_->PollingInterval());
|
| }
|
| @@ -103,7 +80,7 @@ void WifiDataProviderCommon::DoWifiScanTask() {
|
| }
|
|
|
| void WifiDataProviderCommon::ScheduleNextScan(int interval) {
|
| - message_loop()->PostDelayedTask(
|
| + client_loop()->PostDelayedTask(
|
| FROM_HERE,
|
| base::Bind(&WifiDataProviderCommon::DoWifiScanTask,
|
| weak_factory_.GetWeakPtr()),
|
|
|