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") { ...@@ -9,6 +9,7 @@ source_set("broker_service") {
] ]
deps = [ deps = [
"//base", "//base",
"//chromecast/external_mojo/public/cpp:common",
"//chromecast/external_mojo/public/cpp:external_mojo_broker", "//chromecast/external_mojo/public/cpp:external_mojo_broker",
"//services/service_manager/public/cpp", "//services/service_manager/public/cpp",
"//services/service_manager/public/mojom", "//services/service_manager/public/mojom",
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/no_destructor.h" #include "base/no_destructor.h"
#include "base/sequenced_task_runner.h" #include "base/sequenced_task_runner.h"
#include "base/threading/thread.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 "chromecast/external_mojo/public/cpp/external_mojo_broker.h"
#include "services/service_manager/public/cpp/manifest_builder.h" #include "services/service_manager/public/cpp/manifest_builder.h"
...@@ -68,7 +69,8 @@ BrokerService::BrokerService(service_manager::mojom::ServiceRequest request) ...@@ -68,7 +69,8 @@ BrokerService::BrokerService(service_manager::mojom::ServiceRequest request)
for (const auto& sub_manifest : manifest.packaged_services) { for (const auto& sub_manifest : manifest.packaged_services) {
external_services_to_proxy.push_back(sub_manifest.service_name); 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, broker_.Post(FROM_HERE, &ExternalMojoBroker::InitializeChromium,
service_binding_.GetConnector()->Clone(), service_binding_.GetConnector()->Clone(),
external_services_to_proxy); external_services_to_proxy);
......
...@@ -70,6 +70,7 @@ executable("standalone_mojo_broker") { ...@@ -70,6 +70,7 @@ executable("standalone_mojo_broker") {
deps = [ deps = [
":process_setup", ":process_setup",
"//base", "//base",
"//chromecast/external_mojo/public/cpp:common",
"//chromecast/external_mojo/public/cpp:external_mojo_broker", "//chromecast/external_mojo/public/cpp:external_mojo_broker",
"//mojo/core/embedder", "//mojo/core/embedder",
] ]
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/task/single_thread_task_executor.h" #include "base/task/single_thread_task_executor.h"
#include "chromecast/external_mojo/external_service_support/process_setup.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 "chromecast/external_mojo/public/cpp/external_mojo_broker.h"
#include "mojo/core/embedder/embedder.h" #include "mojo/core/embedder/embedder.h"
#include "mojo/core/embedder/scoped_ipc_support.h" #include "mojo/core/embedder/scoped_ipc_support.h"
...@@ -32,7 +33,8 @@ int main(int argc, char** argv) { ...@@ -32,7 +33,8 @@ int main(int argc, char** argv) {
io_task_executor.task_runner(), io_task_executor.task_runner(),
mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN); mojo::core::ScopedIPCSupport::ShutdownPolicy::CLEAN);
chromecast::external_mojo::ExternalMojoBroker broker; chromecast::external_mojo::ExternalMojoBroker broker(
chromecast::external_mojo::GetBrokerPath());
run_loop.Run(); run_loop.Run();
......
...@@ -375,11 +375,13 @@ class ExternalMojoBroker::ReadWatcher ...@@ -375,11 +375,13 @@ class ExternalMojoBroker::ReadWatcher
DISALLOW_COPY_AND_ASSIGN(ReadWatcher); DISALLOW_COPY_AND_ASSIGN(ReadWatcher);
}; };
ExternalMojoBroker::ExternalMojoBroker() { ExternalMojoBroker::ExternalMojoBroker(const std::string& broker_path) {
connector_ = std::make_unique<ConnectorImpl>(); connector_ = std::make_unique<ConnectorImpl>();
LOG(INFO) << "Initializing external mojo broker at: " << broker_path;
mojo::NamedPlatformChannel::Options channel_options; mojo::NamedPlatformChannel::Options channel_options;
channel_options.server_name = GetBrokerPath(); channel_options.server_name = broker_path;
mojo::NamedPlatformChannel named_channel(channel_options); mojo::NamedPlatformChannel named_channel(channel_options);
mojo::PlatformChannelServerEndpoint server_endpoint = mojo::PlatformChannelServerEndpoint server_endpoint =
...@@ -396,6 +398,12 @@ void ExternalMojoBroker::InitializeChromium( ...@@ -396,6 +398,12 @@ void ExternalMojoBroker::InitializeChromium(
external_services_to_proxy); 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; ExternalMojoBroker::~ExternalMojoBroker() = default;
} // namespace external_mojo } // namespace external_mojo
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <vector> #include <vector>
#include "base/macros.h" #include "base/macros.h"
#include "chromecast/external_mojo/public/mojom/connector.mojom.h"
namespace service_manager { namespace service_manager {
class Connector; class Connector;
...@@ -22,7 +23,8 @@ namespace external_mojo { ...@@ -22,7 +23,8 @@ namespace external_mojo {
// either in a standalone broker process, or embedded into a Chromium process. // either in a standalone broker process, or embedded into a Chromium process.
class ExternalMojoBroker { class ExternalMojoBroker {
public: public:
ExternalMojoBroker(); explicit ExternalMojoBroker(const std::string& broker_path);
~ExternalMojoBroker(); ~ExternalMojoBroker();
// Initializes the embedded into a Chromium process (eg in cast_shell). // Initializes the embedded into a Chromium process (eg in cast_shell).
...@@ -33,6 +35,8 @@ class ExternalMojoBroker { ...@@ -33,6 +35,8 @@ class ExternalMojoBroker {
std::unique_ptr<service_manager::Connector> connector, std::unique_ptr<service_manager::Connector> connector,
const std::vector<std::string>& external_services_to_proxy); const std::vector<std::string>& external_services_to_proxy);
mojom::ExternalConnectorPtr CreateConnector();
private: private:
class ConnectorImpl; class ConnectorImpl;
class ReadWatcher; 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