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