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 {
CfmBrowserService::CfmBrowserService()
: service_adaptor_(mojom::CfmBrowser::Name_, this) {
receivers_.set_disconnect_handler(base::BindRepeating(
&CfmBrowserService::OnServiceDisconnect, base::Unretained(this)));
&CfmBrowserService::OnMojoDisconnect, base::Unretained(this)));
}
CfmBrowserService::~CfmBrowserService() = default;
......@@ -27,10 +27,6 @@ bool CfmBrowserService::ServiceRequestReceived(const std::string& service_id) {
return true;
}
void CfmBrowserService::OnAdaptorConnect(bool success) {
VLOG_IF(3, success) << "mojom::CfmBrowser Service Adaptor is connected";
}
void CfmBrowserService::OnAdaptorDisconnect() {
LOG(ERROR) << "mojom::CfmBrowser Service Adaptor has been disconnected";
// CleanUp to follow the lifecycle of the primary CfmServiceContext
......@@ -43,7 +39,7 @@ void CfmBrowserService::OnBindService(
this, mojo::PendingReceiver<mojom::CfmBrowser>(std::move(receiver_pipe)));
}
void CfmBrowserService::OnServiceDisconnect() {
void CfmBrowserService::OnMojoDisconnect() {
VLOG(3) << "mojom::CfmBrowser disconnected";
}
......
......@@ -36,12 +36,14 @@ class CfmBrowserService : public CfmObserver,
// Forward |CfmObserver| implementation
bool ServiceRequestReceived(const std::string& interface_name) override;
// Forward |ServiceAdaptorDelegate| implementation
void OnAdaptorConnect(bool success) override;
// Disconnect handler for |mojom::CfmServiceAdaptor|
void OnAdaptorDisconnect() override;
// Forward |ServiceAdaptorDelegate| implementation
void OnBindService(mojo::ScopedMessagePipeHandle receiver_pipe) override;
virtual void OnServiceDisconnect();
// Disconnect handler for |mojom::CfmBrowser|
virtual void OnMojoDisconnect();
private:
ServiceAdaptor service_adaptor_;
......
......@@ -9,6 +9,10 @@
namespace chromeos {
namespace cfm {
void ServiceAdaptor::Delegate::OnAdaptorConnect(bool success) {}
void ServiceAdaptor::Delegate::OnAdaptorDisconnect() {}
ServiceAdaptor::ServiceAdaptor(std::string interface_name, Delegate* delegate)
: interface_name_(std::move(interface_name)), delegate_(delegate) {
DCHECK(delegate_);
......@@ -26,6 +30,13 @@ mojom::CfmServiceContext* ServiceAdaptor::GetContext() {
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() {
if (adaptor_.is_bound()) {
return;
......@@ -58,6 +69,7 @@ void ServiceAdaptor::OnAdaptorConnect(bool success) {
void ServiceAdaptor::OnAdaptorDisconnect() {
adaptor_.reset();
delegate_->OnAdaptorDisconnect();
}
......
......@@ -12,10 +12,13 @@
namespace chromeos {
namespace cfm {
// Abstract class that provides convience methods, allowing new CfM Services to
// register with the |CfmServiceContext|.
// Abstract class that provides convenience methods, allowing new CfM Services
// to register with the |CfmServiceContext| through its mojo |Interface|
class ServiceAdaptor : public mojom::CfmServiceAdaptor {
public:
using GetServiceCallback =
mojom::CfmServiceContext::RequestBindServiceCallback;
class Delegate {
public:
Delegate(const Delegate&) = delete;
......@@ -24,11 +27,11 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor {
// Called when the Service Adaptor has successfully connected to the
// |mojom::CfmServiceContext|
virtual void OnAdaptorConnect(bool success) = 0;
virtual void OnAdaptorConnect(bool success);
// Called if the mojom connection to the primary |mojom::CfmServiceContext|
// is disrupted.
virtual void OnAdaptorDisconnect() = 0;
virtual void OnAdaptorDisconnect();
// Called when attempting to Bind a mojom using using a message pipe of the
// given types PendingReceiver.
......@@ -49,6 +52,18 @@ class ServiceAdaptor : public mojom::CfmServiceAdaptor {
// Binds a |mojo::Remote| to the primary |mojom::CfmServiceContext|
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:
// Forward |mojom::CfmServiceAdaptor| implementation
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