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

Side by Side Diff: device/bluetooth/bluez/bluetooth_adapter_bluez.cc

Issue 2606823002: Remove base::ScopedPtrHashMap from device/. (Closed)
Patch Set: one last fix Created 3 years, 11 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 "device/bluetooth/bluez/bluetooth_adapter_bluez.h" 5 #include "device/bluetooth/bluez/bluetooth_adapter_bluez.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstdint> 8 #include <cstdint>
9 #include <limits> 9 #include <limits>
10 #include <memory> 10 #include <memory>
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 14
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/location.h" 16 #include "base/location.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/memory/ptr_util.h"
18 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
19 #include "base/sequenced_task_runner.h" 20 #include "base/sequenced_task_runner.h"
20 #include "base/single_thread_task_runner.h" 21 #include "base/single_thread_task_runner.h"
21 #include "base/strings/stringprintf.h" 22 #include "base/strings/stringprintf.h"
22 #include "base/threading/thread_task_runner_handle.h" 23 #include "base/threading/thread_task_runner_handle.h"
23 #include "base/time/time.h" 24 #include "base/time/time.h"
24 #include "build/build_config.h" 25 #include "build/build_config.h"
25 #include "device/bluetooth/bluetooth_common.h" 26 #include "device/bluetooth/bluetooth_common.h"
26 #include "device/bluetooth/bluetooth_device.h" 27 #include "device/bluetooth/bluetooth_device.h"
27 #include "device/bluetooth/bluetooth_discovery_session_outcome.h" 28 #include "device/bluetooth/bluetooth_discovery_session_outcome.h"
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 const std::string& identifier) const { 503 const std::string& identifier) const {
503 const auto& service = owned_gatt_services_.find(dbus::ObjectPath(identifier)); 504 const auto& service = owned_gatt_services_.find(dbus::ObjectPath(identifier));
504 return service == owned_gatt_services_.end() ? nullptr 505 return service == owned_gatt_services_.end() ? nullptr
505 : service->second.get(); 506 : service->second.get();
506 } 507 }
507 508
508 void BluetoothAdapterBlueZ::RemovePairingDelegateInternal( 509 void BluetoothAdapterBlueZ::RemovePairingDelegateInternal(
509 BluetoothDevice::PairingDelegate* pairing_delegate) { 510 BluetoothDevice::PairingDelegate* pairing_delegate) {
510 // Check if any device is using the pairing delegate. 511 // Check if any device is using the pairing delegate.
511 // If so, clear the pairing context which will make any responses no-ops. 512 // If so, clear the pairing context which will make any responses no-ops.
512 for (DevicesMap::const_iterator iter = devices_.begin(); 513 for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
513 iter != devices_.end(); ++iter) {
514 BluetoothDeviceBlueZ* device_bluez = 514 BluetoothDeviceBlueZ* device_bluez =
515 static_cast<BluetoothDeviceBlueZ*>(iter->second); 515 static_cast<BluetoothDeviceBlueZ*>(iter->second.get());
516 516
517 BluetoothPairingBlueZ* pairing = device_bluez->GetPairing(); 517 BluetoothPairingBlueZ* pairing = device_bluez->GetPairing();
518 if (pairing && pairing->GetPairingDelegate() == pairing_delegate) 518 if (pairing && pairing->GetPairingDelegate() == pairing_delegate)
519 device_bluez->EndPairing(); 519 device_bluez->EndPairing();
520 } 520 }
521 } 521 }
522 522
523 void BluetoothAdapterBlueZ::AdapterAdded(const dbus::ObjectPath& object_path) { 523 void BluetoothAdapterBlueZ::AdapterAdded(const dbus::ObjectPath& object_path) {
524 // Set the adapter to the newly added adapter only if no adapter is present. 524 // Set the adapter to the newly added adapter only if no adapter is present.
525 if (!IsPresent()) 525 if (!IsPresent())
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties( 559 bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties(
560 object_path); 560 object_path);
561 if (!properties || properties->adapter.value() != object_path_) 561 if (!properties || properties->adapter.value() != object_path_)
562 return; 562 return;
563 DCHECK(IsPresent()); 563 DCHECK(IsPresent());
564 564
565 BluetoothDeviceBlueZ* device_bluez = new BluetoothDeviceBlueZ( 565 BluetoothDeviceBlueZ* device_bluez = new BluetoothDeviceBlueZ(
566 this, object_path, ui_task_runner_, socket_thread_); 566 this, object_path, ui_task_runner_, socket_thread_);
567 DCHECK(devices_.find(device_bluez->GetAddress()) == devices_.end()); 567 DCHECK(devices_.find(device_bluez->GetAddress()) == devices_.end());
568 568
569 devices_.set(device_bluez->GetAddress(), 569 devices_[device_bluez->GetAddress()] = base::WrapUnique(device_bluez);
570 std::unique_ptr<BluetoothDevice>(device_bluez));
571 570
572 for (auto& observer : observers_) 571 for (auto& observer : observers_)
573 observer.DeviceAdded(this, device_bluez); 572 observer.DeviceAdded(this, device_bluez);
574 } 573 }
575 574
576 void BluetoothAdapterBlueZ::DeviceRemoved(const dbus::ObjectPath& object_path) { 575 void BluetoothAdapterBlueZ::DeviceRemoved(const dbus::ObjectPath& object_path) {
577 for (DevicesMap::const_iterator iter = devices_.begin(); 576 for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
578 iter != devices_.end(); ++iter) {
579 BluetoothDeviceBlueZ* device_bluez = 577 BluetoothDeviceBlueZ* device_bluez =
580 static_cast<BluetoothDeviceBlueZ*>(iter->second); 578 static_cast<BluetoothDeviceBlueZ*>(iter->second.get());
581 if (device_bluez->object_path() == object_path) { 579 if (device_bluez->object_path() == object_path) {
582 std::unique_ptr<BluetoothDevice> scoped_device = 580 std::unique_ptr<BluetoothDevice> scoped_device = std::move(iter->second);
583 devices_.take_and_erase(iter->first); 581 devices_.erase(iter);
584 582
585 for (auto& observer : observers_) 583 for (auto& observer : observers_)
586 observer.DeviceRemoved(this, device_bluez); 584 observer.DeviceRemoved(this, device_bluez);
587 return; 585 return;
588 } 586 }
589 } 587 }
590 } 588 }
591 589
592 void BluetoothAdapterBlueZ::DevicePropertyChanged( 590 void BluetoothAdapterBlueZ::DevicePropertyChanged(
593 const dbus::ObjectPath& object_path, 591 const dbus::ObjectPath& object_path,
594 const std::string& property_name) { 592 const std::string& property_name) {
595 BluetoothDeviceBlueZ* device_bluez = GetDeviceWithPath(object_path); 593 BluetoothDeviceBlueZ* device_bluez = GetDeviceWithPath(object_path);
596 if (!device_bluez) 594 if (!device_bluez)
597 return; 595 return;
598 596
599 bluez::BluetoothDeviceClient::Properties* properties = 597 bluez::BluetoothDeviceClient::Properties* properties =
600 bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties( 598 bluez::BluezDBusManager::Get()->GetBluetoothDeviceClient()->GetProperties(
601 object_path); 599 object_path);
602 600
603 if (property_name == properties->address.name()) { 601 if (property_name == properties->address.name()) {
604 for (DevicesMap::iterator iter = devices_.begin(); iter != devices_.end(); 602 for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
605 ++iter) {
606 if (iter->second->GetAddress() == device_bluez->GetAddress()) { 603 if (iter->second->GetAddress() == device_bluez->GetAddress()) {
607 std::string old_address = iter->first; 604 std::string old_address = iter->first;
608 VLOG(1) << "Device changed address, old: " << old_address 605 VLOG(1) << "Device changed address, old: " << old_address
609 << " new: " << device_bluez->GetAddress(); 606 << " new: " << device_bluez->GetAddress();
610 std::unique_ptr<BluetoothDevice> scoped_device = 607 std::unique_ptr<BluetoothDevice> scoped_device =
611 devices_.take_and_erase(iter); 608 std::move(iter->second);
612 ignore_result(scoped_device.release()); 609 devices_.erase(iter);
613 610
614 DCHECK(devices_.find(device_bluez->GetAddress()) == devices_.end()); 611 DCHECK(devices_.find(device_bluez->GetAddress()) == devices_.end());
615 devices_.set(device_bluez->GetAddress(), 612 devices_[device_bluez->GetAddress()] = std::move(scoped_device);
616 std::unique_ptr<BluetoothDevice>(device_bluez));
617 NotifyDeviceAddressChanged(device_bluez, old_address); 613 NotifyDeviceAddressChanged(device_bluez, old_address);
618 break; 614 break;
619 } 615 }
620 } 616 }
621 } 617 }
622 618
623 if (property_name == properties->service_data.name()) 619 if (property_name == properties->service_data.name())
624 device_bluez->UpdateServiceData(); 620 device_bluez->UpdateServiceData();
625 else if (property_name == properties->manufacturer_data.name()) 621 else if (property_name == properties->manufacturer_data.name())
626 device_bluez->UpdateManufacturerData(); 622 device_bluez->UpdateManufacturerData();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 // PlayStation joystick tries to reconnect after disconnection from USB. 659 // PlayStation joystick tries to reconnect after disconnection from USB.
664 // If it is still not trusted, set it, so it becomes available on the 660 // If it is still not trusted, set it, so it becomes available on the
665 // list of known devices. 661 // list of known devices.
666 if (properties->connected.value()) { 662 if (properties->connected.value()) {
667 if (device_bluez->IsTrustable() && !properties->trusted.value()) 663 if (device_bluez->IsTrustable() && !properties->trusted.value())
668 device_bluez->SetTrusted(); 664 device_bluez->SetTrusted();
669 } 665 }
670 666
671 int count = 0; 667 int count = 0;
672 668
673 for (DevicesMap::const_iterator iter = devices_.begin(); 669 for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
674 iter != devices_.end(); ++iter) {
675 if (iter->second->IsPaired() && iter->second->IsConnected()) 670 if (iter->second->IsPaired() && iter->second->IsConnected())
676 ++count; 671 ++count;
677 } 672 }
678 673
679 UMA_HISTOGRAM_COUNTS_100("Bluetooth.ConnectedDeviceCount", count); 674 UMA_HISTOGRAM_COUNTS_100("Bluetooth.ConnectedDeviceCount", count);
680 } 675 }
681 } 676 }
682 677
683 void BluetoothAdapterBlueZ::InputPropertyChanged( 678 void BluetoothAdapterBlueZ::InputPropertyChanged(
684 const dbus::ObjectPath& object_path, 679 const dbus::ObjectPath& object_path,
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 object_path_, handle, callback, 891 object_path_, handle, callback,
897 base::Bind(&BluetoothAdapterBlueZ::ServiceRecordErrorConnector, 892 base::Bind(&BluetoothAdapterBlueZ::ServiceRecordErrorConnector,
898 weak_ptr_factory_.GetWeakPtr(), error_callback)); 893 weak_ptr_factory_.GetWeakPtr(), error_callback));
899 } 894 }
900 895
901 BluetoothDeviceBlueZ* BluetoothAdapterBlueZ::GetDeviceWithPath( 896 BluetoothDeviceBlueZ* BluetoothAdapterBlueZ::GetDeviceWithPath(
902 const dbus::ObjectPath& object_path) { 897 const dbus::ObjectPath& object_path) {
903 if (!IsPresent()) 898 if (!IsPresent())
904 return nullptr; 899 return nullptr;
905 900
906 for (DevicesMap::const_iterator iter = devices_.begin(); 901 for (auto iter = devices_.begin(); iter != devices_.end(); ++iter) {
907 iter != devices_.end(); ++iter) {
908 BluetoothDeviceBlueZ* device_bluez = 902 BluetoothDeviceBlueZ* device_bluez =
909 static_cast<BluetoothDeviceBlueZ*>(iter->second); 903 static_cast<BluetoothDeviceBlueZ*>(iter->second.get());
910 if (device_bluez->object_path() == object_path) 904 if (device_bluez->object_path() == object_path)
911 return device_bluez; 905 return device_bluez;
912 } 906 }
913 907
914 return nullptr; 908 return nullptr;
915 } 909 }
916 910
917 BluetoothPairingBlueZ* BluetoothAdapterBlueZ::GetPairing( 911 BluetoothPairingBlueZ* BluetoothAdapterBlueZ::GetPairing(
918 const dbus::ObjectPath& object_path) { 912 const dbus::ObjectPath& object_path) {
919 DCHECK(IsPresent()); 913 DCHECK(IsPresent());
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 DiscoveringChanged(false); 1028 DiscoveringChanged(false);
1035 1029
1036 // Move all elements of the original devices list to a new list here, 1030 // Move all elements of the original devices list to a new list here,
1037 // leaving the original list empty so that when we send DeviceRemoved(), 1031 // leaving the original list empty so that when we send DeviceRemoved(),
1038 // GetDevices() returns no devices. 1032 // GetDevices() returns no devices.
1039 DevicesMap devices_swapped; 1033 DevicesMap devices_swapped;
1040 devices_swapped.swap(devices_); 1034 devices_swapped.swap(devices_);
1041 1035
1042 for (auto& iter : devices_swapped) { 1036 for (auto& iter : devices_swapped) {
1043 for (auto& observer : observers_) 1037 for (auto& observer : observers_)
1044 observer.DeviceRemoved(this, iter.second); 1038 observer.DeviceRemoved(this, iter.second.get());
1045 } 1039 }
1046 1040
1047 PresentChanged(false); 1041 PresentChanged(false);
1048 } 1042 }
1049 1043
1050 void BluetoothAdapterBlueZ::DiscoverableChanged(bool discoverable) { 1044 void BluetoothAdapterBlueZ::DiscoverableChanged(bool discoverable) {
1051 for (auto& observer : observers_) 1045 for (auto& observer : observers_)
1052 observer.AdapterDiscoverableChanged(this, discoverable); 1046 observer.AdapterDiscoverableChanged(this, discoverable);
1053 } 1047 }
1054 1048
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
1734 } else if (error_name == bluetooth_adapter::kErrorAlreadyExists) { 1728 } else if (error_name == bluetooth_adapter::kErrorAlreadyExists) {
1735 code = BluetoothServiceRecordBlueZ::ErrorCode::ERROR_RECORD_ALREADY_EXISTS; 1729 code = BluetoothServiceRecordBlueZ::ErrorCode::ERROR_RECORD_ALREADY_EXISTS;
1736 } else if (error_name == bluetooth_adapter::kErrorNotReady) { 1730 } else if (error_name == bluetooth_adapter::kErrorNotReady) {
1737 code = BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY; 1731 code = BluetoothServiceRecordBlueZ::ErrorCode::ERROR_ADAPTER_NOT_READY;
1738 } 1732 }
1739 1733
1740 error_callback.Run(code); 1734 error_callback.Run(code);
1741 } 1735 }
1742 1736
1743 } // namespace bluez 1737 } // namespace bluez
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698