#ifndef SERVICES_SERVICE_MANAGER_BACKGROUND_SERVICE_MANAGER_H_
#define SERVICES_SERVICE_MANAGER_BACKGROUND_SERVICE_MANAGER_H_
#include <memory>
#include <vector>
#include "base/threading/thread.h"
#include "build/build_config.h"
#include "services/service_manager/public/cpp/manifest.h"
#include "services/service_manager/public/mojom/connector.mojom.h"
#include "services/service_manager/public/mojom/service.mojom.h"
namespace base {
class WaitableEvent;
}
namespace service_manager {
class Identity;
class ServiceManager;
class BackgroundServiceManager {
public:
explicit BackgroundServiceManager(const std::vector<Manifest>& manifests);
BackgroundServiceManager(const BackgroundServiceManager&) = delete;
BackgroundServiceManager& operator=(const BackgroundServiceManager&) = delete;
~BackgroundServiceManager();
void RegisterService(
const Identity& identity,
mojo::PendingRemote<mojom::Service> service,
mojo::PendingReceiver<mojom::ProcessMetadata> metadata_receiver);
private:
void InitializeOnBackgroundThread(const std::vector<Manifest>& manifests);
void ShutDownOnBackgroundThread(base::WaitableEvent* done_event);
void RegisterServiceOnBackgroundThread(
const Identity& identity,
mojo::PendingRemote<mojom::Service> service,
mojo::PendingReceiver<mojom::ProcessMetadata> metadata_receiver);
base::Thread background_thread_;
std::unique_ptr<ServiceManager> service_manager_;
};
}
#endif