1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_TASK_MANAGER_PROVIDERS_SPARE_RENDER_PROCESS_HOST_TASK_PROVIDER_H_
6 #define CHROME_BROWSER_TASK_MANAGER_PROVIDERS_SPARE_RENDER_PROCESS_HOST_TASK_PROVIDER_H_
7 
8 #include <memory>
9 
10 #include "base/callback_list.h"
11 #include "chrome/browser/task_manager/providers/task_provider.h"
12 #include "content/public/browser/render_process_host.h"
13 
14 namespace task_manager {
15 
16 class ChildProcessTask;
17 
18 // This provides a task that represents the spare RenderProcessHost process.
19 class SpareRenderProcessHostTaskProvider : public TaskProvider {
20  public:
21   SpareRenderProcessHostTaskProvider();
22   ~SpareRenderProcessHostTaskProvider() override;
23   SpareRenderProcessHostTaskProvider(
24       const SpareRenderProcessHostTaskProvider&) = delete;
25   SpareRenderProcessHostTaskProvider& operator=(
26       const SpareRenderProcessHostTaskProvider&) = delete;
27 
28   // task_manager::TaskProvider:
29   Task* GetTaskOfUrlRequest(int child_id, int route_id) override;
30 
31  private:
32   friend class SpareRenderProcessHostTaskTest;
33 
34   // task_manager::TaskProvider:
35   void StartUpdating() override;
36   void StopUpdating() override;
37 
38   void SpareRenderProcessHostTaskChanged(content::RenderProcessHost* host);
39 
40   // The one task representing the spare render process host. If null, there is
41   // no current spare render process host.
42   std::unique_ptr<ChildProcessTask> task_;
43 
44   // The subscription to the notifications of the spare host changing.
45   std::unique_ptr<
46       base::CallbackList<void(content::RenderProcessHost*)>::Subscription>
47       subscription_;
48 };
49 
50 }  // namespace task_manager
51 
52 #endif  // CHROME_BROWSER_TASK_MANAGER_PROVIDERS_SPARE_RENDER_PROCESS_HOST_TASK_PROVIDER_H_
53