Commit 72f515fa authored by Ken MacKay's avatar Ken MacKay Committed by Commit Bot

[Chromecast] Use a single underlying connection to the Mojo broker

Bug: internal b/158335072
Change-Id: Ic3413ccd9722a8fadc05fb36a8a2e9c821cf65ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2240275Reviewed-by: default avatarMichael Spang <spang@chromium.org>
Commit-Queue: Kenneth MacKay <kmackay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780326}
parent 23de21d5
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef CHROMECAST_EXTERNAL_MOJO_EXTERNAL_SERVICE_SUPPORT_EXTERNAL_CONNECTOR_IMPL_H_ #ifndef CHROMECAST_EXTERNAL_MOJO_EXTERNAL_SERVICE_SUPPORT_EXTERNAL_CONNECTOR_IMPL_H_
#define CHROMECAST_EXTERNAL_MOJO_EXTERNAL_SERVICE_SUPPORT_EXTERNAL_CONNECTOR_IMPL_H_ #define CHROMECAST_EXTERNAL_MOJO_EXTERNAL_SERVICE_SUPPORT_EXTERNAL_CONNECTOR_IMPL_H_
#include <cstdint>
#include <memory> #include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
...@@ -21,12 +22,16 @@ namespace chromecast { ...@@ -21,12 +22,16 @@ namespace chromecast {
namespace external_service_support { namespace external_service_support {
class ExternalConnectorImpl : public ExternalConnector { class ExternalConnectorImpl : public ExternalConnector {
class BrokerConnection;
public: public:
explicit ExternalConnectorImpl(const std::string& broker_path); explicit ExternalConnectorImpl(const std::string& broker_path);
explicit ExternalConnectorImpl( explicit ExternalConnectorImpl(
const std::string& broker_path, scoped_refptr<BrokerConnection> broker_connection);
// For in-process connectors only.
explicit ExternalConnectorImpl(
mojo::PendingRemote<external_mojo::mojom::ExternalConnector> mojo::PendingRemote<external_mojo::mojom::ExternalConnector>
connector_pending_remote); pending_remote);
~ExternalConnectorImpl() override; ~ExternalConnectorImpl() override;
// ExternalConnector implementation: // ExternalConnector implementation:
...@@ -55,27 +60,18 @@ class ExternalConnectorImpl : public ExternalConnector { ...@@ -55,27 +60,18 @@ class ExternalConnectorImpl : public ExternalConnector {
void BindInterfaceImmediately(const std::string& service_name, void BindInterfaceImmediately(const std::string& service_name,
const std::string& interface_name, const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe); mojo::ScopedMessagePipeHandle interface_pipe);
void Connect();
void OnMojoDisconnect(); void OnMojoDisconnect();
bool BindConnectorIfNecessary(); void BindConnectorIfNecessary();
void InitializeBrokerConnection();
void AttemptBrokerConnection();
std::string broker_path_; const scoped_refptr<BrokerConnection> broker_connection_;
int64_t connection_token_ = 0;
mojo::PendingRemote<external_mojo::mojom::ExternalConnector> pending_remote_;
mojo::Remote<external_mojo::mojom::ExternalConnector> connector_; mojo::Remote<external_mojo::mojom::ExternalConnector> connector_;
base::CallbackList<void()> error_callbacks_; base::CallbackList<void()> error_callbacks_;
// If connecting to a broker, |connector_pending_receiver_for_broker_| is used
// to keep |connector_| bound while waiting for the broker.
mojo::PendingReceiver<external_mojo::mojom::ExternalConnector>
connector_pending_receiver_for_broker_;
// If cloned, |connector_pending_remote_from_clone_| is stored until an IO
// operation is performed to ensure it happens on the correct sequence.
mojo::PendingRemote<external_mojo::mojom::ExternalConnector>
connector_pending_remote_from_clone_;
SEQUENCE_CHECKER(sequence_checker_); SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<ExternalConnectorImpl> weak_factory_{this}; base::WeakPtrFactory<ExternalConnectorImpl> weak_factory_{this};
......
...@@ -44,7 +44,7 @@ int main(int argc, char** argv) { ...@@ -44,7 +44,7 @@ int main(int argc, char** argv) {
chromecast::external_mojo::GetBrokerPath()); chromecast::external_mojo::GetBrokerPath());
chromecast::external_service_support::ExternalConnectorImpl tracing_connector( chromecast::external_service_support::ExternalConnectorImpl tracing_connector(
chromecast::external_mojo::GetBrokerPath(), broker.CreateConnector()); broker.CreateConnector());
auto tracing_client = auto tracing_client =
chromecast::external_service_support::TracingClient::Create( chromecast::external_service_support::TracingClient::Create(
&tracing_connector); &tracing_connector);
......
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