// 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/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);

  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_
