Commit a56bf1bc authored by Chris Letnick's avatar Chris Letnick Committed by Commit Bot

Add support to ExternalMojoBroker for more use cases.

1. Broker to take path in constructor.
2. Broker to create local InterfacePtr for ExternalConnector.

These changes support testing external mojo interfaces outside of
service manager, and with multiple instances.

Bug: internal 138940183
Test: Verified while testing external service.
Change-Id: I367495003c63daf5b1c701af343d8e8871646b18
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1737041Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Commit-Queue: Chris Letnick <cletnick@google.com>
Auto-Submit: Chris Letnick <cletnick@google.com>
Cr-Commit-Position: refs/heads/master@{#684229}
parent 55638937
......@@ -9,6 +9,7 @@ source_set("broker_service") {
]
deps = [
"//base",
"//chromecast/external_mojo/public/cpp:common",
"//chromecast/external_mojo/public/cpp:external_mojo_broker",
"//services/service_manager/public/cpp",
"//services/service_manager/public/mojom",
......
......@@ -14,6 +14,7 @@
#include "base/no_destructor.h"
#include "base/sequenced_task_runner.h"
#include "base/threading/thread.h"
#include "chromecast/external_mojo/public/cpp/common.h"
#include "chromecast/external_mojo/public/cpp/external_mojo_broker.h"
#include "services/service_manager/public/cpp/manifest_builder.h"
......@@ -68,7 +69,8 @@ BrokerService::BrokerService(service_manager::mojom::ServiceRequest request)
for (const auto& sub_manifest : manifest.packaged_services) {
external_services_to_proxy.push_back(sub_manifest.service_name);
}
broker_ = base::SequenceBound<ExternalMojoBroker>(io_thread_->task_runner());
broker_ = base::SequenceBound<ExternalMojoBroker>(io_thread_->task_runner(),
GetBrokerPath());
broker_.Post(FROM_HERE, &ExternalMojoBroker::InitializeChromium,
service_binding_.GetConnector()->Clone(),
external_services_to_proxy);
......
......@@ -70,6 +70,7 @@ executable("standalone_mojo_broker") {
deps = [
":process_setup",
"//base",
"//chromecast/external_mojo/public/cpp:common",
"//chromecast/external_mojo/public/cpp:external_mojo_broker",
"//mojo/core/embedder",
]
......
......@@ -11,6 +11,7 @@
#include "base/run_loop.h"
#include "base/task/single_thread_task_executor.h"
#include "chromecast/external_mojo/external_service_support/process_setup.h"
#include "chromecast/external_mojo/public/cpp/common.h"
#include "chromecast/external_mojo/public/cpp/external_mojo_broker.h"
#include "mojo/core/embedder/embedder.h"
#include "mojo/core/embedder/scoped_ipc_support.h"
......@@ -32,7 +33,8 @@ int main(int argc, char** argv) {
io_task_executor.task_runner(),
mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN);
chromecast::external_mojo::ExternalMojoBroker broker;
chromecast::external_mojo::ExternalMojoBroker broker(
chromecast::external_mojo::GetBrokerPath());
run_loop.Run();
......
......@@ -375,11 +375,13 @@ class ExternalMojoBroker::ReadWatcher
DISALLOW_COPY_AND_ASSIGN(ReadWatcher);
};
ExternalMojoBroker::ExternalMojoBroker() {
ExternalMojoBroker::ExternalMojoBroker(const std::string& broker_path) {
connector_ = std::make_unique<ConnectorImpl>();
LOG(INFO) << "Initializing external mojo broker at: " << broker_path;
mojo::NamedPlatformChannel::Options channel_options;
channel_options.server_name = GetBrokerPath();
channel_options.server_name = broker_path;
mojo::NamedPlatformChannel named_channel(channel_options);
mojo::PlatformChannelServerEndpoint server_endpoint =
......@@ -396,6 +398,12 @@ void ExternalMojoBroker::InitializeChromium(
external_services_to_proxy);
}
mojom::ExternalConnectorPtr ExternalMojoBroker::CreateConnector() {
mojom::ExternalConnectorPtrInfo info;
connector_->AddBinding(mojo::MakeRequest(&info));
return mojom::ExternalConnectorPtr(std::move(info));
}
ExternalMojoBroker::~ExternalMojoBroker() = default;
} // namespace external_mojo
......
......@@ -10,6 +10,7 @@
#include <vector>
#include "base/macros.h"
#include "chromecast/external_mojo/public/mojom/connector.mojom.h"
namespace service_manager {
class Connector;
......@@ -22,7 +23,8 @@ namespace external_mojo {
// either in a standalone broker process, or embedded into a Chromium process.
class ExternalMojoBroker {
public:
ExternalMojoBroker();
explicit ExternalMojoBroker(const std::string& broker_path);
~ExternalMojoBroker();
// Initializes the embedded into a Chromium process (eg in cast_shell).
......@@ -33,6 +35,8 @@ class ExternalMojoBroker {
std::unique_ptr<service_manager::Connector> connector,
const std::vector<std::string>& external_services_to_proxy);
mojom::ExternalConnectorPtr CreateConnector();
private:
class ConnectorImpl;
class ReadWatcher;
......
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