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() {
/**
* The proxy class of an adapter and router of adapter events.
* 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
* handles and back when necessary.
*
* @implements {bluetooth.mojom.AdapterClientInterface}
* @implements {bluetooth.mojom.AdapterObserverInterface}
*/
class AdapterBroker extends cr.EventTarget {
/** @param {!AdapterRemote} adapter */
constructor(adapter) {
super();
this.adapterClientReceiver_ =
new bluetooth.mojom.AdapterClientReceiver(this);
this.adapterObserverReceiver_ =
new bluetooth.mojom.AdapterObserverReceiver(this);
this.adapter_ = adapter;
this.adapter_.setClient(
this.adapterClientReceiver_.$.bindNewPipeAndPassRemote());
this.adapter_.addObserver(
this.adapterObserverReceiver_.$.bindNewPipeAndPassRemote());
}
presentChanged(present) {
......
......@@ -20,7 +20,7 @@ BluetoothClassicMedium::~BluetoothClassicMedium() = default;
bool BluetoothClassicMedium::StartDiscovery(
DiscoveryCallback discovery_callback) {
if (adapter_client_.is_bound() && discovery_callback_ &&
if (adapter_observer_.is_bound() && discovery_callback_ &&
discovery_session_.is_bound()) {
return true;
}
......@@ -29,9 +29,9 @@ bool BluetoothClassicMedium::StartDiscovery(
discovered_bluetooth_devices_map_.clear();
bool success =
adapter_->SetClient(adapter_client_.BindNewPipeAndPassRemote());
adapter_->AddObserver(adapter_observer_.BindNewPipeAndPassRemote());
if (!success) {
adapter_client_.reset();
adapter_observer_.reset();
return false;
}
......@@ -39,7 +39,7 @@ bool BluetoothClassicMedium::StartDiscovery(
success = adapter_->StartDiscoverySession(&discovery_session);
if (!success || !discovery_session.is_valid()) {
adapter_client_.reset();
adapter_observer_.reset();
return false;
}
......@@ -63,7 +63,7 @@ bool BluetoothClassicMedium::StopDiscovery() {
stop_discovery_success = stop_discovery_success && message_success;
}
adapter_client_.reset();
adapter_observer_.reset();
discovery_callback_.reset();
discovery_session_.reset();
......@@ -142,7 +142,7 @@ void BluetoothClassicMedium::DiscoveringChanged(bool discovering) {
void BluetoothClassicMedium::DeviceAdded(
bluetooth::mojom::DeviceInfoPtr device) {
if (!adapter_client_.is_bound() || !discovery_callback_ ||
if (!adapter_observer_.is_bound() || !discovery_callback_ ||
!discovery_session_.is_bound()) {
return;
}
......@@ -166,7 +166,7 @@ void BluetoothClassicMedium::DeviceChanged(
void BluetoothClassicMedium::DeviceRemoved(
bluetooth::mojom::DeviceInfoPtr device) {
if (!adapter_client_.is_bound() || !discovery_callback_ ||
if (!adapter_observer_.is_bound() || !discovery_callback_ ||
!discovery_session_.is_bound()) {
return;
}
......
......@@ -24,7 +24,7 @@ namespace chrome {
// implementation consumes the synchronous signatures of
// bluetooth::mojom::Adapter methods.
class BluetoothClassicMedium : public api::BluetoothClassicMedium,
public bluetooth::mojom::AdapterClient {
public bluetooth::mojom::AdapterObserver {
public:
explicit BluetoothClassicMedium(bluetooth::mojom::Adapter* adapter);
~BluetoothClassicMedium() override;
......@@ -43,7 +43,7 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium,
const std::string& service_uuid) override;
private:
// bluetooth::mojom::AdapterClient:
// bluetooth::mojom::AdapterObserver:
void PresentChanged(bool present) override;
void PoweredChanged(bool powered) override;
void DiscoverableChanged(bool discoverable) override;
......@@ -56,9 +56,9 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium,
// will always outlive this object.
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.
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.
base::Optional<DiscoveryCallback> discovery_callback_;
......
......@@ -6,7 +6,6 @@
#include <memory>
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -81,9 +80,10 @@ void FakeAdapter::GetInfo(GetInfoCallback callback) {
std::move(callback).Run(std::move(adapter_info));
}
void FakeAdapter::SetClient(::mojo::PendingRemote<mojom::AdapterClient> client,
SetClientCallback callback) {
client_.Bind(std::move(client));
void FakeAdapter::AddObserver(
mojo::PendingRemote<mojom::AdapterObserver> observer,
AddObserverCallback callback) {
observers_.Add(std::move(observer));
std::move(callback).Run();
}
......@@ -190,15 +190,18 @@ bool FakeAdapter::IsDiscoverySessionActive() {
}
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) {
client_->DeviceChanged(std::move(device_info));
for (auto& observer : observers_)
observer->DeviceChanged(device_info->Clone());
}
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(
......
......@@ -7,6 +7,7 @@
#include "device/bluetooth/public/cpp/bluetooth_uuid.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/remote_set.h"
......@@ -24,8 +25,8 @@ class FakeAdapter : public mojom::Adapter {
ConnectToDeviceCallback callback) override;
void GetDevices(GetDevicesCallback callback) override;
void GetInfo(GetInfoCallback callback) override;
void SetClient(::mojo::PendingRemote<mojom::AdapterClient> client,
SetClientCallback callback) override;
void AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
AddObserverCallback callback) override;
void SetDiscoverable(bool discoverable,
SetDiscoverableCallback callback) override;
void SetName(const std::string& name, SetNameCallback callback) override;
......@@ -69,7 +70,7 @@ class FakeAdapter : public mojom::Adapter {
std::set<std::pair<std::string, device::BluetoothUUID>>
allowed_connections_for_service_name_and_uuid_pair_;
mojo::Remote<mojom::AdapterClient> client_;
mojo::RemoteSet<mojom::AdapterObserver> observers_;
};
} // namespace bluetooth
......
......@@ -87,7 +87,7 @@ BluetoothInternalsTest.prototype = {
super([
'getInfo',
'getDevices',
'setClient',
'addObserver',
]);
this.receiver = new bluetooth.mojom.AdapterReceiver(this);
......@@ -122,8 +122,8 @@ BluetoothInternalsTest.prototype = {
return {devices: this.devices_};
}
async setClient(client) {
this.methodCalled('setClient', client);
async addObserver(observer) {
this.methodCalled('addObserver', observer);
}
async setDiscoverable() {
......@@ -366,7 +366,7 @@ TEST_F('BluetoothInternalsTest', 'Startup_BluetoothInternals', function() {
internalsHandler.whenCalled('getAdapter'),
internalsHandler.adapter.whenCalled('getInfo'),
internalsHandler.adapter.whenCalled('getDevices'),
internalsHandler.adapter.whenCalled('setClient')
internalsHandler.adapter.whenCalled('addObserver')
]);
});
......
......@@ -20,6 +20,7 @@
#include "device/bluetooth/server_socket.h"
#include "device/bluetooth/socket.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"
namespace bluetooth {
......@@ -79,9 +80,9 @@ void Adapter::GetInfo(GetInfoCallback callback) {
std::move(callback).Run(std::move(adapter_info));
}
void Adapter::SetClient(mojo::PendingRemote<mojom::AdapterClient> client,
SetClientCallback callback) {
client_.Bind(std::move(client));
void Adapter::AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
AddObserverCallback callback) {
observers_.Add(std::move(observer));
std::move(callback).Run();
}
......@@ -145,50 +146,47 @@ void Adapter::CreateRfcommService(const std::string& service_name,
void Adapter::AdapterPresentChanged(device::BluetoothAdapter* adapter,
bool present) {
if (client_)
client_->PresentChanged(present);
for (auto& observer : observers_)
observer->PresentChanged(present);
}
void Adapter::AdapterPoweredChanged(device::BluetoothAdapter* adapter,
bool powered) {
if (client_)
client_->PoweredChanged(powered);
for (auto& observer : observers_)
observer->PoweredChanged(powered);
}
void Adapter::AdapterDiscoverableChanged(device::BluetoothAdapter* adapter,
bool discoverable) {
if (client_)
client_->DiscoverableChanged(discoverable);
for (auto& observer : observers_)
observer->DiscoverableChanged(discoverable);
}
void Adapter::AdapterDiscoveringChanged(device::BluetoothAdapter* adapter,
bool discovering) {
if (client_)
client_->DiscoveringChanged(discovering);
for (auto& observer : observers_)
observer->DiscoveringChanged(discovering);
}
void Adapter::DeviceAdded(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceAdded(std::move(device_info));
}
auto device_info = Device::ConstructDeviceInfoStruct(device);
for (auto& observer : observers_)
observer->DeviceAdded(device_info->Clone());
}
void Adapter::DeviceChanged(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceChanged(std::move(device_info));
}
auto device_info = Device::ConstructDeviceInfoStruct(device);
for (auto& observer : observers_)
observer->DeviceChanged(device_info->Clone());
}
void Adapter::DeviceRemoved(device::BluetoothAdapter* adapter,
device::BluetoothDevice* device) {
if (client_) {
auto device_info = Device::ConstructDeviceInfoStruct(device);
client_->DeviceRemoved(std::move(device_info));
}
auto device_info = Device::ConstructDeviceInfoStruct(device);
for (auto& observer : observers_)
observer->DeviceRemoved(device_info->Clone());
}
void Adapter::OnGattConnected(
......
......@@ -16,7 +16,7 @@
#include "device/bluetooth/public/mojom/adapter.mojom.h"
#include "device/bluetooth/public/mojom/device.mojom-forward.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 {
......@@ -35,8 +35,8 @@ class Adapter : public mojom::Adapter,
ConnectToDeviceCallback callback) override;
void GetDevices(GetDevicesCallback callback) override;
void GetInfo(GetInfoCallback callback) override;
void SetClient(mojo::PendingRemote<mojom::AdapterClient> client,
SetClientCallback callback) override;
void AddObserver(mojo::PendingRemote<mojom::AdapterObserver> observer,
AddObserverCallback callback) override;
void SetDiscoverable(bool discoverable,
SetDiscoverableCallback callback) override;
void SetName(const std::string& name, SetNameCallback callback) override;
......@@ -98,8 +98,8 @@ class Adapter : public mojom::Adapter,
// The current Bluetooth adapter.
scoped_refptr<device::BluetoothAdapter> adapter_;
// The adapter client that listens to this service.
mojo::Remote<mojom::AdapterClient> client_;
// The adapter observers that listen to this service.
mojo::RemoteSet<mojom::AdapterObserver> observers_;
base::WeakPtrFactory<Adapter> weak_ptr_factory_{this};
......
......@@ -124,9 +124,9 @@ interface Adapter {
[Sync]
GetInfo() => (AdapterInfo info);
// Sets the client that listens for the adapter's events.
// Adds an observer that listens for the adapter's events.
[Sync]
SetClient(pending_remote<AdapterClient> client) => ();
AddObserver(pending_remote<AdapterObserver> observer) => ();
// Requests the local device to make itself discoverable to nearby remote
// devices.
......@@ -164,7 +164,8 @@ interface Adapter {
=> (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.
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