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

Side by Side Diff: chrome/browser/chromeos/bluetooth/bluetooth_manager.cc

Issue 8394030: Chrome OS: Add bluetooth API for device discovery (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename BluetoothDevice accessors Created 9 years, 1 month 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
(Empty)
1 // Copyright (c) 2011 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 "chrome/browser/chromeos/bluetooth/bluetooth_manager.h"
6
7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/observer_list.h"
10 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h"
11 #include "chrome/browser/chromeos/dbus/bluetooth_manager_client.h"
12 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h"
13
14 namespace chromeos {
15
16 static BluetoothManager* g_bluetooth_manager = NULL;
17
18 class BluetoothManagerImpl : public BluetoothManager,
19 public BluetoothManagerClient::Observer {
20 public:
21 BluetoothManagerImpl() : weak_ptr_factory_(this) {
22 DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get();
23 DCHECK(dbus_thread_manager);
24 bluetooth_manager_client_ = dbus_thread_manager->bluetooth_manager_client();
25 DCHECK(bluetooth_manager_client_);
26
27 bluetooth_manager_client_->AddObserver(this);
28
29 bluetooth_manager_client_->DefaultAdapter(
30 base::Bind(&BluetoothManagerImpl::OnDefaultAdapter,
31 weak_ptr_factory_.GetWeakPtr()));
32 }
33
34 virtual void AddObserver(BluetoothManager::Observer* observer) {
35 VLOG(1) << "BluetoothManager::AddObserver";
36 DCHECK(observer);
37 observers_.AddObserver(observer);
38 }
39
40 virtual void RemoveObserver(BluetoothManager::Observer* observer) {
41 VLOG(1) << "BluetoothManager::RemoveObserver";
42 DCHECK(observer);
43 observers_.RemoveObserver(observer);
44 }
45
46 virtual BluetoothAdapter* DefaultAdapter() {
47 VLOG(1) << "BluetoothManager::DefaultAdapter";
48 return default_adapter_.get();
49 }
50
51 // BluetoothManagerClient::Observer override.
52 virtual void AdapterRemoved(const std::string& adapter) {
53 VLOG(1) << "AdapterRemoved: " << adapter;
54 if (default_adapter_.get() == NULL || default_adapter_->Id() != adapter) {
55 return;
56 }
57 // The default adapter was removed.
58 default_adapter_.reset();
59 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_,
60 DefaultAdapterChanged(default_adapter_.get()));
61 }
62
63 // BluetoothManagerClient::Observer override.
64 virtual void DefaultAdapterChanged(const std::string& adapter) {
65 VLOG(1) << "DefaultAdapterChanged: " << adapter;
66 OnNewDefaultAdapter(adapter);
67 }
68
69 private:
70 virtual ~BluetoothManagerImpl() {
71 bluetooth_manager_client_->RemoveObserver(this);
72 }
73
74 // We have updated info about the default adapter.
75 void OnNewDefaultAdapter(const std::string& adapter) {
76 VLOG(1) << "OnNewDefaultAdapter: " << adapter;
77 if (default_adapter_.get() != NULL && default_adapter_->Id() == adapter) {
78 return;
79 }
80 default_adapter_.reset(BluetoothAdapter::Create(adapter));
81 DCHECK(default_adapter_.get());
82 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_,
83 DefaultAdapterChanged(default_adapter_.get()));
84 }
85
86 // Called by bluetooth_manager_client when our DefaultAdapter request is
87 // complete
88 void OnDefaultAdapter(const std::string& adapter, bool success) {
89 if (!success) {
90 LOG(ERROR) << "OnDefaultAdapter: failed.";
91 return;
92 }
93 VLOG(1) << "OnDefaultAdapter: " << adapter;
94 OnNewDefaultAdapter(adapter);
95 }
96
97 base::WeakPtrFactory<BluetoothManagerImpl> weak_ptr_factory_;
98
99 // Owned by the dbus thread manager. Storing this is ok only because our
100 // lifetime is a subset of the thread manager's lifetime.
101 BluetoothManagerClient* bluetooth_manager_client_;
102
103 ObserverList<BluetoothManager::Observer> observers_;
104
105 scoped_ptr<BluetoothAdapter> default_adapter_;
106
107 DISALLOW_COPY_AND_ASSIGN(BluetoothManagerImpl);
108 };
109
110 BluetoothManager::BluetoothManager() {
111 }
112
113 BluetoothManager::~BluetoothManager() {
114 }
115
116 // static
117 // TODO(vlaviano): allow creation of stub impl for ui testing
118 void BluetoothManager::Initialize() {
119 VLOG(1) << "BluetoothManager::Initialize";
120 DCHECK(!g_bluetooth_manager);
121 g_bluetooth_manager = new BluetoothManagerImpl();
122 DCHECK(g_bluetooth_manager);
123 }
124
125 // static
126 void BluetoothManager::Shutdown() {
127 VLOG(1) << "BluetoothManager::Shutdown";
128 if (g_bluetooth_manager) {
129 delete g_bluetooth_manager;
130 g_bluetooth_manager = NULL;
131 }
132 }
133
134 // static
135 BluetoothManager* BluetoothManager::GetInstance() {
136 return g_bluetooth_manager;
137 }
138
139 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698