#ifndef CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_RESOURCE_PROVIDERS_H_
#define CHROME_BROWSER_TASK_MANAGER_TASK_MANAGER_RESOURCE_PROVIDERS_H_
#include <map>
#include <vector>
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/process_util.h"
#include "chrome/browser/task_manager/task_manager.h"
#include "content/public/browser/child_process_data.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/common/process_type.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h"
class BackgroundContents;
class BalloonHost;
class TabContents;
class Panel;
namespace content {
class RenderViewHost;
}
namespace extensions {
class Extension;
}
class TaskManagerRendererResource : public TaskManager::Resource {
public:
TaskManagerRendererResource(base::ProcessHandle process,
content::RenderViewHost* render_view_host);
virtual ~TaskManagerRendererResource();
virtual base::ProcessHandle GetProcess() const OVERRIDE;
virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual int GetRoutingID() const OVERRIDE;
virtual bool ReportsCacheStats() const OVERRIDE;
virtual WebKit::WebCache::ResourceTypeStats GetWebCoreCacheStats() const
OVERRIDE;
virtual bool ReportsFPS() const OVERRIDE;
virtual float GetFPS() const OVERRIDE;
virtual bool ReportsV8MemoryStats() const OVERRIDE;
virtual size_t GetV8MemoryAllocated() const OVERRIDE;
virtual size_t GetV8MemoryUsed() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE { }
virtual void Refresh() OVERRIDE;
virtual void NotifyResourceTypeStats(
const WebKit::WebCache::ResourceTypeStats& stats) OVERRIDE;
virtual void NotifyFPS(float fps) OVERRIDE;
virtual void NotifyV8HeapStats(size_t v8_memory_allocated,
size_t v8_memory_used) OVERRIDE;
private:
base::ProcessHandle process_;
int pid_;
int unique_process_id_;
content::RenderViewHost* render_view_host_;
WebKit::WebCache::ResourceTypeStats stats_;
bool pending_stats_update_;
float fps_;
bool pending_fps_update_;
size_t v8_memory_allocated_;
size_t v8_memory_used_;
bool pending_v8_memory_allocated_update_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerRendererResource);
};
class TaskManagerTabContentsResource : public TaskManagerRendererResource {
public:
explicit TaskManagerTabContentsResource(TabContents* tab_contents);
virtual ~TaskManagerTabContentsResource();
void InstantCommitted();
virtual Type GetType() const OVERRIDE;
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual content::WebContents* GetWebContents() const OVERRIDE;
virtual const extensions::Extension* GetExtension() const OVERRIDE;
private:
bool IsPrerendering() const;
bool HostsExtension() const;
static gfx::ImageSkia* prerender_icon_;
TabContents* tab_contents_;
bool is_instant_preview_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerTabContentsResource);
};
class TaskManagerTabContentsResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
explicit TaskManagerTabContentsResourceProvider(TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
virtual ~TaskManagerTabContentsResourceProvider();
void Add(TabContents* tab_contents);
void Remove(TabContents* tab_contents);
void Update(TabContents* tab_contents);
void AddToTaskManager(TabContents* tab_contents);
bool updating_;
TaskManager* task_manager_;
std::map<TabContents*, TaskManagerTabContentsResource*> resources_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerTabContentsResourceProvider);
};
class TaskManagerPanelResource : public TaskManagerRendererResource {
public:
explicit TaskManagerPanelResource(Panel* panel);
virtual ~TaskManagerPanelResource();
virtual Type GetType() const OVERRIDE;
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual content::WebContents* GetWebContents() const OVERRIDE;
virtual const extensions::Extension* GetExtension() const OVERRIDE;
private:
Panel* panel_;
int message_prefix_id_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerPanelResource);
};
class TaskManagerPanelResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
explicit TaskManagerPanelResourceProvider(TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
virtual ~TaskManagerPanelResourceProvider();
void Add(Panel* panel);
void Remove(Panel* panel);
bool updating_;
TaskManager* task_manager_;
typedef std::map<Panel*, TaskManagerPanelResource*> PanelResourceMap;
PanelResourceMap resources_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerPanelResourceProvider);
};
class TaskManagerBackgroundContentsResource
: public TaskManagerRendererResource {
public:
TaskManagerBackgroundContentsResource(
BackgroundContents* background_contents,
const string16& application_name);
virtual ~TaskManagerBackgroundContentsResource();
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual bool IsBackground() const OVERRIDE;
const string16& application_name() const { return application_name_; }
private:
BackgroundContents* background_contents_;
string16 application_name_;
static gfx::ImageSkia* default_icon_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerBackgroundContentsResource);
};
class TaskManagerBackgroundContentsResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
explicit TaskManagerBackgroundContentsResourceProvider(
TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
virtual ~TaskManagerBackgroundContentsResourceProvider();
void Add(BackgroundContents* background_contents, const string16& title);
void Remove(BackgroundContents* background_contents);
void AddToTaskManager(BackgroundContents* background_contents,
const string16& title);
bool updating_;
TaskManager* task_manager_;
typedef std::map<BackgroundContents*, TaskManagerBackgroundContentsResource*>
Resources;
Resources resources_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerBackgroundContentsResourceProvider);
};
class TaskManagerChildProcessResource : public TaskManager::Resource {
public:
TaskManagerChildProcessResource(content::ProcessType type,
const string16& name,
base::ProcessHandle handle,
int unique_process_id);
virtual ~TaskManagerChildProcessResource();
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE;
int process_id() const { return pid_; }
private:
string16 GetLocalizedTitle() const;
content::ProcessType type_;
string16 name_;
base::ProcessHandle handle_;
int pid_;
int unique_process_id_;
mutable string16 title_;
bool network_usage_support_;
static gfx::ImageSkia* default_icon_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerChildProcessResource);
};
class TaskManagerChildProcessResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
explicit TaskManagerChildProcessResourceProvider(TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
virtual ~TaskManagerChildProcessResourceProvider();
virtual void RetrieveChildProcessData();
virtual void ChildProcessDataRetreived(
const std::vector<content::ChildProcessData>& child_processes);
void Add(const content::ChildProcessData& child_process_data);
void Remove(const content::ChildProcessData& child_process_data);
void AddToTaskManager(const content::ChildProcessData& child_process_data);
TaskManager* task_manager_;
bool updating_;
typedef std::map<base::ProcessHandle, TaskManagerChildProcessResource*>
ChildProcessMap;
ChildProcessMap resources_;
typedef std::map<int, TaskManagerChildProcessResource*> PidResourceMap;
PidResourceMap pid_to_resources_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerChildProcessResourceProvider);
};
class TaskManagerExtensionProcessResource : public TaskManager::Resource {
public:
explicit TaskManagerExtensionProcessResource(
content::RenderViewHost* render_view_host);
virtual ~TaskManagerExtensionProcessResource();
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE;
virtual const extensions::Extension* GetExtension() const OVERRIDE;
int process_id() const { return pid_; }
virtual bool IsBackground() const OVERRIDE;
private:
static gfx::ImageSkia* default_icon_;
content::RenderViewHost* render_view_host_;
base::ProcessHandle process_handle_;
int pid_;
int unique_process_id_;
string16 title_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerExtensionProcessResource);
};
class TaskManagerExtensionProcessResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
explicit TaskManagerExtensionProcessResourceProvider(
TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
virtual ~TaskManagerExtensionProcessResourceProvider();
bool IsHandledByThisProvider(content::RenderViewHost* render_view_host);
void AddToTaskManager(content::RenderViewHost* render_view_host);
void RemoveFromTaskManager(content::RenderViewHost* render_view_host);
TaskManager* task_manager_;
std::map<content::RenderViewHost*,
TaskManagerExtensionProcessResource*> resources_;
std::map<int, TaskManagerExtensionProcessResource*> pid_to_resources_;
content::NotificationRegistrar registrar_;
bool updating_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerExtensionProcessResourceProvider);
};
class TaskManagerNotificationResource : public TaskManager::Resource {
public:
explicit TaskManagerNotificationResource(BalloonHost* balloon_host);
virtual ~TaskManagerNotificationResource();
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool CanInspect() const OVERRIDE;
virtual void Inspect() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE { }
private:
static gfx::ImageSkia* default_icon_;
BalloonHost* balloon_host_;
base::ProcessHandle process_handle_;
int pid_;
int unique_process_id_;
string16 title_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerNotificationResource);
};
class TaskManagerNotificationResourceProvider
: public TaskManager::ResourceProvider,
public content::NotificationObserver {
public:
static TaskManagerNotificationResourceProvider* Create(
TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
explicit TaskManagerNotificationResourceProvider(TaskManager* task_manager);
virtual ~TaskManagerNotificationResourceProvider();
void AddToTaskManager(BalloonHost* balloon_host);
void RemoveFromTaskManager(BalloonHost* balloon_host);
TaskManager* task_manager_;
std::map<BalloonHost*, TaskManagerNotificationResource*> resources_;
content::NotificationRegistrar registrar_;
bool updating_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerNotificationResourceProvider);
};
class TaskManagerBrowserProcessResource : public TaskManager::Resource {
public:
TaskManagerBrowserProcessResource();
virtual ~TaskManagerBrowserProcessResource();
virtual string16 GetTitle() const OVERRIDE;
virtual string16 GetProfileName() const OVERRIDE;
virtual gfx::ImageSkia GetIcon() const OVERRIDE;
virtual base::ProcessHandle GetProcess() const OVERRIDE;
virtual int GetUniqueChildProcessId() const OVERRIDE;
virtual Type GetType() const OVERRIDE;
virtual bool SupportNetworkUsage() const OVERRIDE;
virtual void SetSupportNetworkUsage() OVERRIDE;
virtual bool ReportsSqliteMemoryUsed() const OVERRIDE;
virtual size_t SqliteMemoryUsedBytes() const OVERRIDE;
virtual bool ReportsV8MemoryStats() const OVERRIDE;
virtual size_t GetV8MemoryAllocated() const OVERRIDE;
virtual size_t GetV8MemoryUsed() const OVERRIDE;
private:
base::ProcessHandle process_;
mutable string16 title_;
static gfx::ImageSkia* default_icon_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserProcessResource);
};
class TaskManagerBrowserProcessResourceProvider
: public TaskManager::ResourceProvider {
public:
explicit TaskManagerBrowserProcessResourceProvider(
TaskManager* task_manager);
virtual TaskManager::Resource* GetResource(int origin_pid,
int render_process_host_id,
int routing_id) OVERRIDE;
virtual void StartUpdating() OVERRIDE;
virtual void StopUpdating() OVERRIDE;
bool updating_;
private:
virtual ~TaskManagerBrowserProcessResourceProvider();
TaskManager* task_manager_;
TaskManagerBrowserProcessResource resource_;
DISALLOW_COPY_AND_ASSIGN(TaskManagerBrowserProcessResourceProvider);
};
#endif