• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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 "content/browser/geolocation/wifi_data_provider.h"
6 
7 namespace content {
8 
WifiDataProvider()9 WifiDataProvider::WifiDataProvider()
10     : client_loop_(base::MessageLoop::current()) {
11   DCHECK(client_loop_);
12 }
13 
~WifiDataProvider()14 WifiDataProvider::~WifiDataProvider() {
15 }
16 
AddCallback(WifiDataUpdateCallback * callback)17 void WifiDataProvider::AddCallback(WifiDataUpdateCallback* callback) {
18   callbacks_.insert(callback);
19 }
20 
RemoveCallback(WifiDataUpdateCallback * callback)21 bool WifiDataProvider::RemoveCallback(WifiDataUpdateCallback* callback) {
22   return callbacks_.erase(callback) == 1;
23 }
24 
has_callbacks() const25 bool WifiDataProvider::has_callbacks() const {
26   return !callbacks_.empty();
27 }
28 
RunCallbacks()29 void WifiDataProvider::RunCallbacks() {
30   client_loop_->PostTask(FROM_HERE,
31                          base::Bind(&WifiDataProvider::DoRunCallbacks, this));
32 }
33 
CalledOnClientThread() const34 bool WifiDataProvider::CalledOnClientThread() const {
35   return base::MessageLoop::current() == this->client_loop_;
36 }
37 
client_loop() const38 base::MessageLoop* WifiDataProvider::client_loop() const {
39   return client_loop_;
40 }
41 
DoRunCallbacks()42 void WifiDataProvider::DoRunCallbacks() {
43   // It's possible that all the callbacks went away whilst this task was
44   // pending. This is fine; the loop will be a no-op.
45   CallbackSet::const_iterator iter = callbacks_.begin();
46   while (iter != callbacks_.end()) {
47     WifiDataUpdateCallback* callback = *iter;
48     ++iter;  // Advance iter before running, in case callback unregisters.
49     callback->Run();
50   }
51 }
52 
53 }  // namespace content
54