blob: 9a5179c4eeacf8bbfb2d831b4301836df490f3a8 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_SERVICE_HOST_SERVICE_PROCESS_TRACKER_H_
#define CONTENT_BROWSER_SERVICE_HOST_SERVICE_PROCESS_TRACKER_H_
#include <map>
#include <optional>
#include <string>
#include "base/observer_list.h"
#include "base/process/process.h"
#include "content/browser/service_host/utility_process_host.h"
#include "content/public/browser/service_process_host.h"
#include "content/public/browser/service_process_info.h"
#include "url/gurl.h"
namespace content {
// This class keeps track of all the UtilityProcessHosts and coordinates
// the notification system to the ServiceHost observers.
class ServiceProcessTracker {
public:
ServiceProcessTracker();
ServiceProcessTracker(const ServiceProcessTracker&) = delete;
ServiceProcessTracker& operator=(const ServiceProcessTracker&) = delete;
~ServiceProcessTracker();
ServiceProcessInfo AddProcess(base::Process process,
const std::optional<GURL>& site,
const std::string& service_interface_name);
void NotifyTerminated(ServiceProcessId id);
void NotifyCrashed(ServiceProcessId id,
UtilityProcessHost::Client::CrashType type);
void AddObserver(ServiceProcessHost::Observer* observer);
void RemoveObserver(ServiceProcessHost::Observer* observer);
std::vector<ServiceProcessInfo> GetProcesses();
private:
ServiceProcessId GenerateNextId();
ServiceProcessId::Generator service_process_id_generator_;
std::map<ServiceProcessId, ServiceProcessInfo> processes_;
// Observers are owned and used exclusively on the UI thread.
base::ObserverList<ServiceProcessHost::Observer> observers_;
};
ServiceProcessTracker& GetServiceProcessTracker();
} // namespace content
#endif // CONTENT_BROWSER_SERVICE_HOST_SERVICE_PROCESS_TRACKER_H_