172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_RESOURCE_PROVIDERS_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_RESOURCE_PROVIDERS_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <map>
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector>
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/compiler_specific.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/process_util.h"
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/task_manager/task_manager.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/child_process_info.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h"
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BackgroundContents;
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass BalloonHost;
23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass Extension;
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass ExtensionHost;
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass RenderViewHost;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TabContentsWrapper;
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace prerender {
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PrerenderContents;
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// These file contains the resource providers used in the task manager.
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Base class for various types of render process resources that provides common
354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// functionality like stats tracking.
364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TaskManagerRendererResource : public TaskManager::Resource {
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  TaskManagerRendererResource(base::ProcessHandle process,
394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                              RenderViewHost* render_view_host);
404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~TaskManagerRendererResource();
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // TaskManager::Resource methods:
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual base::ProcessHandle GetProcess() const OVERRIDE;
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool ReportsCacheStats() const OVERRIDE;
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual WebKit::WebCache::ResourceTypeStats GetWebCoreCacheStats() const
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      OVERRIDE;
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool ReportsV8MemoryStats() const OVERRIDE;
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual size_t GetV8MemoryAllocated() const OVERRIDE;
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual size_t GetV8MemoryUsed() const OVERRIDE;
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // RenderResources always provide the network usage.
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual bool SupportNetworkUsage() const;
5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void SetSupportNetworkUsage() { }
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void Refresh();
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void NotifyResourceTypeStats(
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      const WebKit::WebCache::ResourceTypeStats& stats);
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void NotifyV8HeapStats(size_t v8_memory_allocated,
62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                 size_t v8_memory_used);
63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  base::ProcessHandle process_;
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int pid_;
674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // RenderViewHost we use to fetch stats.
694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  RenderViewHost* render_view_host_;
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The stats_ field holds information about resource usage in the renderer
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // process and so it is updated asynchronously by the Refresh() call.
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  WebKit::WebCache::ResourceTypeStats stats_;
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // This flag is true if we are waiting for the renderer to report its stats.
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool pending_stats_update_;
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // We do a similar dance to gather the V8 memory usage in a process.
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  size_t v8_memory_allocated_;
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  size_t v8_memory_used_;
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool pending_v8_memory_allocated_update_;
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TaskManagerRendererResource);
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TaskManagerTabContentsResource : public TaskManagerRendererResource {
854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  explicit TaskManagerTabContentsResource(TabContentsWrapper* tab_contents);
8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerTabContentsResource();
884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // TaskManager::Resource methods:
9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual TabContentsWrapper* GetTabContents() const OVERRIDE;
9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual const Extension* GetExtension() const OVERRIDE;
954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TabContentsWrapper* tab_contents_;
984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerTabContentsResource);
100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerTabContentsResourceProvider
103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public TaskManager::ResourceProvider,
104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      public NotificationObserver {
105bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
106bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerTabContentsResourceProvider(TaskManager* task_manager);
107bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
108bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
109bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int render_process_host_id,
110bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int routing_id);
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StartUpdating();
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StopUpdating();
113bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
114bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // NotificationObserver method:
115bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void Observe(NotificationType type,
116bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationSource& source,
117bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationDetails& details);
118bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
119bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
120bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~TaskManagerTabContentsResourceProvider();
121bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void Add(TabContentsWrapper* tab_contents);
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void Remove(TabContentsWrapper* tab_contents);
124bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void AddToTaskManager(TabContentsWrapper* tab_contents);
126bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
127bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Whether we are currently reporting to the task manager. Used to ignore
128bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // notifications sent after StopUpdating().
129bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool updating_;
130bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
131bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManager* task_manager_;
132bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Maps the actual resources (the TabContentsWrappers) to the Task Manager
134bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // resources.
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::map<TabContentsWrapper*, TaskManagerTabContentsResource*> resources_;
136bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
137bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // A scoped container for notification registries.
138bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NotificationRegistrar registrar_;
139bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
140bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerTabContentsResourceProvider);
141bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
142bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TaskManagerPrerenderResource : public TaskManagerRendererResource {
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  explicit TaskManagerPrerenderResource(RenderViewHost* render_view_host);
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~TaskManagerPrerenderResource();
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TaskManager::Resource methods:
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual Type GetType() const OVERRIDE;
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static SkBitmap* default_icon_;
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::pair<int, int> process_route_id_pair_;
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerPrerenderResource);
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TaskManagerPrerenderResourceProvider
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public TaskManager::ResourceProvider,
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      public NotificationObserver {
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  explicit TaskManagerPrerenderResourceProvider(TaskManager* task_manager);
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                             int render_process_host_id,
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                             int routing_id);
169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void StartUpdating();
170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void StopUpdating();
171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Observe(NotificationType type,
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       const NotificationSource& source,
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                       const NotificationDetails& details);
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~TaskManagerPrerenderResourceProvider();
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void Add(const std::pair<int, int>& process_route_id_pair);
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void Remove(const std::pair<int, int>& process_route_id_pair);
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void AddToTaskManager(const std::pair<int, int>& process_route_id_pair);
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool updating_;
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TaskManager* task_manager_;
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  typedef std::map<std::pair<int, int>, TaskManagerPrerenderResource*>
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ResourceMap;
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ResourceMap resources_;
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  NotificationRegistrar registrar_;
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerPrerenderResourceProvider);
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
1934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TaskManagerBackgroundContentsResource
1944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    : public TaskManagerRendererResource {
1954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
1964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  TaskManagerBackgroundContentsResource(
1974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      BackgroundContents* background_contents,
19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      const string16& application_name);
19921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerBackgroundContentsResource();
2004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // TaskManager::Resource methods:
20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool IsBackground() const OVERRIDE;
2054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const string16& application_name() const { return application_name_; }
2074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
2084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BackgroundContents* background_contents_;
2094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  string16 application_name_;
2114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The icon painted for BackgroundContents.
2134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // TODO(atwilson): Use the favicon when there's a way to get the favicon for
2144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // BackgroundContents.
2154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  static SkBitmap* default_icon_;
2164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TaskManagerBackgroundContentsResource);
2184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
2194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass TaskManagerBackgroundContentsResourceProvider
2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    : public TaskManager::ResourceProvider,
2224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      public NotificationObserver {
2234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
2244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  explicit TaskManagerBackgroundContentsResourceProvider(
2254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      TaskManager* task_manager);
2264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual TaskManager::Resource* GetResource(int origin_pid,
2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                             int render_process_host_id,
2294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                             int routing_id);
2304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void StartUpdating();
2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void StopUpdating();
2324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // NotificationObserver method:
2344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void Observe(NotificationType type,
2354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                       const NotificationSource& source,
2364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                       const NotificationDetails& details);
2374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
2394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~TaskManagerBackgroundContentsResourceProvider();
2404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
24172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void Add(BackgroundContents* background_contents, const string16& title);
2424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void Remove(BackgroundContents* background_contents);
2434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  void AddToTaskManager(BackgroundContents* background_contents,
24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        const string16& title);
2464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Whether we are currently reporting to the task manager. Used to ignore
2484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // notifications sent after StopUpdating().
2494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  bool updating_;
2504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  TaskManager* task_manager_;
2524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Maps the actual resources (the BackgroundContents) to the Task Manager
2544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // resources.
2554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::map<BackgroundContents*, TaskManagerBackgroundContentsResource*>
2564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch      resources_;
2574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // A scoped container for notification registries.
2594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  NotificationRegistrar registrar_;
2604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TaskManagerBackgroundContentsResourceProvider);
2624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
2634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
264bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerChildProcessResource : public TaskManager::Resource {
265bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  explicit TaskManagerChildProcessResource(const ChildProcessInfo& child_proc);
26721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerChildProcessResource();
268bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // TaskManager::Resource methods:
27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual base::ProcessHandle GetProcess() const OVERRIDE;
27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool SupportNetworkUsage() const OVERRIDE;
27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetSupportNetworkUsage() OVERRIDE;
276bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
277bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Returns the pid of the child process.
278bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int process_id() const { return pid_; }
279bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
280bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Returns a localized title for the child process.  For example, a plugin
282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // process would be "Plug-in: Flash" when name is "Flash".
283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  string16 GetLocalizedTitle() const;
284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
285bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ChildProcessInfo child_process_;
286bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int pid_;
28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  mutable string16 title_;
288bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool network_usage_support_;
289bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
290bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The icon painted for the child processs.
291bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // TODO(jcampan): we should have plugin specific icons for well-known
292bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // plugins.
293bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static SkBitmap* default_icon_;
294bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
295bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerChildProcessResource);
296bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
297bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
298bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerChildProcessResourceProvider
299bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public TaskManager::ResourceProvider,
300bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      public NotificationObserver {
301bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
302bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerChildProcessResourceProvider(TaskManager* task_manager);
303bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
304bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
305bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int render_process_host_id,
306bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int routing_id);
307bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StartUpdating();
308bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StopUpdating();
309bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
310bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // NotificationObserver method:
311bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void Observe(NotificationType type,
312bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationSource& source,
313bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationDetails& details);
314bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
315bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Retrieves the current ChildProcessInfo (performed in the IO thread).
316bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void RetrieveChildProcessInfo();
317bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
318bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Notifies the UI thread that the ChildProcessInfo have been retrieved.
319bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void ChildProcessInfoRetreived();
320bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
321bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Whether we are currently reporting to the task manager. Used to ignore
322bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // notifications sent after StopUpdating().
323bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool updating_;
324bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
325bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The list of ChildProcessInfo retrieved when starting the update.
326bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::vector<ChildProcessInfo> existing_child_process_info_;
327bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
328bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
329bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~TaskManagerChildProcessResourceProvider();
330bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Add(const ChildProcessInfo& child_process_info);
332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Remove(const ChildProcessInfo& child_process_info);
333bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void AddToTaskManager(const ChildProcessInfo& child_process_info);
335bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
336bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManager* task_manager_;
337bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
338bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Maps the actual resources (the ChildProcessInfo) to the Task Manager
339bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // resources.
340bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::map<ChildProcessInfo, TaskManagerChildProcessResource*> resources_;
341bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
342bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Maps the pids to the resources (used for quick access to the resource on
343bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // byte read notifications).
344bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::map<int, TaskManagerChildProcessResource*> pid_to_resources_;
345bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
346bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // A scoped container for notification registries.
347bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NotificationRegistrar registrar_;
348bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
349bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerChildProcessResourceProvider);
350bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
351bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
352bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerExtensionProcessResource : public TaskManager::Resource {
353bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
354bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerExtensionProcessResource(ExtensionHost* extension_host);
35521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerExtensionProcessResource();
356bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
35772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // TaskManager::Resource methods:
35872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
35972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
36072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual base::ProcessHandle GetProcess() const OVERRIDE;
36172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
36272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool SupportNetworkUsage() const OVERRIDE;
36372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetSupportNetworkUsage() OVERRIDE;
36472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual const Extension* GetExtension() const OVERRIDE;
365bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
366bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Returns the pid of the extension process.
367bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int process_id() const { return pid_; }
368bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
3694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Returns true if the associated extension has a background page.
37021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual bool IsBackground() const;
37121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
372bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
373bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The icon painted for the extension process.
374bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static SkBitmap* default_icon_;
375bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
376bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  ExtensionHost* extension_host_;
377bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
378bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Cached data about the extension.
379bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  base::ProcessHandle process_handle_;
380bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int pid_;
38172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  string16 title_;
382bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
383bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerExtensionProcessResource);
384bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
385bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
386bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerExtensionProcessResourceProvider
387bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public TaskManager::ResourceProvider,
388bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      public NotificationObserver {
389bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
390bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerExtensionProcessResourceProvider(
391bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      TaskManager* task_manager);
392bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
393bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
394bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int render_process_host_id,
395bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int routing_id);
396bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StartUpdating();
397bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StopUpdating();
398bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
399bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // NotificationObserver method:
400bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void Observe(NotificationType type,
401bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationSource& source,
402bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationDetails& details);
403bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
404bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
405bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~TaskManagerExtensionProcessResourceProvider();
406bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
407bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void AddToTaskManager(ExtensionHost* extension_host);
408bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void RemoveFromTaskManager(ExtensionHost* extension_host);
409bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
410bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManager* task_manager_;
411bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
412bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Maps the actual resources (ExtensionHost*) to the Task Manager resources.
413bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::map<ExtensionHost*, TaskManagerExtensionProcessResource*> resources_;
414bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
415bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Maps the pids to the resources (used for quick access to the resource on
416bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // byte read notifications).
417bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::map<int, TaskManagerExtensionProcessResource*> pid_to_resources_;
418bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
419bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // A scoped container for notification registries.
420bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NotificationRegistrar registrar_;
421bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
422bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool updating_;
423bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
424bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerExtensionProcessResourceProvider);
425bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
426bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
427bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerNotificationResource : public TaskManager::Resource {
428bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
429bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerNotificationResource(BalloonHost* balloon_host);
43021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerNotificationResource();
431bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
432bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // TaskManager::Resource interface
43372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
43472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
43572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual base::ProcessHandle GetProcess() const OVERRIDE;
43672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
43772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool SupportNetworkUsage() const OVERRIDE;
43872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetSupportNetworkUsage() OVERRIDE { }
439bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
440bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
441bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // The icon painted for notifications.       .
442bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static SkBitmap* default_icon_;
443bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
444bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Non-owned pointer to the balloon host.
445bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  BalloonHost* balloon_host_;
446bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
447bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Cached data about the balloon host.
448bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  base::ProcessHandle process_handle_;
449bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  int pid_;
45072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  string16 title_;
451bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
452bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerNotificationResource);
453bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
454bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
455bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerNotificationResourceProvider
456bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public TaskManager::ResourceProvider,
457bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      public NotificationObserver {
458bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
459bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerNotificationResourceProvider(TaskManager* task_manager);
460bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
461bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // TaskManager::ResourceProvider interface
462bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
463bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int render_process_host_id,
464bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int routing_id);
465bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StartUpdating();
466bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StopUpdating();
467bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
468bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // NotificationObserver interface
469bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void Observe(NotificationType type,
470bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationSource& source,
471bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                       const NotificationDetails& details);
472bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
473bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
474bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~TaskManagerNotificationResourceProvider();
475bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
476bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void AddToTaskManager(BalloonHost* balloon_host);
477bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void RemoveFromTaskManager(BalloonHost* balloon_host);
478bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
479bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManager* task_manager_;
480bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
481bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Maps the actual resources (BalloonHost*) to the Task Manager resources.
482bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::map<BalloonHost*, TaskManagerNotificationResource*> resources_;
483bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
484bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // A scoped container for notification registries.
485bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NotificationRegistrar registrar_;
486bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
487bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool updating_;
488bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
489bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerNotificationResourceProvider);
490bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
491bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
492bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerBrowserProcessResource : public TaskManager::Resource {
493bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
494bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManagerBrowserProcessResource();
49521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~TaskManagerBrowserProcessResource();
496bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
49772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // TaskManager::Resource methods:
49872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual string16 GetTitle() const OVERRIDE;
49972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual SkBitmap GetIcon() const OVERRIDE;
50072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual base::ProcessHandle GetProcess() const OVERRIDE;
50172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual Type GetType() const OVERRIDE;
502bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
50372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool SupportNetworkUsage() const OVERRIDE;
50472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void SetSupportNetworkUsage() OVERRIDE;
505bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
50672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool ReportsSqliteMemoryUsed() const OVERRIDE;
50772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual size_t SqliteMemoryUsedBytes() const OVERRIDE;
508bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
509bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
510bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  base::ProcessHandle process_;
51172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  mutable string16 title_;
512bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
513bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  static SkBitmap* default_icon_;
514bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
515bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserProcessResource);
516bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
517bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
518bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TaskManagerBrowserProcessResourceProvider
519bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen    : public TaskManager::ResourceProvider {
520bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
521bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  explicit TaskManagerBrowserProcessResourceProvider(
522bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      TaskManager* task_manager);
523bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
524bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual TaskManager::Resource* GetResource(int origin_pid,
525bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int render_process_host_id,
526bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                                             int routing_id);
527bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StartUpdating();
528bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual void StopUpdating();
529bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
530bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Whether we are currently reporting to the task manager. Used to ignore
531bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // notifications sent after StopUpdating().
532bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool updating_;
533bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
534bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
535bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~TaskManagerBrowserProcessResourceProvider();
536bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
537bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void AddToTaskManager(ChildProcessInfo child_process_info);
538bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
539bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManager* task_manager_;
540bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TaskManagerBrowserProcessResource resource_;
541bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
542bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserProcessResourceProvider);
543bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
544bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
545bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_RESOURCE_PROVIDERS_H_
546