blob: e9f2f89f67138734741b9210423045afbb3dedc5 [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 <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/process/process_handle.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "sandbox/policy/sandbox_type.h"
#include "services/service_manager/public/cpp/identity.h"
#include "services/service_manager/public/mojom/service.mojom.h"
#include "third_party/abseil-cpp/absl/types/optional.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,
sandbox::policy::SandboxType sandbox_type,
const std::u16string& display_name,
LaunchCallback callback) = 0;
};
} // namespace service_manager
#endif // SERVICES_SERVICE_MANAGER_SERVICE_PROCESS_HOST_H_