| // 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_ |