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

Side by Side Diff: device/bluetooth/dbus/bluetooth_adapter_client.cc

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/bluetooth_adapter_client.h" 5 #include "device/bluetooth/dbus/bluetooth_adapter_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "dbus/bus.h" 9 #include "dbus/bus.h"
10 #include "dbus/message.h" 10 #include "dbus/message.h"
11 #include "dbus/object_manager.h" 11 #include "dbus/object_manager.h"
12 #include "dbus/object_proxy.h" 12 #include "dbus/object_proxy.h"
13 #include "third_party/cros_system_api/dbus/service_constants.h" 13 #include "third_party/cros_system_api/dbus/service_constants.h"
14 14
15 namespace chromeos { 15 namespace bluez {
16 16
17 BluetoothAdapterClient::DiscoveryFilter::DiscoveryFilter() { 17 BluetoothAdapterClient::DiscoveryFilter::DiscoveryFilter() {}
18 }
19 18
20 BluetoothAdapterClient::DiscoveryFilter::~DiscoveryFilter() { 19 BluetoothAdapterClient::DiscoveryFilter::~DiscoveryFilter() {}
21 }
22 20
23 void BluetoothAdapterClient::DiscoveryFilter::CopyFrom( 21 void BluetoothAdapterClient::DiscoveryFilter::CopyFrom(
24 const DiscoveryFilter& filter) { 22 const DiscoveryFilter& filter) {
25 if (filter.rssi.get()) 23 if (filter.rssi.get())
26 rssi.reset(new int16_t(*filter.rssi)); 24 rssi.reset(new int16_t(*filter.rssi));
27 else 25 else
28 rssi.reset(); 26 rssi.reset();
29 27
30 if (filter.pathloss.get()) 28 if (filter.pathloss.get())
31 pathloss.reset(new uint16_t(*filter.pathloss)); 29 pathloss.reset(new uint16_t(*filter.pathloss));
(...skipping 30 matching lines...) Expand all
62 RegisterProperty(bluetooth_adapter::kPairableProperty, &pairable); 60 RegisterProperty(bluetooth_adapter::kPairableProperty, &pairable);
63 RegisterProperty(bluetooth_adapter::kPairableTimeoutProperty, 61 RegisterProperty(bluetooth_adapter::kPairableTimeoutProperty,
64 &pairable_timeout); 62 &pairable_timeout);
65 RegisterProperty(bluetooth_adapter::kDiscoverableTimeoutProperty, 63 RegisterProperty(bluetooth_adapter::kDiscoverableTimeoutProperty,
66 &discoverable_timeout); 64 &discoverable_timeout);
67 RegisterProperty(bluetooth_adapter::kDiscoveringProperty, &discovering); 65 RegisterProperty(bluetooth_adapter::kDiscoveringProperty, &discovering);
68 RegisterProperty(bluetooth_adapter::kUUIDsProperty, &uuids); 66 RegisterProperty(bluetooth_adapter::kUUIDsProperty, &uuids);
69 RegisterProperty(bluetooth_adapter::kModaliasProperty, &modalias); 67 RegisterProperty(bluetooth_adapter::kModaliasProperty, &modalias);
70 } 68 }
71 69
72 BluetoothAdapterClient::Properties::~Properties() { 70 BluetoothAdapterClient::Properties::~Properties() {}
73 }
74
75 71
76 // The BluetoothAdapterClient implementation used in production. 72 // The BluetoothAdapterClient implementation used in production.
77 class BluetoothAdapterClientImpl 73 class BluetoothAdapterClientImpl : public BluetoothAdapterClient,
78 : public BluetoothAdapterClient, 74 public dbus::ObjectManager::Interface {
79 public dbus::ObjectManager::Interface {
80 public: 75 public:
81 BluetoothAdapterClientImpl() 76 BluetoothAdapterClientImpl()
82 : object_manager_(NULL), weak_ptr_factory_(this) {} 77 : object_manager_(NULL), weak_ptr_factory_(this) {}
83 78
84 ~BluetoothAdapterClientImpl() override { 79 ~BluetoothAdapterClientImpl() override {
85 object_manager_->UnregisterInterface( 80 object_manager_->UnregisterInterface(
86 bluetooth_adapter::kBluetoothAdapterInterface); 81 bluetooth_adapter::kBluetoothAdapterInterface);
87 } 82 }
88 83
89 // BluetoothAdapterClient override. 84 // BluetoothAdapterClient override.
(...skipping 13 matching lines...) Expand all
103 return object_manager_->GetObjectsWithInterface( 98 return object_manager_->GetObjectsWithInterface(
104 bluetooth_adapter::kBluetoothAdapterInterface); 99 bluetooth_adapter::kBluetoothAdapterInterface);
105 } 100 }
106 101
107 // dbus::ObjectManager::Interface override. 102 // dbus::ObjectManager::Interface override.
108 dbus::PropertySet* CreateProperties( 103 dbus::PropertySet* CreateProperties(
109 dbus::ObjectProxy* object_proxy, 104 dbus::ObjectProxy* object_proxy,
110 const dbus::ObjectPath& object_path, 105 const dbus::ObjectPath& object_path,
111 const std::string& interface_name) override { 106 const std::string& interface_name) override {
112 Properties* properties = new Properties( 107 Properties* properties = new Properties(
113 object_proxy, 108 object_proxy, interface_name,
114 interface_name,
115 base::Bind(&BluetoothAdapterClientImpl::OnPropertyChanged, 109 base::Bind(&BluetoothAdapterClientImpl::OnPropertyChanged,
116 weak_ptr_factory_.GetWeakPtr(), 110 weak_ptr_factory_.GetWeakPtr(), object_path));
117 object_path));
118 return static_cast<dbus::PropertySet*>(properties); 111 return static_cast<dbus::PropertySet*>(properties);
119 } 112 }
120 113
121 // BluetoothAdapterClient override. 114 // BluetoothAdapterClient override.
122 Properties* GetProperties(const dbus::ObjectPath& object_path) override { 115 Properties* GetProperties(const dbus::ObjectPath& object_path) override {
123 return static_cast<Properties*>( 116 return static_cast<Properties*>(object_manager_->GetProperties(
124 object_manager_->GetProperties( 117 object_path, bluetooth_adapter::kBluetoothAdapterInterface));
125 object_path,
126 bluetooth_adapter::kBluetoothAdapterInterface));
127 } 118 }
128 119
129 // BluetoothAdapterClient override. 120 // BluetoothAdapterClient override.
130 void StartDiscovery(const dbus::ObjectPath& object_path, 121 void StartDiscovery(const dbus::ObjectPath& object_path,
131 const base::Closure& callback, 122 const base::Closure& callback,
132 const ErrorCallback& error_callback) override { 123 const ErrorCallback& error_callback) override {
133 dbus::MethodCall method_call( 124 dbus::MethodCall method_call(bluetooth_adapter::kBluetoothAdapterInterface,
134 bluetooth_adapter::kBluetoothAdapterInterface, 125 bluetooth_adapter::kStartDiscovery);
135 bluetooth_adapter::kStartDiscovery);
136 126
137 dbus::ObjectProxy* object_proxy = 127 dbus::ObjectProxy* object_proxy =
138 object_manager_->GetObjectProxy(object_path); 128 object_manager_->GetObjectProxy(object_path);
139 if (!object_proxy) { 129 if (!object_proxy) {
140 error_callback.Run(kUnknownAdapterError, ""); 130 error_callback.Run(kUnknownAdapterError, "");
141 return; 131 return;
142 } 132 }
143 133
144 object_proxy->CallMethodWithErrorCallback( 134 object_proxy->CallMethodWithErrorCallback(
145 &method_call, 135 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
146 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
147 base::Bind(&BluetoothAdapterClientImpl::OnSuccess, 136 base::Bind(&BluetoothAdapterClientImpl::OnSuccess,
148 weak_ptr_factory_.GetWeakPtr(), callback), 137 weak_ptr_factory_.GetWeakPtr(), callback),
149 base::Bind(&BluetoothAdapterClientImpl::OnError, 138 base::Bind(&BluetoothAdapterClientImpl::OnError,
150 weak_ptr_factory_.GetWeakPtr(), error_callback)); 139 weak_ptr_factory_.GetWeakPtr(), error_callback));
151 } 140 }
152 141
153 // BluetoothAdapterClient override. 142 // BluetoothAdapterClient override.
154 void StopDiscovery(const dbus::ObjectPath& object_path, 143 void StopDiscovery(const dbus::ObjectPath& object_path,
155 const base::Closure& callback, 144 const base::Closure& callback,
156 const ErrorCallback& error_callback) override { 145 const ErrorCallback& error_callback) override {
157 dbus::MethodCall method_call( 146 dbus::MethodCall method_call(bluetooth_adapter::kBluetoothAdapterInterface,
158 bluetooth_adapter::kBluetoothAdapterInterface, 147 bluetooth_adapter::kStopDiscovery);
159 bluetooth_adapter::kStopDiscovery);
160 148
161 dbus::ObjectProxy* object_proxy = 149 dbus::ObjectProxy* object_proxy =
162 object_manager_->GetObjectProxy(object_path); 150 object_manager_->GetObjectProxy(object_path);
163 if (!object_proxy) { 151 if (!object_proxy) {
164 error_callback.Run(kUnknownAdapterError, ""); 152 error_callback.Run(kUnknownAdapterError, "");
165 return; 153 return;
166 } 154 }
167 155
168 object_proxy->CallMethodWithErrorCallback( 156 object_proxy->CallMethodWithErrorCallback(
169 &method_call, 157 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
170 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
171 base::Bind(&BluetoothAdapterClientImpl::OnSuccess, 158 base::Bind(&BluetoothAdapterClientImpl::OnSuccess,
172 weak_ptr_factory_.GetWeakPtr(), callback), 159 weak_ptr_factory_.GetWeakPtr(), callback),
173 base::Bind(&BluetoothAdapterClientImpl::OnError, 160 base::Bind(&BluetoothAdapterClientImpl::OnError,
174 weak_ptr_factory_.GetWeakPtr(), error_callback)); 161 weak_ptr_factory_.GetWeakPtr(), error_callback));
175 } 162 }
176 163
177 // BluetoothAdapterClient override. 164 // BluetoothAdapterClient override.
178 void RemoveDevice(const dbus::ObjectPath& object_path, 165 void RemoveDevice(const dbus::ObjectPath& object_path,
179 const dbus::ObjectPath& device_path, 166 const dbus::ObjectPath& device_path,
180 const base::Closure& callback, 167 const base::Closure& callback,
181 const ErrorCallback& error_callback) override { 168 const ErrorCallback& error_callback) override {
182 dbus::MethodCall method_call( 169 dbus::MethodCall method_call(bluetooth_adapter::kBluetoothAdapterInterface,
183 bluetooth_adapter::kBluetoothAdapterInterface, 170 bluetooth_adapter::kRemoveDevice);
184 bluetooth_adapter::kRemoveDevice);
185 171
186 dbus::MessageWriter writer(&method_call); 172 dbus::MessageWriter writer(&method_call);
187 writer.AppendObjectPath(device_path); 173 writer.AppendObjectPath(device_path);
188 174
189 dbus::ObjectProxy* object_proxy = 175 dbus::ObjectProxy* object_proxy =
190 object_manager_->GetObjectProxy(object_path); 176 object_manager_->GetObjectProxy(object_path);
191 if (!object_proxy) { 177 if (!object_proxy) {
192 error_callback.Run(kUnknownAdapterError, ""); 178 error_callback.Run(kUnknownAdapterError, "");
193 return; 179 return;
194 } 180 }
195 181
196 object_proxy->CallMethodWithErrorCallback( 182 object_proxy->CallMethodWithErrorCallback(
197 &method_call, 183 &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
198 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
199 base::Bind(&BluetoothAdapterClientImpl::OnSuccess, 184 base::Bind(&BluetoothAdapterClientImpl::OnSuccess,
200 weak_ptr_factory_.GetWeakPtr(), callback), 185 weak_ptr_factory_.GetWeakPtr(), callback),
201 base::Bind(&BluetoothAdapterClientImpl::OnError, 186 base::Bind(&BluetoothAdapterClientImpl::OnError,
202 weak_ptr_factory_.GetWeakPtr(), error_callback)); 187 weak_ptr_factory_.GetWeakPtr(), error_callback));
203 } 188 }
204 189
205 // BluetoothAdapterClient override. 190 // BluetoothAdapterClient override.
206 void SetDiscoveryFilter(const dbus::ObjectPath& object_path, 191 void SetDiscoveryFilter(const dbus::ObjectPath& object_path,
207 const DiscoveryFilter& discovery_filter, 192 const DiscoveryFilter& discovery_filter,
208 const base::Closure& callback, 193 const base::Closure& callback,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 // Called by dbus::PropertySet when a property value is changed, 296 // Called by dbus::PropertySet when a property value is changed,
312 // either by result of a signal or response to a GetAll() or Get() 297 // either by result of a signal or response to a GetAll() or Get()
313 // call. Informs observers. 298 // call. Informs observers.
314 void OnPropertyChanged(const dbus::ObjectPath& object_path, 299 void OnPropertyChanged(const dbus::ObjectPath& object_path,
315 const std::string& property_name) { 300 const std::string& property_name) {
316 FOR_EACH_OBSERVER(BluetoothAdapterClient::Observer, observers_, 301 FOR_EACH_OBSERVER(BluetoothAdapterClient::Observer, observers_,
317 AdapterPropertyChanged(object_path, property_name)); 302 AdapterPropertyChanged(object_path, property_name));
318 } 303 }
319 304
320 // Called when a response for successful method call is received. 305 // Called when a response for successful method call is received.
321 void OnSuccess(const base::Closure& callback, 306 void OnSuccess(const base::Closure& callback, dbus::Response* response) {
322 dbus::Response* response) {
323 DCHECK(response); 307 DCHECK(response);
324 callback.Run(); 308 callback.Run();
325 } 309 }
326 310
327 // Called when a response for a failed method call is received. 311 // Called when a response for a failed method call is received.
328 void OnError(const ErrorCallback& error_callback, 312 void OnError(const ErrorCallback& error_callback,
329 dbus::ErrorResponse* response) { 313 dbus::ErrorResponse* response) {
330 // Error response has optional error message argument. 314 // Error response has optional error message argument.
331 std::string error_name; 315 std::string error_name;
332 std::string error_message; 316 std::string error_message;
(...skipping 10 matching lines...) Expand all
343 327
344 dbus::ObjectManager* object_manager_; 328 dbus::ObjectManager* object_manager_;
345 329
346 // List of observers interested in event notifications from us. 330 // List of observers interested in event notifications from us.
347 base::ObserverList<BluetoothAdapterClient::Observer> observers_; 331 base::ObserverList<BluetoothAdapterClient::Observer> observers_;
348 332
349 // Weak pointer factory for generating 'this' pointers that might live longer 333 // Weak pointer factory for generating 'this' pointers that might live longer
350 // than we do. 334 // than we do.
351 // Note: This should remain the last member so it'll be destroyed and 335 // Note: This should remain the last member so it'll be destroyed and
352 // invalidate its weak pointers before any other members are destroyed. 336 // invalidate its weak pointers before any other members are destroyed.
353 base::WeakPtrFactory<BluetoothAdapterClientImpl> 337 base::WeakPtrFactory<BluetoothAdapterClientImpl> weak_ptr_factory_;
354 weak_ptr_factory_;
355 338
356 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterClientImpl); 339 DISALLOW_COPY_AND_ASSIGN(BluetoothAdapterClientImpl);
357 }; 340 };
358 341
359 BluetoothAdapterClient::BluetoothAdapterClient() { 342 BluetoothAdapterClient::BluetoothAdapterClient() {}
360 }
361 343
362 BluetoothAdapterClient::~BluetoothAdapterClient() { 344 BluetoothAdapterClient::~BluetoothAdapterClient() {}
363 }
364 345
365 BluetoothAdapterClient* BluetoothAdapterClient::Create() { 346 BluetoothAdapterClient* BluetoothAdapterClient::Create() {
366 return new BluetoothAdapterClientImpl; 347 return new BluetoothAdapterClientImpl;
367 } 348 }
368 349
369 } // namespace chromeos 350 } // namespace bluez
OLDNEW
« no previous file with comments | « device/bluetooth/dbus/bluetooth_adapter_client.h ('k') | device/bluetooth/dbus/bluetooth_agent_manager_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698