#ifndef REMOTING_HOST_CHROMOTING_HOST_SERVICES_CLIENT_H_
#define REMOTING_HOST_CHROMOTING_HOST_SERVICES_CLIENT_H_
#include <memory>
#include "base/functional/callback.h"
#include "base/sequence_checker.h"
#include "base/thread_annotations.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/platform/named_platform_channel.h"
#include "remoting/host/chromoting_host_services_provider.h"
#include "remoting/host/mojom/chromoting_host_services.mojom.h"
namespace base {
class Environment;
}
namespace remoting {
class ChromotingHostServicesClient final
: public ChromotingHostServicesProvider {
public:
ChromotingHostServicesClient();
explicit ChromotingHostServicesClient(
const mojo::NamedPlatformChannel::ServerName& server_name);
ChromotingHostServicesClient(const ChromotingHostServicesClient&) = delete;
ChromotingHostServicesClient& operator=(const ChromotingHostServicesClient&) =
delete;
~ChromotingHostServicesClient() override;
static bool Initialize();
mojom::ChromotingSessionServices* GetSessionServices() const override;
void set_disconnect_handler(base::OnceClosure disconnect_handler) override;
private:
friend class ChromotingHostServicesClientTest;
using ConnectToServerCallback = base::RepeatingCallback<
mojo::PendingRemote<mojom::ChromotingHostServices>()>;
ChromotingHostServicesClient(std::unique_ptr<base::Environment> environment,
ConnectToServerCallback connect_to_server);
bool EnsureConnection();
bool EnsureSessionServicesBinding();
void OnDisconnected();
void OnSessionDisconnected();
SEQUENCE_CHECKER(sequence_checker_);
std::unique_ptr<base::Environment> environment_;
ConnectToServerCallback connect_to_server_;
mojo::Remote<mojom::ChromotingHostServices> remote_
GUARDED_BY_CONTEXT(sequence_checker_);
mojo::Remote<mojom::ChromotingSessionServices> session_services_remote_
GUARDED_BY_CONTEXT(sequence_checker_);
base::OnceClosure disconnect_handler_;
};
}
#endif