| 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_adapter_chromeos.h" | 5 #include "device/bluetooth/bluetooth_adapter_chromeos.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 } // namespace | 60 } // namespace |
| 61 | 61 |
| 62 namespace device { | 62 namespace device { |
| 63 | 63 |
| 64 // static | 64 // static |
| 65 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( | 65 base::WeakPtr<BluetoothAdapter> BluetoothAdapter::CreateAdapter( |
| 66 const InitCallback& init_callback) { | 66 const InitCallback& init_callback) { |
| 67 return chromeos::BluetoothAdapterChromeOS::CreateAdapter(); | 67 return chromeos::BluetoothAdapterChromeOS::CreateAdapter(); |
| 68 } | 68 } |
| 69 | 69 |
| 70 } | 70 } // namespace device |
| 71 | 71 |
| 72 namespace chromeos { | 72 namespace chromeos { |
| 73 | 73 |
| 74 // static | 74 // static |
| 75 base::WeakPtr<BluetoothAdapter> BluetoothAdapterChromeOS::CreateAdapter() { | 75 base::WeakPtr<BluetoothAdapter> BluetoothAdapterChromeOS::CreateAdapter() { |
| 76 BluetoothAdapterChromeOS* adapter = new BluetoothAdapterChromeOS(); | 76 BluetoothAdapterChromeOS* adapter = new BluetoothAdapterChromeOS(); |
| 77 return adapter->weak_ptr_factory_.GetWeakPtr(); | 77 return adapter->weak_ptr_factory_.GetWeakPtr(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void BluetoothAdapterChromeOS::Shutdown() { | 80 void BluetoothAdapterChromeOS::Shutdown() { |
| 81 if (dbus_is_shutdown_) | 81 if (dbus_is_shutdown_) |
| 82 return; | 82 return; |
| 83 DCHECK(DBusThreadManager::IsInitialized()) | 83 DCHECK(DBusThreadManager::IsInitialized()) |
| 84 << "Call BluetoothAdapterFactory::Shutdown() before " | 84 << "Call BluetoothAdapterFactory::Shutdown() before " |
| 85 "DBusThreadManager::Shutdown()."; | 85 "DBusThreadManager::Shutdown()."; |
| 86 | 86 |
| 87 if (IsPresent()) | 87 if (IsPresent()) |
| 88 RemoveAdapter(); // Also deletes devices_. | 88 RemoveAdapter(); // Also deletes devices_. |
| 89 DCHECK(devices_.empty()); | 89 DCHECK(devices_.empty()); |
| 90 // profiles_ should be empty because all BluetoothSockets have been signaled | 90 // profiles_ is empty because all BluetoothSockets have been notified |
| 91 // that this adapter is disappearing. | 91 // that this adapter is disappearing. |
| 92 DCHECK(profiles_.empty()); | 92 DCHECK(profiles_.empty()); |
| 93 | 93 |
| 94 for (auto& it : profile_queues_) | 94 for (auto& it : profile_queues_) |
| 95 delete it.second; | 95 delete it.second; |
| 96 profile_queues_.clear(); | 96 profile_queues_.clear(); |
| 97 | 97 |
| 98 DBusThreadManager::Get()->GetBluetoothAdapterClient()->RemoveObserver(this); | 98 DBusThreadManager::Get()->GetBluetoothAdapterClient()->RemoveObserver(this); |
| 99 DBusThreadManager::Get()->GetBluetoothDeviceClient()->RemoveObserver(this); | 99 DBusThreadManager::Get()->GetBluetoothDeviceClient()->RemoveObserver(this); |
| 100 DBusThreadManager::Get()->GetBluetoothInputClient()->RemoveObserver(this); | 100 DBusThreadManager::Get()->GetBluetoothInputClient()->RemoveObserver(this); |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 scoped_ptr<device::BluetoothAdvertisement::Data> advertisement_data, | 317 scoped_ptr<device::BluetoothAdvertisement::Data> advertisement_data, |
| 318 const CreateAdvertisementCallback& callback, | 318 const CreateAdvertisementCallback& callback, |
| 319 const CreateAdvertisementErrorCallback& error_callback) { | 319 const CreateAdvertisementErrorCallback& error_callback) { |
| 320 scoped_refptr<BluetoothAdvertisementChromeOS> advertisement( | 320 scoped_refptr<BluetoothAdvertisementChromeOS> advertisement( |
| 321 new BluetoothAdvertisementChromeOS(advertisement_data.Pass(), this)); | 321 new BluetoothAdvertisementChromeOS(advertisement_data.Pass(), this)); |
| 322 advertisement->Register(base::Bind(callback, advertisement), error_callback); | 322 advertisement->Register(base::Bind(callback, advertisement), error_callback); |
| 323 } | 323 } |
| 324 | 324 |
| 325 void BluetoothAdapterChromeOS::RemovePairingDelegateInternal( | 325 void BluetoothAdapterChromeOS::RemovePairingDelegateInternal( |
| 326 BluetoothDevice::PairingDelegate* pairing_delegate) { | 326 BluetoothDevice::PairingDelegate* pairing_delegate) { |
| 327 // Before removing a pairing delegate make sure that there aren't any devices | 327 // Check if any device is using the pairing delegate. |
| 328 // currently using it; if there are, clear the pairing context which will | 328 // If so, clear the pairing context which will make any responses no-ops. |
| 329 // make any responses no-ops. | |
| 330 for (DevicesMap::iterator iter = devices_.begin(); | 329 for (DevicesMap::iterator iter = devices_.begin(); |
| 331 iter != devices_.end(); ++iter) { | 330 iter != devices_.end(); ++iter) { |
| 332 BluetoothDeviceChromeOS* device_chromeos = | 331 BluetoothDeviceChromeOS* device_chromeos = |
| 333 static_cast<BluetoothDeviceChromeOS*>(iter->second); | 332 static_cast<BluetoothDeviceChromeOS*>(iter->second); |
| 334 | 333 |
| 335 BluetoothPairingChromeOS* pairing = device_chromeos->GetPairing(); | 334 BluetoothPairingChromeOS* pairing = device_chromeos->GetPairing(); |
| 336 if (pairing && pairing->GetPairingDelegate() == pairing_delegate) | 335 if (pairing && pairing->GetPairingDelegate() == pairing_delegate) |
| 337 device_chromeos->EndPairing(); | 336 device_chromeos->EndPairing(); |
| 338 } | 337 } |
| 339 } | 338 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 355 const dbus::ObjectPath& object_path, | 354 const dbus::ObjectPath& object_path, |
| 356 const std::string& property_name) { | 355 const std::string& property_name) { |
| 357 if (object_path != object_path_) | 356 if (object_path != object_path_) |
| 358 return; | 357 return; |
| 359 DCHECK(IsPresent()); | 358 DCHECK(IsPresent()); |
| 360 | 359 |
| 361 BluetoothAdapterClient::Properties* properties = | 360 BluetoothAdapterClient::Properties* properties = |
| 362 DBusThreadManager::Get()->GetBluetoothAdapterClient()-> | 361 DBusThreadManager::Get()->GetBluetoothAdapterClient()-> |
| 363 GetProperties(object_path_); | 362 GetProperties(object_path_); |
| 364 | 363 |
| 365 if (property_name == properties->powered.name()) | 364 if (property_name == properties->powered.name()) { |
| 366 PoweredChanged(properties->powered.value()); | 365 PoweredChanged(properties->powered.value()); |
| 367 else if (property_name == properties->discoverable.name()) | 366 } else if (property_name == properties->discoverable.name()) { |
| 368 DiscoverableChanged(properties->discoverable.value()); | 367 DiscoverableChanged(properties->discoverable.value()); |
| 369 else if (property_name == properties->discovering.name()) | 368 } else if (property_name == properties->discovering.name()) { |
| 370 DiscoveringChanged(properties->discovering.value()); | 369 DiscoveringChanged(properties->discovering.value()); |
| 370 } |
| 371 } | 371 } |
| 372 | 372 |
| 373 void BluetoothAdapterChromeOS::DeviceAdded( | 373 void BluetoothAdapterChromeOS::DeviceAdded( |
| 374 const dbus::ObjectPath& object_path) { | 374 const dbus::ObjectPath& object_path) { |
| 375 DCHECK(DBusThreadManager::Get()); | 375 DCHECK(DBusThreadManager::Get()); |
| 376 BluetoothDeviceClient::Properties* properties = | 376 BluetoothDeviceClient::Properties* properties = |
| 377 DBusThreadManager::Get()->GetBluetoothDeviceClient()-> | 377 DBusThreadManager::Get()->GetBluetoothDeviceClient()-> |
| 378 GetProperties(object_path); | 378 GetProperties(object_path); |
| 379 if (!properties || properties->adapter.value() != object_path_) | 379 if (!properties || properties->adapter.value() != object_path_) |
| 380 return; | 380 return; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 GetProperties(object_path); | 422 GetProperties(object_path); |
| 423 | 423 |
| 424 if (property_name == properties->bluetooth_class.name() || | 424 if (property_name == properties->bluetooth_class.name() || |
| 425 property_name == properties->address.name() || | 425 property_name == properties->address.name() || |
| 426 property_name == properties->alias.name() || | 426 property_name == properties->alias.name() || |
| 427 property_name == properties->paired.name() || | 427 property_name == properties->paired.name() || |
| 428 property_name == properties->trusted.name() || | 428 property_name == properties->trusted.name() || |
| 429 property_name == properties->connected.name() || | 429 property_name == properties->connected.name() || |
| 430 property_name == properties->uuids.name() || | 430 property_name == properties->uuids.name() || |
| 431 property_name == properties->rssi.name() || | 431 property_name == properties->rssi.name() || |
| 432 property_name == properties->tx_power.name()) | 432 property_name == properties->tx_power.name()) { |
| 433 NotifyDeviceChanged(device_chromeos); | 433 NotifyDeviceChanged(device_chromeos); |
| 434 } |
| 434 | 435 |
| 435 // When a device becomes paired, mark it as trusted so that the user does | 436 // When a device becomes paired, mark it as trusted so that the user does |
| 436 // not need to approve every incoming connection | 437 // not need to approve every incoming connection |
| 437 if (property_name == properties->paired.name() && | 438 if (property_name == properties->paired.name() && |
| 438 properties->paired.value() && !properties->trusted.value()) | 439 properties->paired.value() && !properties->trusted.value()) { |
| 439 device_chromeos->SetTrusted(); | 440 device_chromeos->SetTrusted(); |
| 441 } |
| 440 | 442 |
| 441 // UMA connection counting | 443 // UMA connection counting |
| 442 if (property_name == properties->connected.name()) { | 444 if (property_name == properties->connected.name()) { |
| 443 // PlayStation joystick tries to reconnect after disconnection from USB. | 445 // PlayStation joystick tries to reconnect after disconnection from USB. |
| 444 // If it is still not trusted, set it, so it becomes available on the | 446 // If it is still not trusted, set it, so it becomes available on the |
| 445 // list of known devices. | 447 // list of known devices. |
| 446 if (properties->connected.value() && device_chromeos->IsTrustable() && | 448 if (properties->connected.value() && device_chromeos->IsTrustable() && |
| 447 !properties->trusted.value()) | 449 !properties->trusted.value()) |
| 448 device_chromeos->SetTrusted(); | 450 device_chromeos->SetTrusted(); |
| 449 | 451 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 466 if (!device_chromeos) | 468 if (!device_chromeos) |
| 467 return; | 469 return; |
| 468 | 470 |
| 469 BluetoothInputClient::Properties* properties = | 471 BluetoothInputClient::Properties* properties = |
| 470 DBusThreadManager::Get()->GetBluetoothInputClient()-> | 472 DBusThreadManager::Get()->GetBluetoothInputClient()-> |
| 471 GetProperties(object_path); | 473 GetProperties(object_path); |
| 472 | 474 |
| 473 // Properties structure can be removed, which triggers a change in the | 475 // Properties structure can be removed, which triggers a change in the |
| 474 // BluetoothDevice::IsConnectable() property, as does a change in the | 476 // BluetoothDevice::IsConnectable() property, as does a change in the |
| 475 // actual reconnect_mode property. | 477 // actual reconnect_mode property. |
| 476 if (!properties || | 478 if (!properties || property_name == properties->reconnect_mode.name()) { |
| 477 property_name == properties->reconnect_mode.name()) | |
| 478 NotifyDeviceChanged(device_chromeos); | 479 NotifyDeviceChanged(device_chromeos); |
| 480 } |
| 479 } | 481 } |
| 480 | 482 |
| 481 void BluetoothAdapterChromeOS::Released() { | 483 void BluetoothAdapterChromeOS::Released() { |
| 482 VLOG(1) << "Release"; | 484 VLOG(1) << "Release"; |
| 483 if (!IsPresent()) | 485 if (!IsPresent()) |
| 484 return; | 486 return; |
| 485 DCHECK(agent_.get()); | 487 DCHECK(agent_.get()); |
| 486 | 488 |
| 487 // Called after we unregister the pairing agent, e.g. when changing I/O | 489 // Called after we unregister the pairing agent, e.g. when changing I/O |
| 488 // capabilities. Nothing much to be done right now. | 490 // capabilities. Nothing much to be done right now. |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 return; | 668 return; |
| 667 } | 669 } |
| 668 DCHECK(audio_sink.get()); | 670 DCHECK(audio_sink.get()); |
| 669 callback.Run(audio_sink); | 671 callback.Run(audio_sink); |
| 670 } | 672 } |
| 671 | 673 |
| 672 BluetoothDeviceChromeOS* | 674 BluetoothDeviceChromeOS* |
| 673 BluetoothAdapterChromeOS::GetDeviceWithPath( | 675 BluetoothAdapterChromeOS::GetDeviceWithPath( |
| 674 const dbus::ObjectPath& object_path) { | 676 const dbus::ObjectPath& object_path) { |
| 675 if (!IsPresent()) | 677 if (!IsPresent()) |
| 676 return NULL; | 678 return nullptr; |
| 677 | 679 |
| 678 for (DevicesMap::iterator iter = devices_.begin(); iter != devices_.end(); | 680 for (DevicesMap::iterator iter = devices_.begin(); iter != devices_.end(); |
| 679 ++iter) { | 681 ++iter) { |
| 680 BluetoothDeviceChromeOS* device_chromeos = | 682 BluetoothDeviceChromeOS* device_chromeos = |
| 681 static_cast<BluetoothDeviceChromeOS*>(iter->second); | 683 static_cast<BluetoothDeviceChromeOS*>(iter->second); |
| 682 if (device_chromeos->object_path() == object_path) | 684 if (device_chromeos->object_path() == object_path) |
| 683 return device_chromeos; | 685 return device_chromeos; |
| 684 } | 686 } |
| 685 | 687 |
| 686 return NULL; | 688 return nullptr; |
| 687 } | 689 } |
| 688 | 690 |
| 689 BluetoothPairingChromeOS* BluetoothAdapterChromeOS::GetPairing( | 691 BluetoothPairingChromeOS* BluetoothAdapterChromeOS::GetPairing( |
| 690 const dbus::ObjectPath& object_path) { | 692 const dbus::ObjectPath& object_path) { |
| 691 DCHECK(IsPresent()); | 693 DCHECK(IsPresent()); |
| 692 BluetoothDeviceChromeOS* device_chromeos = GetDeviceWithPath(object_path); | 694 BluetoothDeviceChromeOS* device_chromeos = GetDeviceWithPath(object_path); |
| 693 if (!device_chromeos) { | 695 if (!device_chromeos) { |
| 694 LOG(WARNING) << "Pairing Agent request for unknown device: " | 696 LOG(WARNING) << "Pairing Agent request for unknown device: " |
| 695 << object_path.value(); | 697 << object_path.value(); |
| 696 return NULL; | 698 return nullptr; |
| 697 } | 699 } |
| 698 | 700 |
| 699 BluetoothPairingChromeOS* pairing = device_chromeos->GetPairing(); | 701 BluetoothPairingChromeOS* pairing = device_chromeos->GetPairing(); |
| 700 if (pairing) | 702 if (pairing) |
| 701 return pairing; | 703 return pairing; |
| 702 | 704 |
| 703 // The device doesn't have its own pairing context, so this is an incoming | 705 // The device doesn't have its own pairing context, so this is an incoming |
| 704 // pairing request that should use our best default delegate (if we have one). | 706 // pairing request that should use our best default delegate (if we have one). |
| 705 BluetoothDevice::PairingDelegate* pairing_delegate = DefaultPairingDelegate(); | 707 BluetoothDevice::PairingDelegate* pairing_delegate = DefaultPairingDelegate(); |
| 706 if (!pairing_delegate) | 708 if (!pairing_delegate) |
| 707 return NULL; | 709 return nullptr; |
| 708 | 710 |
| 709 return device_chromeos->BeginPairing(pairing_delegate); | 711 return device_chromeos->BeginPairing(pairing_delegate); |
| 710 } | 712 } |
| 711 | 713 |
| 712 void BluetoothAdapterChromeOS::SetAdapter(const dbus::ObjectPath& object_path) { | 714 void BluetoothAdapterChromeOS::SetAdapter(const dbus::ObjectPath& object_path) { |
| 713 DCHECK(!IsPresent()); | 715 DCHECK(!IsPresent()); |
| 714 DCHECK(!dbus_is_shutdown_); | 716 DCHECK(!dbus_is_shutdown_); |
| 715 object_path_ = object_path; | 717 object_path_ = object_path; |
| 716 | 718 |
| 717 VLOG(1) << object_path_.value() << ": using adapter."; | 719 VLOG(1) << object_path_.value() << ": using adapter."; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 void BluetoothAdapterChromeOS::DiscoverableChanged(bool discoverable) { | 808 void BluetoothAdapterChromeOS::DiscoverableChanged(bool discoverable) { |
| 807 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 809 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
| 808 AdapterDiscoverableChanged(this, discoverable)); | 810 AdapterDiscoverableChanged(this, discoverable)); |
| 809 } | 811 } |
| 810 | 812 |
| 811 void BluetoothAdapterChromeOS::DiscoveringChanged( | 813 void BluetoothAdapterChromeOS::DiscoveringChanged( |
| 812 bool discovering) { | 814 bool discovering) { |
| 813 // If the adapter stopped discovery due to a reason other than a request by | 815 // If the adapter stopped discovery due to a reason other than a request by |
| 814 // us, reset the count to 0. | 816 // us, reset the count to 0. |
| 815 VLOG(1) << "Discovering changed: " << discovering; | 817 VLOG(1) << "Discovering changed: " << discovering; |
| 816 if (!discovering && !discovery_request_pending_ | 818 if (!discovering && !discovery_request_pending_ && |
| 817 && num_discovery_sessions_ > 0) { | 819 num_discovery_sessions_ > 0) { |
| 818 VLOG(1) << "Marking sessions as inactive."; | 820 VLOG(1) << "Marking sessions as inactive."; |
| 819 num_discovery_sessions_ = 0; | 821 num_discovery_sessions_ = 0; |
| 820 MarkDiscoverySessionsAsInactive(); | 822 MarkDiscoverySessionsAsInactive(); |
| 821 } | 823 } |
| 822 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 824 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
| 823 AdapterDiscoveringChanged(this, discovering)); | 825 AdapterDiscoveringChanged(this, discovering)); |
| 824 } | 826 } |
| 825 | 827 |
| 826 void BluetoothAdapterChromeOS::PresentChanged(bool present) { | 828 void BluetoothAdapterChromeOS::PresentChanged(bool present) { |
| 827 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 829 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
| 828 AdapterPresentChanged(this, present)); | 830 AdapterPresentChanged(this, present)); |
| 829 } | 831 } |
| 830 | 832 |
| 831 void BluetoothAdapterChromeOS::NotifyDeviceChanged( | 833 void BluetoothAdapterChromeOS::NotifyDeviceChanged( |
| 832 BluetoothDeviceChromeOS* device) { | 834 BluetoothDeviceChromeOS* device) { |
| 835 DCHECK(device); |
| 833 DCHECK(device->adapter_ == this); | 836 DCHECK(device->adapter_ == this); |
| 834 | 837 |
| 835 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 838 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
| 836 DeviceChanged(this, device)); | 839 DeviceChanged(this, device)); |
| 837 } | 840 } |
| 838 | 841 |
| 839 void BluetoothAdapterChromeOS::NotifyGattServiceAdded( | 842 void BluetoothAdapterChromeOS::NotifyGattServiceAdded( |
| 840 BluetoothRemoteGattServiceChromeOS* service) { | 843 BluetoothRemoteGattServiceChromeOS* service) { |
| 841 DCHECK_EQ(service->GetAdapter(), this); | 844 DCHECK_EQ(service->GetAdapter(), this); |
| 842 DCHECK_EQ( | 845 DCHECK_EQ( |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1071 base::Bind(&BluetoothAdapterChromeOS::OnPropertyChangeCompleted, | 1074 base::Bind(&BluetoothAdapterChromeOS::OnPropertyChangeCompleted, |
| 1072 weak_ptr_factory_.GetWeakPtr(), | 1075 weak_ptr_factory_.GetWeakPtr(), |
| 1073 callback, | 1076 callback, |
| 1074 error_callback)); | 1077 error_callback)); |
| 1075 } | 1078 } |
| 1076 | 1079 |
| 1077 void BluetoothAdapterChromeOS::OnPropertyChangeCompleted( | 1080 void BluetoothAdapterChromeOS::OnPropertyChangeCompleted( |
| 1078 const base::Closure& callback, | 1081 const base::Closure& callback, |
| 1079 const ErrorCallback& error_callback, | 1082 const ErrorCallback& error_callback, |
| 1080 bool success) { | 1083 bool success) { |
| 1081 if (IsPresent() && success) | 1084 if (IsPresent() && success) { |
| 1082 callback.Run(); | 1085 callback.Run(); |
| 1083 else | 1086 } else { |
| 1084 error_callback.Run(); | 1087 error_callback.Run(); |
| 1088 } |
| 1085 } | 1089 } |
| 1086 | 1090 |
| 1087 void BluetoothAdapterChromeOS::AddDiscoverySession( | 1091 void BluetoothAdapterChromeOS::AddDiscoverySession( |
| 1088 BluetoothDiscoveryFilter* discovery_filter, | 1092 BluetoothDiscoveryFilter* discovery_filter, |
| 1089 const base::Closure& callback, | 1093 const base::Closure& callback, |
| 1090 const ErrorCallback& error_callback) { | 1094 const ErrorCallback& error_callback) { |
| 1091 if (!IsPresent()) { | 1095 if (!IsPresent()) { |
| 1092 error_callback.Run(); | 1096 error_callback.Run(); |
| 1093 return; | 1097 return; |
| 1094 } | 1098 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1124 scoped_ptr<BluetoothDiscoveryFilter> df(new BluetoothDiscoveryFilter( | 1128 scoped_ptr<BluetoothDiscoveryFilter> df(new BluetoothDiscoveryFilter( |
| 1125 BluetoothDiscoveryFilter::Transport::TRANSPORT_DUAL)); | 1129 BluetoothDiscoveryFilter::Transport::TRANSPORT_DUAL)); |
| 1126 df->CopyFrom(*discovery_filter); | 1130 df->CopyFrom(*discovery_filter); |
| 1127 SetDiscoveryFilter( | 1131 SetDiscoveryFilter( |
| 1128 df.Pass(), | 1132 df.Pass(), |
| 1129 base::Bind(&BluetoothAdapterChromeOS::OnPreSetDiscoveryFilter, | 1133 base::Bind(&BluetoothAdapterChromeOS::OnPreSetDiscoveryFilter, |
| 1130 weak_ptr_factory_.GetWeakPtr(), callback, error_callback), | 1134 weak_ptr_factory_.GetWeakPtr(), callback, error_callback), |
| 1131 base::Bind(&BluetoothAdapterChromeOS::OnPreSetDiscoveryFilterError, | 1135 base::Bind(&BluetoothAdapterChromeOS::OnPreSetDiscoveryFilterError, |
| 1132 weak_ptr_factory_.GetWeakPtr(), callback, error_callback)); | 1136 weak_ptr_factory_.GetWeakPtr(), callback, error_callback)); |
| 1133 return; | 1137 return; |
| 1134 } else | 1138 } else { |
| 1135 current_filter_.reset(); | 1139 current_filter_.reset(); |
| 1140 } |
| 1136 | 1141 |
| 1137 // This is the first request to start device discovery. | 1142 // This is the first request to start device discovery. |
| 1138 discovery_request_pending_ = true; | 1143 discovery_request_pending_ = true; |
| 1139 DBusThreadManager::Get()->GetBluetoothAdapterClient()->StartDiscovery( | 1144 DBusThreadManager::Get()->GetBluetoothAdapterClient()->StartDiscovery( |
| 1140 object_path_, | 1145 object_path_, |
| 1141 base::Bind(&BluetoothAdapterChromeOS::OnStartDiscovery, | 1146 base::Bind(&BluetoothAdapterChromeOS::OnStartDiscovery, |
| 1142 weak_ptr_factory_.GetWeakPtr(), callback, error_callback), | 1147 weak_ptr_factory_.GetWeakPtr(), callback, error_callback), |
| 1143 base::Bind(&BluetoothAdapterChromeOS::OnStartDiscoveryError, | 1148 base::Bind(&BluetoothAdapterChromeOS::OnStartDiscoveryError, |
| 1144 weak_ptr_factory_.GetWeakPtr(), callback, error_callback)); | 1149 weak_ptr_factory_.GetWeakPtr(), callback, error_callback)); |
| 1145 } | 1150 } |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 | 1274 |
| 1270 void BluetoothAdapterChromeOS::OnStartDiscovery( | 1275 void BluetoothAdapterChromeOS::OnStartDiscovery( |
| 1271 const base::Closure& callback, | 1276 const base::Closure& callback, |
| 1272 const ErrorCallback& error_callback) { | 1277 const ErrorCallback& error_callback) { |
| 1273 // Report success on the original request and increment the count. | 1278 // Report success on the original request and increment the count. |
| 1274 VLOG(1) << __func__; | 1279 VLOG(1) << __func__; |
| 1275 DCHECK(discovery_request_pending_); | 1280 DCHECK(discovery_request_pending_); |
| 1276 DCHECK_EQ(num_discovery_sessions_, 0); | 1281 DCHECK_EQ(num_discovery_sessions_, 0); |
| 1277 discovery_request_pending_ = false; | 1282 discovery_request_pending_ = false; |
| 1278 num_discovery_sessions_++; | 1283 num_discovery_sessions_++; |
| 1279 if (IsPresent()) | 1284 if (IsPresent()) { |
| 1280 callback.Run(); | 1285 callback.Run(); |
| 1281 else | 1286 } else { |
| 1282 error_callback.Run(); | 1287 error_callback.Run(); |
| 1288 } |
| 1283 | 1289 |
| 1284 // Try to add a new discovery session for each queued request. | 1290 // Try to add a new discovery session for each queued request. |
| 1285 ProcessQueuedDiscoveryRequests(); | 1291 ProcessQueuedDiscoveryRequests(); |
| 1286 } | 1292 } |
| 1287 | 1293 |
| 1288 void BluetoothAdapterChromeOS::OnStartDiscoveryError( | 1294 void BluetoothAdapterChromeOS::OnStartDiscoveryError( |
| 1289 const base::Closure& callback, | 1295 const base::Closure& callback, |
| 1290 const ErrorCallback& error_callback, | 1296 const ErrorCallback& error_callback, |
| 1291 const std::string& error_name, | 1297 const std::string& error_name, |
| 1292 const std::string& error_message) { | 1298 const std::string& error_message) { |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 | 1382 |
| 1377 // Try to add a new discovery session for each queued request. | 1383 // Try to add a new discovery session for each queued request. |
| 1378 ProcessQueuedDiscoveryRequests(); | 1384 ProcessQueuedDiscoveryRequests(); |
| 1379 } | 1385 } |
| 1380 | 1386 |
| 1381 void BluetoothAdapterChromeOS::OnSetDiscoveryFilter( | 1387 void BluetoothAdapterChromeOS::OnSetDiscoveryFilter( |
| 1382 const base::Closure& callback, | 1388 const base::Closure& callback, |
| 1383 const ErrorCallback& error_callback) { | 1389 const ErrorCallback& error_callback) { |
| 1384 // Report success on the original request and increment the count. | 1390 // Report success on the original request and increment the count. |
| 1385 VLOG(1) << __func__; | 1391 VLOG(1) << __func__; |
| 1386 if (IsPresent()) | 1392 if (IsPresent()) { |
| 1387 callback.Run(); | 1393 callback.Run(); |
| 1388 else | 1394 } else { |
| 1389 error_callback.Run(); | 1395 error_callback.Run(); |
| 1396 } |
| 1390 } | 1397 } |
| 1391 | 1398 |
| 1392 void BluetoothAdapterChromeOS::OnSetDiscoveryFilterError( | 1399 void BluetoothAdapterChromeOS::OnSetDiscoveryFilterError( |
| 1393 const base::Closure& callback, | 1400 const base::Closure& callback, |
| 1394 const ErrorCallback& error_callback, | 1401 const ErrorCallback& error_callback, |
| 1395 const std::string& error_name, | 1402 const std::string& error_name, |
| 1396 const std::string& error_message) { | 1403 const std::string& error_message) { |
| 1397 LOG(WARNING) << object_path_.value() | 1404 LOG(WARNING) << object_path_.value() |
| 1398 << ": Failed to set discovery filter: " << error_name << ": " | 1405 << ": Failed to set discovery filter: " << error_name << ": " |
| 1399 << error_message; | 1406 << error_message; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1414 | 1421 |
| 1415 // If the queued request resulted in a pending call, then let it | 1422 // If the queued request resulted in a pending call, then let it |
| 1416 // asynchonously process the remaining queued requests once the pending | 1423 // asynchonously process the remaining queued requests once the pending |
| 1417 // call returns. | 1424 // call returns. |
| 1418 if (discovery_request_pending_) | 1425 if (discovery_request_pending_) |
| 1419 return; | 1426 return; |
| 1420 } | 1427 } |
| 1421 } | 1428 } |
| 1422 | 1429 |
| 1423 } // namespace chromeos | 1430 } // namespace chromeos |
| OLD | NEW |