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/dbus/bluetooth_manager_client.cc

Issue 9838085: Move files inside chrome/browser/chromeos/dbus to chromeos/dbus (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase Created 8 years, 8 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 "chrome/browser/chromeos/dbus/bluetooth_manager_client.h"
6
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "chrome/browser/chromeos/dbus/bluetooth_property.h"
10 #include "dbus/bus.h"
11 #include "dbus/message.h"
12 #include "dbus/object_path.h"
13 #include "dbus/object_proxy.h"
14 #include "third_party/cros_system_api/dbus/service_constants.h"
15
16 namespace chromeos {
17
18 BluetoothManagerClient::Properties::Properties(dbus::ObjectProxy* object_proxy,
19 PropertyChangedCallback callback)
20 : BluetoothPropertySet(object_proxy,
21 bluetooth_manager::kBluetoothManagerInterface,
22 callback) {
23 RegisterProperty(bluetooth_manager::kAdaptersProperty, &adapters);
24 }
25
26 BluetoothManagerClient::Properties::~Properties() {
27 }
28
29
30 // The BluetoothManagerClient implementation used in production.
31 class BluetoothManagerClientImpl : public BluetoothManagerClient {
32 public:
33 explicit BluetoothManagerClientImpl(dbus::Bus* bus)
34 : weak_ptr_factory_(this),
35 object_proxy_(NULL) {
36 DVLOG(1) << "Creating BluetoothManagerClientImpl";
37
38 // Create the object proxy.
39 DCHECK(bus);
40 object_proxy_ = bus->GetObjectProxy(
41 bluetooth_manager::kBluetoothManagerServiceName,
42 dbus::ObjectPath(bluetooth_manager::kBluetoothManagerServicePath));
43
44 object_proxy_->ConnectToSignal(
45 bluetooth_manager::kBluetoothManagerInterface,
46 bluetooth_manager::kAdapterAddedSignal,
47 base::Bind(&BluetoothManagerClientImpl::AdapterAddedReceived,
48 weak_ptr_factory_.GetWeakPtr()),
49 base::Bind(&BluetoothManagerClientImpl::AdapterAddedConnected,
50 weak_ptr_factory_.GetWeakPtr()));
51
52 object_proxy_->ConnectToSignal(
53 bluetooth_manager::kBluetoothManagerInterface,
54 bluetooth_manager::kAdapterRemovedSignal,
55 base::Bind(&BluetoothManagerClientImpl::AdapterRemovedReceived,
56 weak_ptr_factory_.GetWeakPtr()),
57 base::Bind(&BluetoothManagerClientImpl::AdapterRemovedConnected,
58 weak_ptr_factory_.GetWeakPtr()));
59
60 object_proxy_->ConnectToSignal(
61 bluetooth_manager::kBluetoothManagerInterface,
62 bluetooth_manager::kDefaultAdapterChangedSignal,
63 base::Bind(&BluetoothManagerClientImpl::DefaultAdapterChangedReceived,
64 weak_ptr_factory_.GetWeakPtr()),
65 base::Bind(&BluetoothManagerClientImpl::DefaultAdapterChangedConnected,
66 weak_ptr_factory_.GetWeakPtr()));
67
68 // Create the properties structure.
69 properties_ = new Properties(
70 object_proxy_,
71 base::Bind(&BluetoothManagerClientImpl::OnPropertyChanged,
72 weak_ptr_factory_.GetWeakPtr()));
73
74 properties_->ConnectSignals();
75 properties_->GetAll();
76 }
77
78 virtual ~BluetoothManagerClientImpl() {
79 // Clean up the Properties structure.
80 delete properties_;
81 }
82
83 // BluetoothManagerClient override.
84 virtual void AddObserver(Observer* observer) OVERRIDE {
85 DCHECK(observer);
86 observers_.AddObserver(observer);
87 }
88
89 // BluetoothManagerClient override.
90 virtual void RemoveObserver(Observer* observer) OVERRIDE {
91 DCHECK(observer);
92 observers_.RemoveObserver(observer);
93 }
94
95 // BluetoothManagerClient override.
96 virtual Properties* GetProperties() OVERRIDE {
97 return properties_;
98 }
99
100 // BluetoothManagerClient override.
101 virtual void DefaultAdapter(const AdapterCallback& callback) OVERRIDE {
102 dbus::MethodCall method_call(
103 bluetooth_manager::kBluetoothManagerInterface,
104 bluetooth_manager::kDefaultAdapter);
105
106 DCHECK(object_proxy_);
107 object_proxy_->CallMethod(
108 &method_call,
109 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
110 base::Bind(&BluetoothManagerClientImpl::OnDefaultAdapter,
111 weak_ptr_factory_.GetWeakPtr(), callback));
112 }
113
114 // BluetoothManagerClient override.
115 virtual void FindAdapter(const std::string& address,
116 const AdapterCallback& callback) {
117 dbus::MethodCall method_call(
118 bluetooth_manager::kBluetoothManagerInterface,
119 bluetooth_manager::kFindAdapter);
120
121 dbus::MessageWriter writer(&method_call);
122 writer.AppendString(address);
123
124 DCHECK(object_proxy_);
125 object_proxy_->CallMethod(
126 &method_call,
127 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
128 base::Bind(&BluetoothManagerClientImpl::OnFindAdapter,
129 weak_ptr_factory_.GetWeakPtr(), callback));
130 }
131
132 private:
133 // Called by BluetoothPropertySet when a property value is changed,
134 // either by result of a signal or response to a GetAll() or Get()
135 // call. Informs observers.
136 void OnPropertyChanged(const std::string& property_name) {
137 FOR_EACH_OBSERVER(BluetoothManagerClient::Observer, observers_,
138 ManagerPropertyChanged(property_name));
139 }
140
141 // Called by dbus:: when an AdapterAdded signal is received.
142 void AdapterAddedReceived(dbus::Signal* signal) {
143 DCHECK(signal);
144 dbus::MessageReader reader(signal);
145 dbus::ObjectPath object_path;
146 if (!reader.PopObjectPath(&object_path)) {
147 LOG(WARNING) << "AdapterAdded signal has incorrect parameters: "
148 << signal->ToString();
149 return;
150 }
151
152 DVLOG(1) << "Adapter added: " << object_path.value();
153 FOR_EACH_OBSERVER(Observer, observers_, AdapterAdded(object_path));
154 }
155
156 // Called by dbus:: when the AdapterAdded signal is initially connected.
157 void AdapterAddedConnected(const std::string& interface_name,
158 const std::string& signal_name,
159 bool success) {
160 LOG_IF(WARNING, !success) << "Failed to connect to AdapterAdded signal.";
161 }
162
163 // Called by dbus:: when an AdapterRemoved signal is received.
164 void AdapterRemovedReceived(dbus::Signal* signal) {
165 DCHECK(signal);
166 dbus::MessageReader reader(signal);
167 dbus::ObjectPath object_path;
168 if (!reader.PopObjectPath(&object_path)) {
169 LOG(WARNING) << "AdapterRemoved signal has incorrect parameters: "
170 << signal->ToString();
171 return;
172 }
173
174 DVLOG(1) << "Adapter removed: " << object_path.value();
175 FOR_EACH_OBSERVER(Observer, observers_, AdapterRemoved(object_path));
176 }
177
178 // Called by dbus:: when the AdapterRemoved signal is initially connected.
179 void AdapterRemovedConnected(const std::string& interface_name,
180 const std::string& signal_name,
181 bool success) {
182 LOG_IF(WARNING, !success) << "Failed to connect to AdapterRemoved signal.";
183 }
184
185 // Called by dbus:: when a DefaultAdapterChanged signal is received.
186 void DefaultAdapterChangedReceived(dbus::Signal* signal) {
187 DCHECK(signal);
188 dbus::MessageReader reader(signal);
189 dbus::ObjectPath object_path;
190 if (!reader.PopObjectPath(&object_path)) {
191 LOG(WARNING) << "DefaultAdapterChanged signal has incorrect parameters: "
192 << signal->ToString();
193 return;
194 }
195
196 DVLOG(1) << "Default adapter changed: " << object_path.value();
197 FOR_EACH_OBSERVER(Observer, observers_, DefaultAdapterChanged(object_path));
198 }
199
200 // Called by dbus:: when the DefaultAdapterChanged signal is initially
201 // connected.
202 void DefaultAdapterChangedConnected(const std::string& interface_name,
203 const std::string& signal_name,
204 bool success) {
205 LOG_IF(WARNING, !success)
206 << "Failed to connect to DefaultAdapterChanged signal.";
207 }
208
209 // Called when a response for DefaultAdapter() is received.
210 void OnDefaultAdapter(const AdapterCallback& callback,
211 dbus::Response* response) {
212 // Parse response.
213 bool success = false;
214 dbus::ObjectPath object_path;
215 if (response != NULL) {
216 dbus::MessageReader reader(response);
217 if (!reader.PopObjectPath(&object_path)) {
218 LOG(WARNING) << "DefaultAdapter response has incorrect parameters: "
219 << response->ToString();
220 } else {
221 success = true;
222 }
223 } else {
224 LOG(WARNING) << "Failed to get default adapter.";
225 }
226
227 // Notify client.
228 callback.Run(object_path, success);
229 }
230
231 // Called when a response for FindAdapter() is received.
232 void OnFindAdapter(const AdapterCallback& callback,
233 dbus::Response* response) {
234 // Parse response.
235 bool success = false;
236 dbus::ObjectPath object_path;
237 if (response != NULL) {
238 dbus::MessageReader reader(response);
239 if (!reader.PopObjectPath(&object_path)) {
240 LOG(WARNING) << "FindAdapter response has incorrect parameters: "
241 << response->ToString();
242 } else {
243 success = true;
244 }
245 } else {
246 LOG(WARNING) << "Failed to find adapter.";
247 }
248
249 // Notify client.
250 callback.Run(object_path, success);
251 }
252
253 // Weak pointer factory for generating 'this' pointers that might live longer
254 // than we do.
255 base::WeakPtrFactory<BluetoothManagerClientImpl> weak_ptr_factory_;
256
257 // D-Bus proxy for BlueZ Manager interface.
258 dbus::ObjectProxy* object_proxy_;
259
260 // Properties for BlueZ Manager interface.
261 Properties* properties_;
262
263 // List of observers interested in event notifications from us.
264 ObserverList<Observer> observers_;
265
266 DISALLOW_COPY_AND_ASSIGN(BluetoothManagerClientImpl);
267 };
268
269 // The BluetoothManagerClient implementation used on Linux desktop, which does
270 // nothing.
271 class BluetoothManagerClientStubImpl : public BluetoothManagerClient {
272 public:
273 // BluetoothManagerClient override.
274 virtual void AddObserver(Observer* observer) OVERRIDE {
275 }
276
277 // BluetoothManagerClient override.
278 virtual void RemoveObserver(Observer* observer) OVERRIDE {
279 }
280
281 // BluetoothManagerClient override.
282 virtual Properties* GetProperties() OVERRIDE {
283 VLOG(1) << "GetProperties";
284 return NULL;
285 }
286
287 // BluetoothManagerClient override.
288 virtual void DefaultAdapter(const AdapterCallback& callback) OVERRIDE {
289 VLOG(1) << "DefaultAdapter.";
290 callback.Run(dbus::ObjectPath(), false);
291 }
292
293 // BluetoothManagerClient override.
294 virtual void FindAdapter(const std::string& address,
295 const AdapterCallback& callback) {
296 VLOG(1) << "FindAdapter: " << address;
297 callback.Run(dbus::ObjectPath(), false);
298 }
299 };
300
301 BluetoothManagerClient::BluetoothManagerClient() {
302 }
303
304 BluetoothManagerClient::~BluetoothManagerClient() {
305 }
306
307 BluetoothManagerClient* BluetoothManagerClient::Create(
308 DBusClientImplementationType type,
309 dbus::Bus* bus) {
310 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
311 return new BluetoothManagerClientImpl(bus);
312 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
313 return new BluetoothManagerClientStubImpl();
314 }
315
316 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/dbus/bluetooth_manager_client.h ('k') | chrome/browser/chromeos/dbus/bluetooth_node_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698