#ifndef REMOTING_HOST_CHROMOTING_HOST_CONTEXT_H_
#define REMOTING_HOST_CHROMOTING_HOST_CONTEXT_H_
#include <memory>
#include "base/functional/callback_forward.h"
#include "base/memory/scoped_refptr.h"
#include "build/build_config.h"
#include "components/policy/core/common/management/platform_management_service.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace net {
class ClientCertStore;
class URLRequestContextGetter;
}
namespace network {
class SharedURLLoaderFactory;
}
namespace remoting {
class AutoThreadTaskRunner;
class ChromotingHostContext {
public:
using CreateClientCertStoreCallback =
base::RepeatingCallback<std::unique_ptr<net::ClientCertStore>()>;
#if BUILDFLAG(IS_CHROMEOS)
static std::unique_ptr<ChromotingHostContext> CreateForChromeOS(
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory,
CreateClientCertStoreCallback create_client_cert_store);
#else
static std::unique_ptr<ChromotingHostContext> Create(
scoped_refptr<AutoThreadTaskRunner> ui_task_runner);
#endif
static std::unique_ptr<ChromotingHostContext> CreateForTesting(
scoped_refptr<AutoThreadTaskRunner> ui_task_runner,
scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory);
ChromotingHostContext(const ChromotingHostContext&) = delete;
ChromotingHostContext& operator=(const ChromotingHostContext&) = delete;
virtual ~ChromotingHostContext();
virtual std::unique_ptr<ChromotingHostContext> Copy() = 0;
virtual std::unique_ptr<net::ClientCertStore> CreateClientCertStore()
const = 0;
virtual scoped_refptr<net::URLRequestContextGetter>
url_request_context_getter() const = 0;
virtual scoped_refptr<network::SharedURLLoaderFactory>
url_loader_factory() = 0;
virtual CreateClientCertStoreCallback create_client_cert_store_callback()
const = 0;
scoped_refptr<AutoThreadTaskRunner> ui_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> audio_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> file_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> input_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> network_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner() const;
scoped_refptr<AutoThreadTaskRunner> video_encode_task_runner() const;
policy::ManagementService* management_service();
protected:
ChromotingHostContext(
scoped_refptr<AutoThreadTaskRunner> ui_task_runner,
scoped_refptr<AutoThreadTaskRunner> audio_task_runner,
scoped_refptr<AutoThreadTaskRunner> file_task_runner,
scoped_refptr<AutoThreadTaskRunner> input_task_runner,
scoped_refptr<AutoThreadTaskRunner> network_task_runner,
scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner,
scoped_refptr<AutoThreadTaskRunner> video_encode_task_runner);
private:
scoped_refptr<AutoThreadTaskRunner> ui_task_runner_;
scoped_refptr<AutoThreadTaskRunner> audio_task_runner_;
scoped_refptr<AutoThreadTaskRunner> file_task_runner_;
scoped_refptr<AutoThreadTaskRunner> input_task_runner_;
scoped_refptr<AutoThreadTaskRunner> network_task_runner_;
scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner_;
scoped_refptr<AutoThreadTaskRunner> video_encode_task_runner_;
};
}
#endif