#ifndef REMOTING_CLIENT_CHROMOTING_CLIENT_RUNTIME_H_
#define REMOTING_CLIENT_CHROMOTING_CLIENT_RUNTIME_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/sequence_bound.h"
#include "net/url_request/url_request_context_getter.h"
#include "remoting/base/auto_thread.h"
#include "remoting/base/oauth_token_getter.h"
#include "remoting/base/telemetry_log_writer.h"
namespace base {
class SingleThreadTaskExecutor;
template <typename T>
struct DefaultSingletonTraits;
}
namespace network {
class SharedURLLoaderFactory;
class TransitionalURLLoaderFactoryOwner;
}
namespace remoting {
class DirectoryServiceClient;
class ChromotingClientRuntime {
public:
class Delegate {
public:
virtual ~Delegate() {}
virtual void RuntimeWillShutdown() = 0;
virtual void RuntimeDidShutdown() = 0;
virtual base::WeakPtr<OAuthTokenGetter> oauth_token_getter() = 0;
};
static ChromotingClientRuntime* GetInstance();
ChromotingClientRuntime(const ChromotingClientRuntime&) = delete;
ChromotingClientRuntime& operator=(const ChromotingClientRuntime&) = delete;
void Init(ChromotingClientRuntime::Delegate* delegate);
std::unique_ptr<OAuthTokenGetter> CreateOAuthTokenGetter();
base::SequenceBound<DirectoryServiceClient> CreateDirectoryServiceClient();
scoped_refptr<AutoThreadTaskRunner> network_task_runner() {
return network_task_runner_;
}
scoped_refptr<AutoThreadTaskRunner> audio_task_runner() {
return audio_task_runner_;
}
scoped_refptr<AutoThreadTaskRunner> ui_task_runner() {
return ui_task_runner_;
}
scoped_refptr<AutoThreadTaskRunner> display_task_runner() {
return display_task_runner_;
}
scoped_refptr<net::URLRequestContextGetter> url_requester() {
return url_requester_;
}
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory();
ChromotingEventLogWriter* log_writer() { return log_writer_.get(); }
private:
ChromotingClientRuntime();
virtual ~ChromotingClientRuntime();
void InitializeOnNetworkThread();
std::unique_ptr<base::SingleThreadTaskExecutor> ui_task_executor_;
scoped_refptr<AutoThreadTaskRunner> ui_task_runner_;
scoped_refptr<AutoThreadTaskRunner> audio_task_runner_;
scoped_refptr<AutoThreadTaskRunner> display_task_runner_;
scoped_refptr<AutoThreadTaskRunner> network_task_runner_;
scoped_refptr<net::URLRequestContextGetter> url_requester_;
std::unique_ptr<network::TransitionalURLLoaderFactoryOwner>
url_loader_factory_owner_;
std::unique_ptr<TelemetryLogWriter> log_writer_;
raw_ptr<ChromotingClientRuntime::Delegate> delegate_ = nullptr;
friend struct base::DefaultSingletonTraits<ChromotingClientRuntime>;
};
}
#endif