| OLD | NEW |
| 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 "device/bluetooth/bluetooth_socket_chromeos.h" | 5 #include "device/bluetooth/bluetooth_socket_chromeos.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 return; | 103 return; |
| 104 } | 104 } |
| 105 | 105 |
| 106 device_address_ = device->GetAddress(); | 106 device_address_ = device->GetAddress(); |
| 107 device_path_ = device->object_path(); | 107 device_path_ = device->object_path(); |
| 108 uuid_ = uuid; | 108 uuid_ = uuid; |
| 109 options_.reset(new BluetoothProfileManagerClient::Options()); | 109 options_.reset(new BluetoothProfileManagerClient::Options()); |
| 110 if (security_level == SECURITY_LEVEL_LOW) | 110 if (security_level == SECURITY_LEVEL_LOW) |
| 111 options_->require_authentication.reset(new bool(false)); | 111 options_->require_authentication.reset(new bool(false)); |
| 112 | 112 |
| 113 adapter_ = device->adapter(); | |
| 114 | |
| 115 RegisterProfile(device->adapter(), success_callback, error_callback); | 113 RegisterProfile(device->adapter(), success_callback, error_callback); |
| 116 } | 114 } |
| 117 | 115 |
| 118 void BluetoothSocketChromeOS::Listen( | 116 void BluetoothSocketChromeOS::Listen( |
| 119 scoped_refptr<BluetoothAdapter> adapter, | 117 scoped_refptr<BluetoothAdapter> adapter, |
| 120 SocketType socket_type, | 118 SocketType socket_type, |
| 121 const BluetoothUUID& uuid, | 119 const BluetoothUUID& uuid, |
| 122 const BluetoothAdapter::ServiceOptions& service_options, | 120 const BluetoothAdapter::ServiceOptions& service_options, |
| 123 const base::Closure& success_callback, | 121 const base::Closure& success_callback, |
| 124 const ErrorCompletionCallback& error_callback) { | 122 const ErrorCompletionCallback& error_callback) { |
| 125 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); | 123 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); |
| 126 DCHECK(!profile_); | 124 DCHECK(!profile_); |
| 127 | 125 |
| 128 if (!uuid.IsValid()) { | 126 if (!uuid.IsValid()) { |
| 129 error_callback.Run(kInvalidUUID); | 127 error_callback.Run(kInvalidUUID); |
| 130 return; | 128 return; |
| 131 } | 129 } |
| 132 | 130 |
| 133 adapter_ = adapter; | 131 adapter->AddObserver(this); |
| 134 adapter_->AddObserver(this); | |
| 135 | 132 |
| 136 uuid_ = uuid; | 133 uuid_ = uuid; |
| 137 options_.reset(new BluetoothProfileManagerClient::Options()); | 134 options_.reset(new BluetoothProfileManagerClient::Options()); |
| 138 if (service_options.name) | 135 if (service_options.name) |
| 139 options_->name.reset(new std::string(*service_options.name)); | 136 options_->name.reset(new std::string(*service_options.name)); |
| 140 | 137 |
| 141 switch (socket_type) { | 138 switch (socket_type) { |
| 142 case kRfcomm: | 139 case kRfcomm: |
| 143 options_->channel.reset( | 140 options_->channel.reset( |
| 144 new uint16(service_options.channel ? *service_options.channel : 0)); | 141 new uint16(service_options.channel ? *service_options.channel : 0)); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 } | 214 } |
| 218 | 215 |
| 219 void BluetoothSocketChromeOS::RegisterProfile( | 216 void BluetoothSocketChromeOS::RegisterProfile( |
| 220 BluetoothAdapterChromeOS* adapter, | 217 BluetoothAdapterChromeOS* adapter, |
| 221 const base::Closure& success_callback, | 218 const base::Closure& success_callback, |
| 222 const ErrorCompletionCallback& error_callback) { | 219 const ErrorCompletionCallback& error_callback) { |
| 223 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); | 220 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); |
| 224 DCHECK(!profile_); | 221 DCHECK(!profile_); |
| 225 DCHECK(adapter); | 222 DCHECK(adapter); |
| 226 | 223 |
| 224 adapter_ = adapter; |
| 225 |
| 227 // If the adapter is not present, this is a listening socket and the | 226 // If the adapter is not present, this is a listening socket and the |
| 228 // adapter isn't running yet. Report success and carry on; | 227 // adapter isn't running yet. Report success and carry on; |
| 229 // the profile will be registered when the daemon becomes available. | 228 // the profile will be registered when the daemon becomes available. |
| 230 if (!adapter->IsPresent()) { | 229 if (!adapter_->IsPresent()) { |
| 231 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() | 230 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() |
| 232 << ": Delaying profile registration."; | 231 << ": Delaying profile registration."; |
| 233 base::MessageLoop::current()->PostTask(FROM_HERE, success_callback); | 232 base::MessageLoop::current()->PostTask(FROM_HERE, success_callback); |
| 234 return; | 233 return; |
| 235 } | 234 } |
| 236 | 235 |
| 237 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() | 236 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() |
| 238 << ": Acquiring profile."; | 237 << ": Acquiring profile."; |
| 239 | 238 |
| 240 adapter->UseProfile( | 239 adapter->UseProfile( |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 << error_message; | 302 << error_message; |
| 304 UnregisterProfile(); | 303 UnregisterProfile(); |
| 305 error_callback.Run(error_message); | 304 error_callback.Run(error_message); |
| 306 } | 305 } |
| 307 | 306 |
| 308 void BluetoothSocketChromeOS::AdapterPresentChanged(BluetoothAdapter* adapter, | 307 void BluetoothSocketChromeOS::AdapterPresentChanged(BluetoothAdapter* adapter, |
| 309 bool present) { | 308 bool present) { |
| 310 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); | 309 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); |
| 311 | 310 |
| 312 if (!present) { | 311 if (!present) { |
| 313 // Adapter removed, we can't use the profile anymore. | 312 // Adapter removed, the profile is now invalid. |
| 314 UnregisterProfile(); | 313 UnregisterProfile(); |
| 315 return; | 314 return; |
| 316 } | 315 } |
| 317 | 316 |
| 318 DCHECK(!profile_); | 317 DCHECK(!profile_); |
| 319 | 318 |
| 320 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() | 319 VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() |
| 321 << ": Acquiring profile."; | 320 << ": Acquiring profile."; |
| 322 | 321 |
| 323 static_cast<BluetoothAdapterChromeOS*>(adapter)->UseProfile( | 322 static_cast<BluetoothAdapterChromeOS*>(adapter)->UseProfile( |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 connection_request_queue_.pop(); | 542 connection_request_queue_.pop(); |
| 544 } | 543 } |
| 545 } | 544 } |
| 546 | 545 |
| 547 void BluetoothSocketChromeOS::UnregisterProfile() { | 546 void BluetoothSocketChromeOS::UnregisterProfile() { |
| 548 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); | 547 DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); |
| 549 DCHECK(profile_); | 548 DCHECK(profile_); |
| 550 | 549 |
| 551 VLOG(1) << profile_->object_path().value() << ": Release profile"; | 550 VLOG(1) << profile_->object_path().value() << ": Release profile"; |
| 552 | 551 |
| 553 static_cast<BluetoothAdapterChromeOS*>(adapter_.get()) | 552 profile_->RemoveDelegate( |
| 554 ->ReleaseProfile(device_path_, profile_); | 553 device_path_, |
| 554 base::Bind(&BluetoothSocketChromeOS::ReleaseProfile, this, profile_)); |
| 555 |
| 555 profile_ = nullptr; | 556 profile_ = nullptr; |
| 556 } | 557 } |
| 557 | 558 |
| 559 void BluetoothSocketChromeOS::ReleaseProfile( |
| 560 BluetoothAdapterProfileChromeOS* profile) { |
| 561 if (adapter_) |
| 562 static_cast<BluetoothAdapterChromeOS*>(adapter_.get()) |
| 563 ->ReleaseProfile(uuid_); |
| 564 else |
| 565 delete profile; |
| 566 } |
| 567 |
| 558 } // namespace chromeos | 568 } // namespace chromeos |
| OLD | NEW |