blob: 86b8c9c12d306722f0feaa668d5fb872198e2121 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/callback.h"
#include "base/process/process_handle.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "sandbox/policy/mojom/sandbox.mojom.h"
#include "services/service_manager/public/cpp/identity.h"
#include "services/service_manager/public/mojom/service.mojom.h"
namespace service_manager {
// Interface which can be implemented to control launch and lifetime of service
// processes.
// TODO( 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 {
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,
sandbox::mojom::Sandbox sandbox_type,
const std::u16string& display_name,
LaunchCallback callback) = 0;
} // namespace service_manager