Commit 9d90a6d6 authored by Julie Jeongeun Kim's avatar Julie Jeongeun Kim Committed by Commit Bot

Convert HostStatusObserver to new Mojo types

This CL converts HostStatusObserverPtr and
HostStatusObserverRequest to new Mojo types
using PendingRemote, Remote, RemoteSet,
and ReceiverSet.

It also update AddHostStatusObserver from
multidevice_setup.mojom.

Bug: 955171
Change-Id: Ifde21a3512beaf4d67f0bbd03a719ad148cd3ab0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1824725
Commit-Queue: Julie Kim <jkim@igalia.com>
Reviewed-by: default avatarRyan Hansberry <hansberry@chromium.org>
Reviewed-by: default avatarOksana Zhuravlova <oksamyt@chromium.org>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700115}
parent ed503f03
...@@ -12,10 +12,11 @@ FakeHostStatusObserver::FakeHostStatusObserver() = default; ...@@ -12,10 +12,11 @@ FakeHostStatusObserver::FakeHostStatusObserver() = default;
FakeHostStatusObserver::~FakeHostStatusObserver() = default; FakeHostStatusObserver::~FakeHostStatusObserver() = default;
mojom::HostStatusObserverPtr FakeHostStatusObserver::GenerateInterfacePtr() { mojo::PendingRemote<mojom::HostStatusObserver>
mojom::HostStatusObserverPtr interface_ptr; FakeHostStatusObserver::GenerateRemote() {
bindings_.AddBinding(this, mojo::MakeRequest(&interface_ptr)); mojo::PendingRemote<mojom::HostStatusObserver> remote;
return interface_ptr; receivers_.Add(this, remote.InitWithNewPipeAndPassReceiver());
return remote;
} }
void FakeHostStatusObserver::OnHostStatusChanged( void FakeHostStatusObserver::OnHostStatusChanged(
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
namespace chromeos { namespace chromeos {
...@@ -20,7 +21,7 @@ class FakeHostStatusObserver : public mojom::HostStatusObserver { ...@@ -20,7 +21,7 @@ class FakeHostStatusObserver : public mojom::HostStatusObserver {
FakeHostStatusObserver(); FakeHostStatusObserver();
~FakeHostStatusObserver() override; ~FakeHostStatusObserver() override;
mojom::HostStatusObserverPtr GenerateInterfacePtr(); mojo::PendingRemote<mojom::HostStatusObserver> GenerateRemote();
const std::vector< const std::vector<
std::pair<mojom::HostStatus, base::Optional<multidevice::RemoteDevice>>>& std::pair<mojom::HostStatus, base::Optional<multidevice::RemoteDevice>>>&
...@@ -38,7 +39,7 @@ class FakeHostStatusObserver : public mojom::HostStatusObserver { ...@@ -38,7 +39,7 @@ class FakeHostStatusObserver : public mojom::HostStatusObserver {
std::pair<mojom::HostStatus, base::Optional<multidevice::RemoteDevice>>> std::pair<mojom::HostStatus, base::Optional<multidevice::RemoteDevice>>>
host_status_updates_; host_status_updates_;
mojo::BindingSet<mojom::HostStatusObserver> bindings_; mojo::ReceiverSet<mojom::HostStatusObserver> receivers_;
DISALLOW_COPY_AND_ASSIGN(FakeHostStatusObserver); DISALLOW_COPY_AND_ASSIGN(FakeHostStatusObserver);
}; };
......
...@@ -162,8 +162,8 @@ void MultiDeviceSetupImpl::SetAccountStatusChangeDelegate( ...@@ -162,8 +162,8 @@ void MultiDeviceSetupImpl::SetAccountStatusChangeDelegate(
} }
void MultiDeviceSetupImpl::AddHostStatusObserver( void MultiDeviceSetupImpl::AddHostStatusObserver(
mojom::HostStatusObserverPtr observer) { mojo::PendingRemote<mojom::HostStatusObserver> observer) {
host_status_observers_.AddPtr(std::move(observer)); host_status_observers_.Add(std::move(observer));
} }
void MultiDeviceSetupImpl::AddFeatureStateObserver( void MultiDeviceSetupImpl::AddFeatureStateObserver(
...@@ -325,11 +325,8 @@ void MultiDeviceSetupImpl::OnHostStatusChange( ...@@ -325,11 +325,8 @@ void MultiDeviceSetupImpl::OnHostStatusChange(
host_status_with_device.host_device()->GetRemoteDevice(); host_status_with_device.host_device()->GetRemoteDevice();
} }
host_status_observers_.ForAllPtrs( for (auto& observer : host_status_observers_)
[&status_for_callback, observer->OnHostStatusChanged(status_for_callback, device_for_callback);
&device_for_callback](mojom::HostStatusObserver* observer) {
observer->OnHostStatusChanged(status_for_callback, device_for_callback);
});
} }
void MultiDeviceSetupImpl::OnFeatureStatesChange( void MultiDeviceSetupImpl::OnFeatureStatesChange(
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/interface_ptr_set.h" #include "mojo/public/cpp/bindings/interface_ptr_set.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote_set.h"
#include "url/gurl.h" #include "url/gurl.h"
class PrefService; class PrefService;
...@@ -83,7 +84,8 @@ class MultiDeviceSetupImpl : public MultiDeviceSetupBase, ...@@ -83,7 +84,8 @@ class MultiDeviceSetupImpl : public MultiDeviceSetupBase,
void SetAccountStatusChangeDelegate( void SetAccountStatusChangeDelegate(
mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate) mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate)
override; override;
void AddHostStatusObserver(mojom::HostStatusObserverPtr observer) override; void AddHostStatusObserver(
mojo::PendingRemote<mojom::HostStatusObserver> observer) override;
void AddFeatureStateObserver( void AddFeatureStateObserver(
mojom::FeatureStateObserverPtr observer) override; mojom::FeatureStateObserverPtr observer) override;
void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override; void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override;
...@@ -138,7 +140,7 @@ class MultiDeviceSetupImpl : public MultiDeviceSetupBase, ...@@ -138,7 +140,7 @@ class MultiDeviceSetupImpl : public MultiDeviceSetupBase,
android_sms_app_installing_host_observer_; android_sms_app_installing_host_observer_;
AuthTokenValidator* auth_token_validator_; AuthTokenValidator* auth_token_validator_;
mojo::InterfacePtrSet<mojom::HostStatusObserver> host_status_observers_; mojo::RemoteSet<mojom::HostStatusObserver> host_status_observers_;
mojo::InterfacePtrSet<mojom::FeatureStateObserver> feature_state_observers_; mojo::InterfacePtrSet<mojom::FeatureStateObserver> feature_state_observers_;
DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupImpl); DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupImpl);
......
...@@ -1111,7 +1111,7 @@ TEST_F(MultiDeviceSetupImplTest, ComprehensiveHostTest) { ...@@ -1111,7 +1111,7 @@ TEST_F(MultiDeviceSetupImplTest, ComprehensiveHostTest) {
// Add a status observer. // Add a status observer.
auto observer = std::make_unique<FakeHostStatusObserver>(); auto observer = std::make_unique<FakeHostStatusObserver>();
multidevice_setup()->AddHostStatusObserver(observer->GenerateInterfacePtr()); multidevice_setup()->AddHostStatusObserver(observer->GenerateRemote());
// Simulate a sync occurring; now, all of the test devices are eligible hosts. // Simulate a sync occurring; now, all of the test devices are eligible hosts.
fake_eligible_host_devices_provider()->set_eligible_host_devices( fake_eligible_host_devices_provider()->set_eligible_host_devices(
...@@ -1202,7 +1202,7 @@ TEST_F(MultiDeviceSetupImplTest, TestSetHostDevice_InvalidAuthToken) { ...@@ -1202,7 +1202,7 @@ TEST_F(MultiDeviceSetupImplTest, TestSetHostDevice_InvalidAuthToken) {
TEST_F(MultiDeviceSetupImplTest, TestSetHostDeviceWithoutAuthToken) { TEST_F(MultiDeviceSetupImplTest, TestSetHostDeviceWithoutAuthToken) {
// Add a status observer. // Add a status observer.
auto observer = std::make_unique<FakeHostStatusObserver>(); auto observer = std::make_unique<FakeHostStatusObserver>();
multidevice_setup()->AddHostStatusObserver(observer->GenerateInterfacePtr()); multidevice_setup()->AddHostStatusObserver(observer->GenerateRemote());
// Start valid eligible host devices. // Start valid eligible host devices.
fake_eligible_host_devices_provider()->set_eligible_host_devices( fake_eligible_host_devices_provider()->set_eligible_host_devices(
......
...@@ -109,7 +109,7 @@ void MultiDeviceSetupInitializer::SetAccountStatusChangeDelegate( ...@@ -109,7 +109,7 @@ void MultiDeviceSetupInitializer::SetAccountStatusChangeDelegate(
} }
void MultiDeviceSetupInitializer::AddHostStatusObserver( void MultiDeviceSetupInitializer::AddHostStatusObserver(
mojom::HostStatusObserverPtr observer) { mojo::PendingRemote<mojom::HostStatusObserver> observer) {
if (multidevice_setup_impl_) { if (multidevice_setup_impl_) {
multidevice_setup_impl_->AddHostStatusObserver(std::move(observer)); multidevice_setup_impl_->AddHostStatusObserver(std::move(observer));
return; return;
......
...@@ -90,7 +90,8 @@ class MultiDeviceSetupInitializer ...@@ -90,7 +90,8 @@ class MultiDeviceSetupInitializer
void SetAccountStatusChangeDelegate( void SetAccountStatusChangeDelegate(
mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate) mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate)
override; override;
void AddHostStatusObserver(mojom::HostStatusObserverPtr observer) override; void AddHostStatusObserver(
mojo::PendingRemote<mojom::HostStatusObserver> observer) override;
void AddFeatureStateObserver( void AddFeatureStateObserver(
mojom::FeatureStateObserverPtr observer) override; mojom::FeatureStateObserverPtr observer) override;
void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override; void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override;
...@@ -134,7 +135,8 @@ class MultiDeviceSetupInitializer ...@@ -134,7 +135,8 @@ class MultiDeviceSetupInitializer
// parameters are cached here. Once asynchronous initialization is complete, // parameters are cached here. Once asynchronous initialization is complete,
// the parameters are passed to |multidevice_setup_impl_|. // the parameters are passed to |multidevice_setup_impl_|.
mojo::PendingRemote<mojom::AccountStatusChangeDelegate> pending_delegate_; mojo::PendingRemote<mojom::AccountStatusChangeDelegate> pending_delegate_;
std::vector<mojom::HostStatusObserverPtr> pending_host_status_observers_; std::vector<mojo::PendingRemote<mojom::HostStatusObserver>>
pending_host_status_observers_;
std::vector<mojom::FeatureStateObserverPtr> pending_feature_state_observers_; std::vector<mojom::FeatureStateObserverPtr> pending_feature_state_observers_;
std::vector<GetEligibleHostDevicesCallback> pending_get_eligible_hosts_args_; std::vector<GetEligibleHostDevicesCallback> pending_get_eligible_hosts_args_;
std::vector<GetHostStatusCallback> pending_get_host_args_; std::vector<GetHostStatusCallback> pending_get_host_args_;
......
...@@ -249,7 +249,7 @@ TEST_F(MultiDeviceSetupServiceTest, CallFunctionsBeforeInitialization) { ...@@ -249,7 +249,7 @@ TEST_F(MultiDeviceSetupServiceTest, CallFunctionsBeforeInitialization) {
// AddHostStatusObserver(). // AddHostStatusObserver().
auto fake_host_status_observer = std::make_unique<FakeHostStatusObserver>(); auto fake_host_status_observer = std::make_unique<FakeHostStatusObserver>();
multidevice_setup_ptr()->AddHostStatusObserver( multidevice_setup_ptr()->AddHostStatusObserver(
fake_host_status_observer->GenerateInterfacePtr()); fake_host_status_observer->GenerateRemote());
multidevice_setup_ptr().FlushForTesting(); multidevice_setup_ptr().FlushForTesting();
// AddFeatureStateObserver(). // AddFeatureStateObserver().
...@@ -395,7 +395,7 @@ TEST_F(MultiDeviceSetupServiceTest, FinishInitializationFirst) { ...@@ -395,7 +395,7 @@ TEST_F(MultiDeviceSetupServiceTest, FinishInitializationFirst) {
// AddHostStatusObserver(). // AddHostStatusObserver().
auto fake_host_status_observer = std::make_unique<FakeHostStatusObserver>(); auto fake_host_status_observer = std::make_unique<FakeHostStatusObserver>();
multidevice_setup_ptr()->AddHostStatusObserver( multidevice_setup_ptr()->AddHostStatusObserver(
fake_host_status_observer->GenerateInterfacePtr()); fake_host_status_observer->GenerateRemote());
multidevice_setup_ptr().FlushForTesting(); multidevice_setup_ptr().FlushForTesting();
EXPECT_TRUE(fake_multidevice_setup()->HasAtLeastOneHostStatusObserver()); EXPECT_TRUE(fake_multidevice_setup()->HasAtLeastOneHostStatusObserver());
......
...@@ -82,10 +82,8 @@ bool FakeMultiDeviceSetup::HasAtLeastOneFeatureStateObserver() { ...@@ -82,10 +82,8 @@ bool FakeMultiDeviceSetup::HasAtLeastOneFeatureStateObserver() {
void FakeMultiDeviceSetup::NotifyHostStatusChanged( void FakeMultiDeviceSetup::NotifyHostStatusChanged(
mojom::HostStatus host_status, mojom::HostStatus host_status,
const base::Optional<multidevice::RemoteDevice>& host_device) { const base::Optional<multidevice::RemoteDevice>& host_device) {
host_status_observers_.ForAllPtrs( for (auto& observer : host_status_observers_)
[&host_status, &host_device](mojom::HostStatusObserver* observer) { observer->OnHostStatusChanged(host_status, host_device);
observer->OnHostStatusChanged(host_status, host_device);
});
} }
void FakeMultiDeviceSetup::NotifyFeatureStateChanged( void FakeMultiDeviceSetup::NotifyFeatureStateChanged(
...@@ -103,8 +101,8 @@ void FakeMultiDeviceSetup::SetAccountStatusChangeDelegate( ...@@ -103,8 +101,8 @@ void FakeMultiDeviceSetup::SetAccountStatusChangeDelegate(
} }
void FakeMultiDeviceSetup::AddHostStatusObserver( void FakeMultiDeviceSetup::AddHostStatusObserver(
mojom::HostStatusObserverPtr observer) { mojo::PendingRemote<mojom::HostStatusObserver> observer) {
host_status_observers_.AddPtr(std::move(observer)); host_status_observers_.Add(std::move(observer));
} }
void FakeMultiDeviceSetup::AddFeatureStateObserver( void FakeMultiDeviceSetup::AddFeatureStateObserver(
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "mojo/public/cpp/bindings/interface_ptr_set.h" #include "mojo/public/cpp/bindings/interface_ptr_set.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.h"
#include "mojo/public/cpp/bindings/remote_set.h"
namespace chromeos { namespace chromeos {
...@@ -90,7 +91,8 @@ class FakeMultiDeviceSetup : public MultiDeviceSetupBase { ...@@ -90,7 +91,8 @@ class FakeMultiDeviceSetup : public MultiDeviceSetupBase {
void SetAccountStatusChangeDelegate( void SetAccountStatusChangeDelegate(
mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate) mojo::PendingRemote<mojom::AccountStatusChangeDelegate> delegate)
override; override;
void AddHostStatusObserver(mojom::HostStatusObserverPtr observer) override; void AddHostStatusObserver(
mojo::PendingRemote<mojom::HostStatusObserver> observer) override;
void AddFeatureStateObserver( void AddFeatureStateObserver(
mojom::FeatureStateObserverPtr observer) override; mojom::FeatureStateObserverPtr observer) override;
void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override; void GetEligibleHostDevices(GetEligibleHostDevicesCallback callback) override;
...@@ -116,7 +118,7 @@ class FakeMultiDeviceSetup : public MultiDeviceSetupBase { ...@@ -116,7 +118,7 @@ class FakeMultiDeviceSetup : public MultiDeviceSetupBase {
override; override;
mojo::Remote<mojom::AccountStatusChangeDelegate> delegate_; mojo::Remote<mojom::AccountStatusChangeDelegate> delegate_;
mojo::InterfacePtrSet<mojom::HostStatusObserver> host_status_observers_; mojo::RemoteSet<mojom::HostStatusObserver> host_status_observers_;
mojo::InterfacePtrSet<mojom::FeatureStateObserver> feature_state_observers_; mojo::InterfacePtrSet<mojom::FeatureStateObserver> feature_state_observers_;
std::vector<GetEligibleHostDevicesCallback> get_eligible_hosts_args_; std::vector<GetEligibleHostDevicesCallback> get_eligible_hosts_args_;
......
...@@ -48,15 +48,14 @@ MultiDeviceSetupClientImpl::Factory::BuildInstance( ...@@ -48,15 +48,14 @@ MultiDeviceSetupClientImpl::Factory::BuildInstance(
MultiDeviceSetupClientImpl::MultiDeviceSetupClientImpl( MultiDeviceSetupClientImpl::MultiDeviceSetupClientImpl(
service_manager::Connector* connector) service_manager::Connector* connector)
: host_status_observer_binding_(this), : feature_state_observer_binding_(this),
feature_state_observer_binding_(this),
remote_device_cache_( remote_device_cache_(
multidevice::RemoteDeviceCache::Factory::Get()->BuildInstance()), multidevice::RemoteDeviceCache::Factory::Get()->BuildInstance()),
host_status_with_device_(GenerateDefaultHostStatusWithDevice()), host_status_with_device_(GenerateDefaultHostStatusWithDevice()),
feature_states_map_(GenerateDefaultFeatureStatesMap()) { feature_states_map_(GenerateDefaultFeatureStatesMap()) {
connector->BindInterface(mojom::kServiceName, &multidevice_setup_ptr_); connector->BindInterface(mojom::kServiceName, &multidevice_setup_ptr_);
multidevice_setup_ptr_->AddHostStatusObserver( multidevice_setup_ptr_->AddHostStatusObserver(
GenerateHostStatusObserverInterfacePtr()); GenerateHostStatusObserverRemote());
multidevice_setup_ptr_->AddFeatureStateObserver( multidevice_setup_ptr_->AddFeatureStateObserver(
GenerateFeatureStatesObserverInterfacePtr()); GenerateFeatureStatesObserverInterfacePtr());
multidevice_setup_ptr_->GetHostStatus( multidevice_setup_ptr_->GetHostStatus(
...@@ -156,11 +155,9 @@ void MultiDeviceSetupClientImpl::OnGetEligibleHostDevicesCompleted( ...@@ -156,11 +155,9 @@ void MultiDeviceSetupClientImpl::OnGetEligibleHostDevicesCompleted(
std::move(callback).Run(eligible_host_device_refs); std::move(callback).Run(eligible_host_device_refs);
} }
mojom::HostStatusObserverPtr mojo::PendingRemote<mojom::HostStatusObserver>
MultiDeviceSetupClientImpl::GenerateHostStatusObserverInterfacePtr() { MultiDeviceSetupClientImpl::GenerateHostStatusObserverRemote() {
mojom::HostStatusObserverPtr interface_ptr; return host_status_observer_receiver_.BindNewPipeAndPassRemote();
host_status_observer_binding_.Bind(mojo::MakeRequest(&interface_ptr));
return interface_ptr;
} }
mojom::FeatureStateObserverPtr mojom::FeatureStateObserverPtr
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h" #include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace service_manager { namespace service_manager {
class Connector; class Connector;
...@@ -85,13 +87,15 @@ class MultiDeviceSetupClientImpl : public MultiDeviceSetupClient, ...@@ -85,13 +87,15 @@ class MultiDeviceSetupClientImpl : public MultiDeviceSetupClient,
GetEligibleHostDevicesCallback callback, GetEligibleHostDevicesCallback callback,
const multidevice::RemoteDeviceList& eligible_host_devices); const multidevice::RemoteDeviceList& eligible_host_devices);
mojom::HostStatusObserverPtr GenerateHostStatusObserverInterfacePtr(); mojo::PendingRemote<mojom::HostStatusObserver>
GenerateHostStatusObserverRemote();
mojom::FeatureStateObserverPtr GenerateFeatureStatesObserverInterfacePtr(); mojom::FeatureStateObserverPtr GenerateFeatureStatesObserverInterfacePtr();
void FlushForTesting(); void FlushForTesting();
mojom::MultiDeviceSetupPtr multidevice_setup_ptr_; mojom::MultiDeviceSetupPtr multidevice_setup_ptr_;
mojo::Binding<mojom::HostStatusObserver> host_status_observer_binding_; mojo::Receiver<mojom::HostStatusObserver> host_status_observer_receiver_{
this};
mojo::Binding<mojom::FeatureStateObserver> feature_state_observer_binding_; mojo::Binding<mojom::FeatureStateObserver> feature_state_observer_binding_;
std::unique_ptr<multidevice::RemoteDeviceCache> remote_device_cache_; std::unique_ptr<multidevice::RemoteDeviceCache> remote_device_cache_;
......
...@@ -142,8 +142,8 @@ interface MultiDeviceSetup { ...@@ -142,8 +142,8 @@ interface MultiDeviceSetup {
pending_remote<AccountStatusChangeDelegate> delegate); pending_remote<AccountStatusChangeDelegate> delegate);
// Adds an observer of host status changes. To stop observing, disconnect the // Adds an observer of host status changes. To stop observing, disconnect the
// HostStatusObserverPtr passed here. // pending_remote<HostStatusObserver> passed here.
AddHostStatusObserver(HostStatusObserver observer); AddHostStatusObserver(pending_remote<HostStatusObserver> observer);
// Adds an observer of feature state changes. To stop observing, disconnect // Adds an observer of feature state changes. To stop observing, disconnect
// the FeatureStateObserverPtr passed here. // the FeatureStateObserverPtr passed here.
......
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