Commit e3856d46 authored by Ryan Hansberry's avatar Ryan Hansberry Committed by Commit Bot

[Bluetooth] Convert mojom::AdapterClient to mojom::AdapterObserver.

Rename AdapterClient to AdapterObserver to reflect its behavior: as an
observer of Bluetooth changes. Also switch from a single Remote pattern
to a ReceiverSet, allowing Adapter to notify own and notify multiple
AdapterObservers.

This is necessary for future Nearby Connections use, where both
BleMedium and BluetoothClassicMedium will listen on a single
injected Adapter -- see subsequent CL crrev.com/c/2370094.

Bug: b:157748957
Change-Id: If241b76f1662614b1f6061d93b9293e703b58691
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2311824Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Ryan Hansberry <hansberry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801608}
parent be728e56
...@@ -28,21 +28,21 @@ cr.define('adapter_broker', function() { ...@@ -28,21 +28,21 @@ cr.define('adapter_broker', function() {
/** /**
* The proxy class of an adapter and router of adapter events. * The proxy class of an adapter and router of adapter events.
* Exposes an EventTarget interface that allows other object to subscribe to * Exposes an EventTarget interface that allows other object to subscribe to
* to specific AdapterClient events. * to specific AdapterObserver events.
* Provides remote access to Adapter functions. Converts parameters to Mojo * Provides remote access to Adapter functions. Converts parameters to Mojo
* handles and back when necessary. * handles and back when necessary.
* *
* @implements {bluetooth.mojom.AdapterClientInterface} * @implements {bluetooth.mojom.AdapterObserverInterface}
*/ */
class AdapterBroker extends cr.EventTarget { class AdapterBroker extends cr.EventTarget {
/** @param {!AdapterRemote} adapter */ /** @param {!AdapterRemote} adapter */
constructor(adapter) { constructor(adapter) {
super(); super();
this.adapterClientReceiver_ = this.adapterObserverReceiver_ =
new bluetooth.mojom.AdapterClientReceiver(this); new bluetooth.mojom.AdapterObserverReceiver(this);
this.adapter_ = adapter; this.adapter_ = adapter;
this.adapter_.setClient( this.adapter_.addObserver(
this.adapterClientReceiver_.$.bindNewPipeAndPassRemote()); this.adapterObserverReceiver_.$.bindNewPipeAndPassRemote());
} }
presentChanged(present) { presentChanged(present) {
......
...@@ -20,7 +20,7 @@ BluetoothClassicMedium::~BluetoothClassicMedium() = default; ...@@ -20,7 +20,7 @@ BluetoothClassicMedium::~BluetoothClassicMedium() = default;
bool BluetoothClassicMedium::StartDiscovery( bool BluetoothClassicMedium::StartDiscovery(
DiscoveryCallback discovery_callback) { DiscoveryCallback discovery_callback) {
if (adapter_client_.is_bound() && discovery_callback_ && if (adapter_observer_.is_bound() && discovery_callback_ &&
discovery_session_.is_bound()) { discovery_session_.is_bound()) {
return true; return true;
} }
...@@ -29,9 +29,9 @@ bool BluetoothClassicMedium::StartDiscovery( ...@@ -29,9 +29,9 @@ bool BluetoothClassicMedium::StartDiscovery(
discovered_bluetooth_devices_map_.clear(); discovered_bluetooth_devices_map_.clear();
bool success = bool success =
adapter_->SetClient(adapter_client_.BindNewPipeAndPassRemote()); adapter_->AddObserver(adapter_observer_.BindNewPipeAndPassRemote());
if (!success) { if (!success) {
adapter_client_.reset(); adapter_observer_.reset();
return false; return false;
} }
...@@ -39,7 +39,7 @@ bool BluetoothClassicMedium::StartDiscovery( ...@@ -39,7 +39,7 @@ bool BluetoothClassicMedium::StartDiscovery(
success = adapter_->StartDiscoverySession(&discovery_session); success = adapter_->StartDiscoverySession(&discovery_session);
if (!success || !discovery_session.is_valid()) { if (!success || !discovery_session.is_valid()) {
adapter_client_.reset(); adapter_observer_.reset();
return false; return false;
} }
...@@ -63,7 +63,7 @@ bool BluetoothClassicMedium::StopDiscovery() { ...@@ -63,7 +63,7 @@ bool BluetoothClassicMedium::StopDiscovery() {
stop_discovery_success = stop_discovery_success && message_success; stop_discovery_success = stop_discovery_success && message_success;
} }
adapter_client_.reset(); adapter_observer_.reset();
discovery_callback_.reset(); discovery_callback_.reset();
discovery_session_.reset(); discovery_session_.reset();
...@@ -142,7 +142,7 @@ void BluetoothClassicMedium::DiscoveringChanged(bool discovering) { ...@@ -142,7 +142,7 @@ void BluetoothClassicMedium::DiscoveringChanged(bool discovering) {
void BluetoothClassicMedium::DeviceAdded( void BluetoothClassicMedium::DeviceAdded(
bluetooth::mojom::DeviceInfoPtr device) { bluetooth::mojom::DeviceInfoPtr device) {
if (!adapter_client_.is_bound() || !discovery_callback_ || if (!adapter_observer_.is_bound() || !discovery_callback_ ||
!discovery_session_.is_bound()) { !discovery_session_.is_bound()) {
return; return;
} }
...@@ -166,7 +166,7 @@ void BluetoothClassicMedium::DeviceChanged( ...@@ -166,7 +166,7 @@ void BluetoothClassicMedium::DeviceChanged(
void BluetoothClassicMedium::DeviceRemoved( void BluetoothClassicMedium::DeviceRemoved(
bluetooth::mojom::DeviceInfoPtr device) { bluetooth::mojom::DeviceInfoPtr device) {
if (!adapter_client_.is_bound() || !discovery_callback_ || if (!adapter_observer_.is_bound() || !discovery_callback_ ||
!discovery_session_.is_bound()) { !discovery_session_.is_bound()) {
return; return;
} }
......
...@@ -24,7 +24,7 @@ namespace chrome { ...@@ -24,7 +24,7 @@ namespace chrome {
// implementation consumes the synchronous signatures of // implementation consumes the synchronous signatures of
// bluetooth::mojom::Adapter methods. // bluetooth::mojom::Adapter methods.
class BluetoothClassicMedium : public api::BluetoothClassicMedium, class BluetoothClassicMedium : public api::BluetoothClassicMedium,
public bluetooth::mojom::AdapterClient { public bluetooth::mojom::AdapterObserver {
public: public:
explicit BluetoothClassicMedium(bluetooth::mojom::Adapter* adapter); explicit BluetoothClassicMedium(bluetooth::mojom::Adapter* adapter);
~BluetoothClassicMedium() override; ~BluetoothClassicMedium() override;
...@@ -43,7 +43,7 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium, ...@@ -43,7 +43,7 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium,
const std::string& service_uuid) override; const std::string& service_uuid) override;
private: private:
// bluetooth::mojom::AdapterClient: // bluetooth::mojom::AdapterObserver:
void PresentChanged(bool present) override; void PresentChanged(bool present) override;
void PoweredChanged(bool powered) override; void PoweredChanged(bool powered) override;
void DiscoverableChanged(bool discoverable) override; void DiscoverableChanged(bool discoverable) override;
...@@ -56,9 +56,9 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium, ...@@ -56,9 +56,9 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium,
// will always outlive this object. // will always outlive this object.
bluetooth::mojom::Adapter* adapter_ = nullptr; bluetooth::mojom::Adapter* adapter_ = nullptr;
// |adapter_client_| is only set and bound during active discovery so that // |adapter_observer_| is only set and bound during active discovery so that
// events we don't care about outside of discovery don't pile up. // events we don't care about outside of discovery don't pile up.
mojo::Receiver<bluetooth::mojom::AdapterClient> adapter_client_{this}; mojo::Receiver<bluetooth::mojom::AdapterObserver> adapter_observer_{this};
// These properties are only set while discovery is active. // These properties are only set while discovery is active.
base::Optional<DiscoveryCallback> discovery_callback_; base::Optional<DiscoveryCallback> discovery_callback_;
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <memory> #include <memory>
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -81,9 +80,10 @@ void FakeAdapter::GetInfo(GetInfoCallback callback) { ...@@ -81,9 +80,10 @@ void FakeAdapter::GetInfo(GetInfoCallback callback) {
std::move(callback).Run(std::move(adapter_info)); std::move(callback).Run(std::move(adapter_info));
} }
void FakeAdapter::SetClient(::mojo::PendingRemote<mojom::AdapterClient> client, void FakeAdapter::AddObserver(
SetClientCallback callback) { mojo::PendingRemote<mojom::AdapterObserver> observer,
client_.Bind(std::move(client)); AddObserverCallback callback) {
observers_.Add(std::move(observer));
std::move(callback).Run(); std::move(callback).Run();
} }
...@@ -190,15 +190,18 @@ bool FakeAdapter::IsDiscoverySessionActive() { ...@@ -190,15 +190,18 @@ bool FakeAdapter::IsDiscoverySessionActive() {
} }
void FakeAdapter::NotifyDeviceAdded(mojom::DeviceInfoPtr device_info) { void FakeAdapter::NotifyDeviceAdded(mojom::DeviceInfoPtr device_info) {
client_->DeviceAdded(std::move(device_info)); for (auto& observer : observers_)
observer->DeviceAdded(device_info->Clone());
} }
void FakeAdapter::NotifyDeviceChanged(mojom::DeviceInfoPtr device_info) { void FakeAdapter::NotifyDeviceChanged(mojom::DeviceInfoPtr device_info) {
client_->DeviceChanged(std::move(device_info)); for (auto& observer : observers_)
observer->DeviceChanged(device_info->Clone());
} }
void FakeAdapter::NotifyDeviceRemoved(mojom::DeviceInfoPtr device_info) { void FakeAdapter::NotifyDeviceRemoved(mojom::DeviceInfoPtr device_info) {
client_->DeviceRemoved(std::move(device_info)); for (auto& observer : observers_)
observer->DeviceRemoved(device_info->Clone());
} }
void FakeAdapter::AllowConnectionForAddressAndUuidPair( void FakeAdapter::AllowConnectionForAddressAndUuidPair(
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "device/bluetooth/public/cpp/bluetooth_uuid.h" #include "device/bluetooth/public/cpp/bluetooth_uuid.h"
#include "device/bluetooth/public/mojom/adapter.mojom.h" #include "device/bluetooth/public/mojom/adapter.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote_set.h" #include "mojo/public/cpp/bindings/remote_set.h"
...@@ -24,8 +25,8 @@ class FakeAdapter : public mojom::Adapter { ...@@ -24,8 +25,8 @@ class FakeAdapter : public mojom::Adapter {
ConnectToDeviceCallback callback) override; ConnectToDeviceCallback callback) override;
void GetDevices(GetDevicesCallback callback) override; void GetDevices(GetDevicesCallback callback) override;
void GetInfo(GetInfoCallback callback) override; void GetInfo(GetInfoCallback callback) override;
void SetClient(::mojo::PendingRemote<mojom::AdapterClient> client, void AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
SetClientCallback callback) override; AddObserverCallback callback) override;
void SetDiscoverable(bool discoverable, void SetDiscoverable(bool discoverable,
SetDiscoverableCallback callback) override; SetDiscoverableCallback callback) override;
void SetName(const std::string& name, SetNameCallback callback) override; void SetName(const std::string& name, SetNameCallback callback) override;
...@@ -69,7 +70,7 @@ class FakeAdapter : public mojom::Adapter { ...@@ -69,7 +70,7 @@ class FakeAdapter : public mojom::Adapter {
std::set<std::pair<std::string, device::BluetoothUUID>> std::set<std::pair<std::string, device::BluetoothUUID>>
allowed_connections_for_service_name_and_uuid_pair_; allowed_connections_for_service_name_and_uuid_pair_;
mojo::Remote<mojom::AdapterClient> client_; mojo::RemoteSet<mojom::AdapterObserver> observers_;
}; };
} // namespace bluetooth } // namespace bluetooth
......
...@@ -87,7 +87,7 @@ BluetoothInternalsTest.prototype = { ...@@ -87,7 +87,7 @@ BluetoothInternalsTest.prototype = {
super([ super([
'getInfo', 'getInfo',
'getDevices', 'getDevices',
'setClient', 'addObserver',
]); ]);
this.receiver = new bluetooth.mojom.AdapterReceiver(this); this.receiver = new bluetooth.mojom.AdapterReceiver(this);
...@@ -122,8 +122,8 @@ BluetoothInternalsTest.prototype = { ...@@ -122,8 +122,8 @@ BluetoothInternalsTest.prototype = {
return {devices: this.devices_}; return {devices: this.devices_};
} }
async setClient(client) { async addObserver(observer) {
this.methodCalled('setClient', client); this.methodCalled('addObserver', observer);
} }
async setDiscoverable() { async setDiscoverable() {
...@@ -366,7 +366,7 @@ TEST_F('BluetoothInternalsTest', 'Startup_BluetoothInternals', function() { ...@@ -366,7 +366,7 @@ TEST_F('BluetoothInternalsTest', 'Startup_BluetoothInternals', function() {
internalsHandler.whenCalled('getAdapter'), internalsHandler.whenCalled('getAdapter'),
internalsHandler.adapter.whenCalled('getInfo'), internalsHandler.adapter.whenCalled('getInfo'),
internalsHandler.adapter.whenCalled('getDevices'), internalsHandler.adapter.whenCalled('getDevices'),
internalsHandler.adapter.whenCalled('setClient') internalsHandler.adapter.whenCalled('addObserver')
]); ]);
}); });
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "device/bluetooth/server_socket.h" #include "device/bluetooth/server_socket.h"
#include "device/bluetooth/socket.h" #include "device/bluetooth/socket.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h"
namespace bluetooth { namespace bluetooth {
...@@ -79,9 +80,9 @@ void Adapter::GetInfo(GetInfoCallback callback) { ...@@ -79,9 +80,9 @@ void Adapter::GetInfo(GetInfoCallback callback) {
std::move(callback).Run(std::move(adapter_info)); std::move(callback).Run(std::move(adapter_info));
} }
void Adapter::SetClient(mojo::PendingRemote<mojom::AdapterClient> client, void Adapter::AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
SetClientCallback callback) { AddObserverCallback callback) {
client_.Bind(std::move(client)); observers_.Add(std::move(observer));
std::move(callback).Run(); std::move(callback).Run();
} }
...@@ -145,50 +146,47 @@ void Adapter::CreateRfcommService(const std::string& service_name, ...@@ -145,50 +146,47 @@ void Adapter::CreateRfcommService(const std::string& service_name,
void Adapter::AdapterPresentChanged(device::BluetoothAdapter* adapter, void Adapter::AdapterPresentChanged(device::BluetoothAdapter* adapter,
bool present) { bool present) {
if (client_) for (auto& observer : observers_)
client_->PresentChanged(present); observer->PresentChanged(present);
} }
void Adapter::AdapterPoweredChanged(device::BluetoothAdapter* adapter, void Adapter::AdapterPoweredChanged(device::BluetoothAdapter* adapter,
bool powered) { bool powered) {
if (client_) for (auto& observer : observers_)
client_->PoweredChanged(powered); observer->PoweredChanged(powered);
} }
void Adapter::AdapterDiscoverableChanged(device::BluetoothAdapter* adapter, void Adapter::AdapterDiscoverableChanged(device::BluetoothAdapter* adapter,
bool discoverable) { bool discoverable) {
if (client_) for (auto& observer : observers_)
client_->DiscoverableChanged(discoverable); observer->DiscoverableChanged(discoverable);
} }
void Adapter::AdapterDiscoveringChanged(device::BluetoothAdapter* adapter, void Adapter::AdapterDiscoveringChanged(device::BluetoothAdapter* adapter,
bool discovering) { bool discovering) {
if (client_) for (auto& observer : observers_)
client_->DiscoveringChanged(discovering); observer->DiscoveringChanged(discovering);
} }
void Adapter::DeviceAdded(device::BluetoothAdapter* adapter, void Adapter::DeviceAdded(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) { device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device); auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceAdded(std::move(device_info)); for (auto& observer : observers_)
} observer->DeviceAdded(device_info->Clone());
} }
void Adapter::DeviceChanged(device::BluetoothAdapter* adapter, void Adapter::DeviceChanged(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) { device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device); auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceChanged(std::move(device_info)); for (auto& observer : observers_)
} observer->DeviceChanged(device_info->Clone());
} }
void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter, void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) { device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device); auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceRemoved(std::move(device_info)); for (auto& observer : observers_)
} observer->DeviceRemoved(device_info->Clone());
} }
void Adapter::OnGattConnected( void Adapter::OnGattConnected(
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "device/bluetooth/public/mojom/adapter.mojom.h" #include "device/bluetooth/public/mojom/adapter.mojom.h"
#include "device/bluetooth/public/mojom/device.mojom-forward.h" #include "device/bluetooth/public/mojom/device.mojom-forward.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote_set.h"
namespace bluetooth { namespace bluetooth {
...@@ -35,8 +35,8 @@ class Adapter : public mojom::Adapter, ...@@ -35,8 +35,8 @@ class Adapter : public mojom::Adapter,
ConnectToDeviceCallback callback) override; ConnectToDeviceCallback callback) override;
void GetDevices(GetDevicesCallback callback) override; void GetDevices(GetDevicesCallback callback) override;
void GetInfo(GetInfoCallback callback) override; void GetInfo(GetInfoCallback callback) override;
void SetClient(mojo::PendingRemote<mojom::AdapterClient> client, void AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
SetClientCallback callback) override; AddObserverCallback callback) override;
void SetDiscoverable(bool discoverable, void SetDiscoverable(bool discoverable,
SetDiscoverableCallback callback) override; SetDiscoverableCallback callback) override;
void SetName(const std::string& name, SetNameCallback callback) override; void SetName(const std::string& name, SetNameCallback callback) override;
...@@ -98,8 +98,8 @@ class Adapter : public mojom::Adapter, ...@@ -98,8 +98,8 @@ class Adapter : public mojom::Adapter,
// The current Bluetooth adapter. // The current Bluetooth adapter.
scoped_refptr<device::BluetoothAdapter> adapter_; scoped_refptr<device::BluetoothAdapter> adapter_;
// The adapter client that listens to this service. // The adapter observers that listen to this service.
mojo::Remote<mojom::AdapterClient> client_; mojo::RemoteSet<mojom::AdapterObserver> observers_;
base::WeakPtrFactory<Adapter> weak_ptr_factory_{this}; base::WeakPtrFactory<Adapter> weak_ptr_factory_{this};
......
...@@ -124,9 +124,9 @@ interface Adapter { ...@@ -124,9 +124,9 @@ interface Adapter {
[Sync] [Sync]
GetInfo() => (AdapterInfo info); GetInfo() => (AdapterInfo info);
// Sets the client that listens for the adapter's events. // Adds an observer that listens for the adapter's events.
[Sync] [Sync]
SetClient(pending_remote<AdapterClient> client) => (); AddObserver(pending_remote<AdapterObserver> observer) => ();
// Requests the local device to make itself discoverable to nearby remote // Requests the local device to make itself discoverable to nearby remote
// devices. // devices.
...@@ -164,7 +164,8 @@ interface Adapter { ...@@ -164,7 +164,8 @@ interface Adapter {
=> (pending_remote<ServerSocket>? server_socket); => (pending_remote<ServerSocket>? server_socket);
}; };
interface AdapterClient { // Listener on Bluetooth events. Register as an observer via AddObserver().
interface AdapterObserver {
// Called when the presence of the adapter changes. // Called when the presence of the adapter changes.
PresentChanged(bool present); PresentChanged(bool present);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment