OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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_device_experimental_chromeos.h" | 5 #include "device/bluetooth/bluetooth_device_experimental_chromeos.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "chromeos/dbus/dbus_thread_manager.h" | 8 #include "chromeos/dbus/dbus_thread_manager.h" |
9 #include "chromeos/dbus/experimental_bluetooth_adapter_client.h" | 9 #include "chromeos/dbus/experimental_bluetooth_adapter_client.h" |
10 #include "chromeos/dbus/experimental_bluetooth_agent_manager_client.h" | 10 #include "chromeos/dbus/experimental_bluetooth_agent_manager_client.h" |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 } | 131 } |
132 | 132 |
133 bool BluetoothDeviceExperimentalChromeOS::ExpectingConfirmation() const { | 133 bool BluetoothDeviceExperimentalChromeOS::ExpectingConfirmation() const { |
134 return !confirmation_callback_.is_null(); | 134 return !confirmation_callback_.is_null(); |
135 } | 135 } |
136 | 136 |
137 void BluetoothDeviceExperimentalChromeOS::Connect( | 137 void BluetoothDeviceExperimentalChromeOS::Connect( |
138 BluetoothDevice::PairingDelegate* pairing_delegate, | 138 BluetoothDevice::PairingDelegate* pairing_delegate, |
139 const base::Closure& callback, | 139 const base::Closure& callback, |
140 const ConnectErrorCallback& error_callback) { | 140 const ConnectErrorCallback& error_callback) { |
141 ++num_connecting_calls_; | 141 if (num_connecting_calls_++ == 0) |
| 142 adapter_->NotifyDeviceChanged(this); |
| 143 |
142 VLOG(1) << object_path_.value() << ": Connecting, " << num_connecting_calls_ | 144 VLOG(1) << object_path_.value() << ": Connecting, " << num_connecting_calls_ |
143 << " in progress"; | 145 << " in progress"; |
144 | 146 |
145 if (IsPaired() || IsConnected() || !pairing_delegate || !IsPairable()) { | 147 if (IsPaired() || IsConnected() || !pairing_delegate || !IsPairable()) { |
146 // No need to pair, or unable to, skip straight to connection. | 148 // No need to pair, or unable to, skip straight to connection. |
147 ConnectInternal(callback, error_callback); | 149 ConnectInternal(callback, error_callback); |
148 } else { | 150 } else { |
149 // Initiate high-security connection with pairing. | 151 // Initiate high-security connection with pairing. |
150 DCHECK(!pairing_delegate_); | 152 DCHECK(!pairing_delegate_); |
151 DCHECK(agent_.get() == NULL); | 153 DCHECK(agent_.get() == NULL); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 weak_ptr_factory_.GetWeakPtr(), | 387 weak_ptr_factory_.GetWeakPtr(), |
386 callback), | 388 callback), |
387 base::Bind( | 389 base::Bind( |
388 &BluetoothDeviceExperimentalChromeOS::OnConnectError, | 390 &BluetoothDeviceExperimentalChromeOS::OnConnectError, |
389 weak_ptr_factory_.GetWeakPtr(), | 391 weak_ptr_factory_.GetWeakPtr(), |
390 error_callback)); | 392 error_callback)); |
391 } | 393 } |
392 | 394 |
393 void BluetoothDeviceExperimentalChromeOS::OnConnect( | 395 void BluetoothDeviceExperimentalChromeOS::OnConnect( |
394 const base::Closure& callback) { | 396 const base::Closure& callback) { |
395 --num_connecting_calls_; | 397 if (--num_connecting_calls_ == 0) |
| 398 adapter_->NotifyDeviceChanged(this); |
| 399 |
396 DCHECK(num_connecting_calls_ >= 0); | 400 DCHECK(num_connecting_calls_ >= 0); |
397 VLOG(1) << object_path_.value() << ": Connected, " << num_connecting_calls_ | 401 VLOG(1) << object_path_.value() << ": Connected, " << num_connecting_calls_ |
398 << " still in progress"; | 402 << " still in progress"; |
399 | 403 |
400 SetTrusted(); | 404 SetTrusted(); |
401 | 405 |
402 callback.Run(); | 406 callback.Run(); |
403 } | 407 } |
404 | 408 |
405 void BluetoothDeviceExperimentalChromeOS::OnConnectError( | 409 void BluetoothDeviceExperimentalChromeOS::OnConnectError( |
406 const ConnectErrorCallback& error_callback, | 410 const ConnectErrorCallback& error_callback, |
407 const std::string& error_name, | 411 const std::string& error_name, |
408 const std::string& error_message) { | 412 const std::string& error_message) { |
409 --num_connecting_calls_; | 413 if (--num_connecting_calls_ == 0) |
| 414 adapter_->NotifyDeviceChanged(this); |
| 415 |
410 DCHECK(num_connecting_calls_ >= 0); | 416 DCHECK(num_connecting_calls_ >= 0); |
411 LOG(WARNING) << object_path_.value() << ": Failed to connect device: " | 417 LOG(WARNING) << object_path_.value() << ": Failed to connect device: " |
412 << error_name << ": " << error_message; | 418 << error_name << ": " << error_message; |
413 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ | 419 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ |
414 << " still in progress"; | 420 << " still in progress"; |
415 | 421 |
416 // Determine the error code from error_name. | 422 // Determine the error code from error_name. |
417 ConnectErrorCode error_code = ERROR_UNKNOWN; | 423 ConnectErrorCode error_code = ERROR_UNKNOWN; |
418 if (error_name == bluetooth_adapter::kErrorFailed) { | 424 if (error_name == bluetooth_adapter::kErrorFailed) { |
419 error_code = ERROR_FAILED; | 425 error_code = ERROR_FAILED; |
(...skipping 20 matching lines...) Expand all Loading... |
440 base::Bind( | 446 base::Bind( |
441 &BluetoothDeviceExperimentalChromeOS::OnPairError, | 447 &BluetoothDeviceExperimentalChromeOS::OnPairError, |
442 weak_ptr_factory_.GetWeakPtr(), | 448 weak_ptr_factory_.GetWeakPtr(), |
443 error_callback)); | 449 error_callback)); |
444 } | 450 } |
445 | 451 |
446 void BluetoothDeviceExperimentalChromeOS::OnRegisterAgentError( | 452 void BluetoothDeviceExperimentalChromeOS::OnRegisterAgentError( |
447 const ConnectErrorCallback& error_callback, | 453 const ConnectErrorCallback& error_callback, |
448 const std::string& error_name, | 454 const std::string& error_name, |
449 const std::string& error_message) { | 455 const std::string& error_message) { |
450 --num_connecting_calls_; | 456 if (--num_connecting_calls_ == 0) |
| 457 adapter_->NotifyDeviceChanged(this); |
| 458 |
451 DCHECK(num_connecting_calls_ >= 0); | 459 DCHECK(num_connecting_calls_ >= 0); |
452 LOG(WARNING) << object_path_.value() << ": Failed to register agent: " | 460 LOG(WARNING) << object_path_.value() << ": Failed to register agent: " |
453 << error_name << ": " << error_message; | 461 << error_name << ": " << error_message; |
454 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ | 462 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ |
455 << " still in progress"; | 463 << " still in progress"; |
456 | 464 |
457 UnregisterAgent(); | 465 UnregisterAgent(); |
458 | 466 |
459 // Determine the error code from error_name. | 467 // Determine the error code from error_name. |
460 ConnectErrorCode error_code = ERROR_UNKNOWN; | 468 ConnectErrorCode error_code = ERROR_UNKNOWN; |
461 if (error_name == bluetooth_adapter::kErrorAlreadyExists) | 469 if (error_name == bluetooth_adapter::kErrorAlreadyExists) |
462 error_code = ERROR_INPROGRESS; | 470 error_code = ERROR_INPROGRESS; |
463 | 471 |
464 error_callback.Run(error_code); | 472 error_callback.Run(error_code); |
465 } | 473 } |
466 | 474 |
467 void BluetoothDeviceExperimentalChromeOS::OnPair( | 475 void BluetoothDeviceExperimentalChromeOS::OnPair( |
468 const base::Closure& callback, | 476 const base::Closure& callback, |
469 const ConnectErrorCallback& error_callback) { | 477 const ConnectErrorCallback& error_callback) { |
470 VLOG(1) << object_path_.value() << ": Paired"; | 478 VLOG(1) << object_path_.value() << ": Paired"; |
471 UnregisterAgent(); | 479 UnregisterAgent(); |
472 SetTrusted(); | 480 SetTrusted(); |
473 ConnectInternal(callback, error_callback); | 481 ConnectInternal(callback, error_callback); |
474 } | 482 } |
475 | 483 |
476 void BluetoothDeviceExperimentalChromeOS::OnPairError( | 484 void BluetoothDeviceExperimentalChromeOS::OnPairError( |
477 const ConnectErrorCallback& error_callback, | 485 const ConnectErrorCallback& error_callback, |
478 const std::string& error_name, | 486 const std::string& error_name, |
479 const std::string& error_message) { | 487 const std::string& error_message) { |
480 --num_connecting_calls_; | 488 if (--num_connecting_calls_ == 0) |
| 489 adapter_->NotifyDeviceChanged(this); |
| 490 |
481 DCHECK(num_connecting_calls_ >= 0); | 491 DCHECK(num_connecting_calls_ >= 0); |
482 LOG(WARNING) << object_path_.value() << ": Failed to pair device: " | 492 LOG(WARNING) << object_path_.value() << ": Failed to pair device: " |
483 << error_name << ": " << error_message; | 493 << error_name << ": " << error_message; |
484 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ | 494 VLOG(1) << object_path_.value() << ": " << num_connecting_calls_ |
485 << " still in progress"; | 495 << " still in progress"; |
486 | 496 |
487 UnregisterAgent(); | 497 UnregisterAgent(); |
488 | 498 |
489 // Determine the error code from error_name. | 499 // Determine the error code from error_name. |
490 ConnectErrorCode error_code = ERROR_UNKNOWN; | 500 ConnectErrorCode error_code = ERROR_UNKNOWN; |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
603 if (!confirmation_callback_.is_null()) { | 613 if (!confirmation_callback_.is_null()) { |
604 confirmation_callback_.Run(status); | 614 confirmation_callback_.Run(status); |
605 confirmation_callback_.Reset(); | 615 confirmation_callback_.Reset(); |
606 callback_run = true; | 616 callback_run = true; |
607 } | 617 } |
608 | 618 |
609 return callback_run; | 619 return callback_run; |
610 } | 620 } |
611 | 621 |
612 } // namespace chromeos | 622 } // namespace chromeos |
OLD | NEW |