Commit 0b2a2168 authored by Kyle Williams's avatar Kyle Williams Committed by Commit Bot

chromebox_for_meeting: Add convenience method for requesting services

Adds GetService to ServiceAdaptor to access CfM services from the
CfmServiceContext.

BUG=chromium:1105567, b:165864612
TEST='autoninja -C out/Default/ chrome/test:unit_tests && \
     xvfb-run ./out/Default/unit_tests \
     --gtest_filter=CfmServiceAdaptorTest.*'

Change-Id: I33368364c7aaf2532f0bd593439ee3be21d415dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2480583Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Commit-Queue: Kyle Williams <kdgwill@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821700}
parent cdf6ff9e
...@@ -14,7 +14,7 @@ namespace cfm { ...@@ -14,7 +14,7 @@ namespace cfm {
CfmBrowserService::CfmBrowserService() CfmBrowserService::CfmBrowserService()
: service_adaptor_(mojom::CfmBrowser::Name_, this) { : service_adaptor_(mojom::CfmBrowser::Name_, this) {
receivers_.set_disconnect_handler(base::BindRepeating( receivers_.set_disconnect_handler(base::BindRepeating(
&CfmBrowserService::OnServiceDisconnect, base::Unretained(this))); &CfmBrowserService::OnMojoDisconnect, base::Unretained(this)));
} }
CfmBrowserService::~CfmBrowserService() = default; CfmBrowserService::~CfmBrowserService() = default;
...@@ -27,10 +27,6 @@ bool CfmBrowserService::ServiceRequestReceived(const std::string& service_id) { ...@@ -27,10 +27,6 @@ bool CfmBrowserService::ServiceRequestReceived(const std::string& service_id) {
return true; return true;
} }
void CfmBrowserService::OnAdaptorConnect(bool success) {
VLOG_IF(3, success) << "mojom::CfmBrowser Service Adaptor is connected";
}
void CfmBrowserService::OnAdaptorDisconnect() { void CfmBrowserService::OnAdaptorDisconnect() {
LOG(ERROR) << "mojom::CfmBrowser Service Adaptor has been disconnected"; LOG(ERROR) << "mojom::CfmBrowser Service Adaptor has been disconnected";
// CleanUp to follow the lifecycle of the primary CfmServiceContext // CleanUp to follow the lifecycle of the primary CfmServiceContext
...@@ -43,7 +39,7 @@ void CfmBrowserService::OnBindService( ...@@ -43,7 +39,7 @@ void CfmBrowserService::OnBindService(
this, mojo::PendingReceiver<mojom::CfmBrowser>(std::move(receiver_pipe))); this, mojo::PendingReceiver<mojom::CfmBrowser>(std::move(receiver_pipe)));
} }
void CfmBrowserService::OnServiceDisconnect() { void CfmBrowserService::OnMojoDisconnect() {
VLOG(3) << "mojom::CfmBrowser disconnected"; VLOG(3) << "mojom::CfmBrowser disconnected";
} }
......
...@@ -36,12 +36,14 @@ class CfmBrowserService : public CfmObserver, ...@@ -36,12 +36,14 @@ class CfmBrowserService : public CfmObserver,
// Forward |CfmObserver| implementation // Forward |CfmObserver| implementation
bool ServiceRequestReceived(const std::string& interface_name) override; bool ServiceRequestReceived(const std::string& interface_name) override;
// Forward |ServiceAdaptorDelegate| implementation // Disconnect handler for |mojom::CfmServiceAdaptor|
void OnAdaptorConnect(bool success) override;
void OnAdaptorDisconnect() override; void OnAdaptorDisconnect() override;
// Forward |ServiceAdaptorDelegate| implementation
void OnBindService(mojo::ScopedMessagePipeHandle receiver_pipe) override; void OnBindService(mojo::ScopedMessagePipeHandle receiver_pipe) override;
virtual void OnServiceDisconnect(); // Disconnect handler for |mojom::CfmBrowser|
virtual void OnMojoDisconnect();
private: private:
ServiceAdaptor service_adaptor_; ServiceAdaptor service_adaptor_;
......
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
namespace chromeos { namespace chromeos {
namespace cfm { namespace cfm {
void ServiceAdaptor::Delegate::OnAdaptorConnect(bool success) {}
void ServiceAdaptor::Delegate::OnAdaptorDisconnect() {}
ServiceAdaptor::ServiceAdaptor(std::string interface_name, Delegate* delegate) ServiceAdaptor::ServiceAdaptor(std::string interface_name, Delegate* delegate)
: interface_name_(std::move(interface_name)), delegate_(delegate) { : interface_name_(std::move(interface_name)), delegate_(delegate) {
DCHECK(delegate_); DCHECK(delegate_);
...@@ -26,6 +30,13 @@ mojom::CfmServiceContext* ServiceAdaptor::GetContext() { ...@@ -26,6 +30,13 @@ mojom::CfmServiceContext* ServiceAdaptor::GetContext() {
return context_.get(); return context_.get();
} }
void ServiceAdaptor::GetService(std::string interface_name,
mojo::ScopedMessagePipeHandle receiver_pipe,
GetServiceCallback callback) {
GetContext()->RequestBindService(
std::move(interface_name), std::move(receiver_pipe), std::move(callback));
}
void ServiceAdaptor::BindServiceAdaptor() { void ServiceAdaptor::BindServiceAdaptor() {
if (adaptor_.is_bound()) { if (adaptor_.is_bound()) {
return; return;
...@@ -58,6 +69,7 @@ void ServiceAdaptor::OnAdaptorConnect(bool success) { ...@@ -58,6 +69,7 @@ void ServiceAdaptor::OnAdaptorConnect(bool success) {
void ServiceAdaptor::OnAdaptorDisconnect() { void ServiceAdaptor::OnAdaptorDisconnect() {
adaptor_.reset(); adaptor_.reset();
delegate_->OnAdaptorDisconnect(); delegate_->OnAdaptorDisconnect();
} }
......
...@@ -12,10 +12,13 @@ ...@@ -12,10 +12,13 @@
namespace chromeos { namespace chromeos {
namespace cfm { namespace cfm {
// Abstract class that provides convience methods, allowing new CfM Services to // Abstract class that provides convenience methods, allowing new CfM Services
// register with the |CfmServiceContext|. // to register with the |CfmServiceContext| through its mojo |Interface|
class ServiceAdaptor : public mojom::CfmServiceAdaptor { class ServiceAdaptor : public mojom::CfmServiceAdaptor {
public: public:
using GetServiceCallback =
mojom::CfmServiceContext::RequestBindServiceCallback;
class Delegate { class Delegate {
public: public:
Delegate(const Delegate&) = delete; Delegate(const Delegate&) = delete;
...@@ -24,11 +27,11 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor { ...@@ -24,11 +27,11 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor {
// Called when the Service Adaptor has successfully connected to the // Called when the Service Adaptor has successfully connected to the
// |mojom::CfmServiceContext| // |mojom::CfmServiceContext|
virtual void OnAdaptorConnect(bool success) = 0; virtual void OnAdaptorConnect(bool success);
// Called if the mojom connection to the primary |mojom::CfmServiceContext| // Called if the mojom connection to the primary |mojom::CfmServiceContext|
// is disrupted. // is disrupted.
virtual void OnAdaptorDisconnect() = 0; virtual void OnAdaptorDisconnect();
// Called when attempting to Bind a mojom using using a message pipe of the // Called when attempting to Bind a mojom using using a message pipe of the
// given types PendingReceiver. // given types PendingReceiver.
...@@ -49,6 +52,18 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor { ...@@ -49,6 +52,18 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor {
// Binds a |mojo::Remote| to the primary |mojom::CfmServiceContext| // Binds a |mojo::Remote| to the primary |mojom::CfmServiceContext|
virtual void BindServiceAdaptor(); virtual void BindServiceAdaptor();
template <typename Interface>
void GetService(mojo::Remote<Interface>& remote,
GetServiceCallback callback) {
GetService(Interface::Name_,
std::move(remote.BindNewPipeAndPassReceiver()).PassPipe(),
std::move(callback));
}
virtual void GetService(std::string interface_name,
mojo::ScopedMessagePipeHandle receiver_pipe,
GetServiceCallback callback);
protected: protected:
// Forward |mojom::CfmServiceAdaptor| implementation // Forward |mojom::CfmServiceAdaptor| implementation
void OnBindService(mojo::ScopedMessagePipeHandle receiver_pipe) override; void OnBindService(mojo::ScopedMessagePipeHandle receiver_pipe) override;
......
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