blob: b65030ab1e46b593b156a431f6ea89f0d461833e [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_SERVICE_MANAGER_SERVICE_PROCESS_HOST_H_
#define SERVICES_SERVICE_MANAGER_SERVICE_PROCESS_HOST_H_
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "base/process/process_handle.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/service_manager/public/cpp/identity.h"
#include "services/service_manager/public/mojom/service.mojom.h"
#include "services/service_manager/sandbox/sandbox_type.h"
namespace service_manager {
// Interface which can be implemented to control launch and lifetime of service
// processes.
//
// TODO(https://crbug.com/781334): This should be the singular implementation of
// a service process host. More stuff needs to move out of Content first, so
// until then this exists so Service Manager can delegate.
class ServiceProcessHost {
public:
virtual ~ServiceProcessHost() {}
// Launches the service process. If called and successful, the process should
// be terminated on ServiceProcessHost destruction at the latest.
//
// Returns a valid remote endpoint for the Service.
//
// |callback| is eventually called with the ProcessId, which may be
// |base::kNullProcessId| if launching failed.
using LaunchCallback = base::OnceCallback<void(base::ProcessId)>;
virtual mojo::PendingRemote<mojom::Service> Launch(
const Identity& identity,
SandboxType sandbox_type,
LaunchCallback callback) = 0;
};
} // namespace service_manager
#endif // SERVICES_SERVICE_MANAGER_SERVICE_PROCESS_HOST_H_