#ifndef CHROMECAST_EXTERNAL_MOJO_BROKER_SERVICE_BROKER_SERVICE_H_
#define CHROMECAST_EXTERNAL_MOJO_BROKER_SERVICE_BROKER_SERVICE_H_
#include <memory>
#include <string>
#include "base/memory/scoped_refptr.h"
#include "base/threading/sequence_bound.h"
#include "chromecast/external_mojo/public/mojom/connector.mojom.h"
#include "chromecast/mojo/interface_bundle.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "services/service_manager/public/cpp/manifest.h"
#include "services/service_manager/public/cpp/service.h"
#include "services/service_manager/public/cpp/service_receiver.h"
#include "services/service_manager/public/mojom/service.mojom.h"
namespace base {
class SequencedTaskRunner;
class Thread;
}
namespace service_manager {
class Connector;
}
namespace chromecast {
namespace external_mojo {
class ExternalMojoBroker;
class BrokerService : public ::service_manager::Service {
public:
static BrokerService* GetInstance();
static void ServiceRequestHandler(
mojo::PendingReceiver<service_manager::mojom::Service> receiver);
static constexpr char const* kServiceName = "external_mojo_broker";
static void AddExternalServiceManifest(service_manager::Manifest manifest);
static const service_manager::Manifest& GetManifest();
explicit BrokerService(service_manager::Connector* connector);
BrokerService(const BrokerService&) = delete;
BrokerService& operator=(const BrokerService&) = delete;
~BrokerService() override;
void OnConnect(const service_manager::BindSourceInfo& source,
const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe) override;
mojo::PendingRemote<mojom::ExternalConnector> CreateConnector();
private:
void BindServiceRequest(
mojo::PendingReceiver<service_manager::mojom::Service> receiver);
void BindConnector(mojo::PendingReceiver<mojom::ExternalConnector> receiver);
service_manager::ServiceReceiver service_receiver_{this};
std::unique_ptr<base::Thread> io_thread_;
scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
InterfaceBundle bundle_;
base::SequenceBound<ExternalMojoBroker> broker_;
};
}
}
#endif