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