// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_HEAP_PROFILING_MULTI_PROCESS_CLIENT_CONNECTION_MANAGER_H_ #define COMPONENTS_HEAP_PROFILING_MULTI_PROCESS_CLIENT_CONNECTION_MANAGER_H_ #include <unordered_set> #include "base/functional/callback_forward.h" #include "base/functional/callback_helpers.h" #include "base/gtest_prod_util.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/scoped_multi_source_observation.h" #include "components/services/heap_profiling/public/mojom/heap_profiling_service.mojom.h" #include "content/public/browser/browser_child_process_observer.h" #include "content/public/browser/child_process_data.h" #include "content/public/browser/render_process_host_creation_observer.h" #include "content/public/browser/render_process_host_observer.h" namespace content { class RenderProcessHost; } // namespace content namespace heap_profiling { class Controller; enum class Mode; // This class is responsible for connecting HeapProfilingClients to the // HeapProfilingService. // * It inherits from content::RenderProcessHostCreationObserver to listen for // the creation of the renderer processes. // * It registers itself as a content::BrowserChildProcessObserver to listen // for the creation of non-renderer processes. // When a new process is created, it checks the current |Mode| to see whether // the process should be profiled. If so, it grabs the HeapProfilingClient from // the newly created process and connects it to the HeapProfilingService. // // This class is intended to be used from the browser/privileged process of the // embedder. // // This class must be constructed/accessed/destroyed from the UI thread. // // This class can be subclassed for exactly one reason: to allow embedders to // override AllowedToProfileRenderer in order to prevent incognito renderers // from being profiled. class ClientConnectionManager : public content::BrowserChildProcessObserver, public content::RenderProcessHostCreationObserver, public content::RenderProcessHostObserver { … }; } // namespace heap_profiling #endif // COMPONENTS_HEAP_PROFILING_MULTI_PROCESS_CLIENT_CONNECTION_MANAGER_H_