| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/task_manager/task_manager_resource_providers.h" | 5 #include "chrome/browser/task_manager/task_manager_resource_providers.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 if (process_manager) { | 1252 if (process_manager) { |
| 1253 const ExtensionProcessManager::ViewSet all_views = | 1253 const ExtensionProcessManager::ViewSet all_views = |
| 1254 process_manager->GetAllViews(); | 1254 process_manager->GetAllViews(); |
| 1255 ExtensionProcessManager::ViewSet::const_iterator jt = all_views.begin(); | 1255 ExtensionProcessManager::ViewSet::const_iterator jt = all_views.begin(); |
| 1256 for (; jt != all_views.end(); ++jt) { | 1256 for (; jt != all_views.end(); ++jt) { |
| 1257 content::RenderViewHost* rvh = *jt; | 1257 content::RenderViewHost* rvh = *jt; |
| 1258 // Don't add dead extension processes. | 1258 // Don't add dead extension processes. |
| 1259 if (!rvh->IsRenderViewLive()) | 1259 if (!rvh->IsRenderViewLive()) |
| 1260 continue; | 1260 continue; |
| 1261 | 1261 |
| 1262 // Don't add WebContents (those are handled by | |
| 1263 // TaskManagerTabContentsResourceProvider) or background contents | |
| 1264 // (handled by TaskManagerBackgroundResourceProvider). | |
| 1265 // TODO(benwells): create specific chrome::VIEW_TYPE_TAB_CONTENTS for | |
| 1266 // tab contents, as VIEW_TYPE_WEB_CONTENTS is the default. | |
| 1267 content::ViewType view_type = rvh->GetDelegate()->GetRenderViewType(); | |
| 1268 if (view_type == content::VIEW_TYPE_WEB_CONTENTS || | |
| 1269 view_type == chrome::VIEW_TYPE_BACKGROUND_CONTENTS) { | |
| 1270 continue; | |
| 1271 } | |
| 1272 | |
| 1273 AddToTaskManager(rvh); | 1262 AddToTaskManager(rvh); |
| 1274 } | 1263 } |
| 1275 } | 1264 } |
| 1276 } | 1265 } |
| 1277 | 1266 |
| 1278 // Register for notifications about extension process changes. | 1267 // Register for notifications about extension process changes. |
| 1279 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_CREATED, | 1268 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED, |
| 1280 content::NotificationService::AllBrowserContextsAndSources()); | 1269 content::NotificationService::AllBrowserContextsAndSources()); |
| 1281 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, | 1270 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, |
| 1282 content::NotificationService::AllBrowserContextsAndSources()); | 1271 content::NotificationService::AllBrowserContextsAndSources()); |
| 1283 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 1272 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED, |
| 1284 content::NotificationService::AllBrowserContextsAndSources()); | 1273 content::NotificationService::AllBrowserContextsAndSources()); |
| 1285 } | 1274 } |
| 1286 | 1275 |
| 1287 void TaskManagerExtensionProcessResourceProvider::StopUpdating() { | 1276 void TaskManagerExtensionProcessResourceProvider::StopUpdating() { |
| 1288 DCHECK(updating_); | 1277 DCHECK(updating_); |
| 1289 updating_ = false; | 1278 updating_ = false; |
| 1290 | 1279 |
| 1291 // Unregister for notifications about extension process changes. | 1280 // Unregister for notifications about extension process changes. |
| 1292 registrar_.Remove( | 1281 registrar_.Remove( |
| 1293 this, chrome::NOTIFICATION_EXTENSION_HOST_CREATED, | 1282 this, chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED, |
| 1294 content::NotificationService::AllBrowserContextsAndSources()); | 1283 content::NotificationService::AllBrowserContextsAndSources()); |
| 1295 registrar_.Remove( | 1284 registrar_.Remove( |
| 1296 this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, | 1285 this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, |
| 1297 content::NotificationService::AllBrowserContextsAndSources()); | 1286 content::NotificationService::AllBrowserContextsAndSources()); |
| 1298 registrar_.Remove( | 1287 registrar_.Remove( |
| 1299 this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 1288 this, chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED, |
| 1300 content::NotificationService::AllBrowserContextsAndSources()); | 1289 content::NotificationService::AllBrowserContextsAndSources()); |
| 1301 | 1290 |
| 1302 // Delete all the resources. | 1291 // Delete all the resources. |
| 1303 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); | 1292 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); |
| 1304 | 1293 |
| 1305 resources_.clear(); | 1294 resources_.clear(); |
| 1306 pid_to_resources_.clear(); | 1295 pid_to_resources_.clear(); |
| 1307 } | 1296 } |
| 1308 | 1297 |
| 1309 void TaskManagerExtensionProcessResourceProvider::Observe( | 1298 void TaskManagerExtensionProcessResourceProvider::Observe( |
| 1310 int type, | 1299 int type, |
| 1311 const content::NotificationSource& source, | 1300 const content::NotificationSource& source, |
| 1312 const content::NotificationDetails& details) { | 1301 const content::NotificationDetails& details) { |
| 1313 switch (type) { | 1302 switch (type) { |
| 1314 case chrome::NOTIFICATION_EXTENSION_HOST_CREATED: | 1303 case chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED: |
| 1315 AddToTaskManager( | 1304 AddToTaskManager( |
| 1305 content::Details<content::RenderViewHost>(details).ptr()); |
| 1306 break; |
| 1307 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: |
| 1308 RemoveFromTaskManager( |
| 1316 content::Details<ExtensionHost>(details).ptr()->render_view_host()); | 1309 content::Details<ExtensionHost>(details).ptr()->render_view_host()); |
| 1317 break; | 1310 break; |
| 1318 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: | 1311 case chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED: |
| 1319 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: | |
| 1320 RemoveFromTaskManager( | 1312 RemoveFromTaskManager( |
| 1321 content::Details<ExtensionHost>(details).ptr()->render_view_host()); | 1313 content::Details<content::RenderViewHost>(details).ptr()); |
| 1322 break; | 1314 break; |
| 1323 default: | 1315 default: |
| 1324 NOTREACHED() << "Unexpected notification."; | 1316 NOTREACHED() << "Unexpected notification."; |
| 1325 return; | 1317 return; |
| 1326 } | 1318 } |
| 1327 } | 1319 } |
| 1328 | 1320 |
| 1321 bool TaskManagerExtensionProcessResourceProvider:: |
| 1322 IsHandledByThisProvider(content::RenderViewHost* render_view_host) { |
| 1323 // Don't add WebContents (those are handled by |
| 1324 // TaskManagerTabContentsResourceProvider) or background contents (handled |
| 1325 // by TaskManagerBackgroundResourceProvider). |
| 1326 // TODO(benwells): create specific chrome::VIEW_TYPE_TAB_CONTENTS for |
| 1327 // tab contents, as VIEW_TYPE_WEB_CONTENTS is the default. |
| 1328 content::ViewType view_type = |
| 1329 render_view_host->GetDelegate()->GetRenderViewType(); |
| 1330 return (view_type != content::VIEW_TYPE_WEB_CONTENTS && |
| 1331 view_type != chrome::VIEW_TYPE_BACKGROUND_CONTENTS); |
| 1332 } |
| 1333 |
| 1329 void TaskManagerExtensionProcessResourceProvider::AddToTaskManager( | 1334 void TaskManagerExtensionProcessResourceProvider::AddToTaskManager( |
| 1330 content::RenderViewHost* render_view_host) { | 1335 content::RenderViewHost* render_view_host) { |
| 1336 if (!IsHandledByThisProvider(render_view_host)) |
| 1337 return; |
| 1338 |
| 1331 TaskManagerExtensionProcessResource* resource = | 1339 TaskManagerExtensionProcessResource* resource = |
| 1332 new TaskManagerExtensionProcessResource(render_view_host); | 1340 new TaskManagerExtensionProcessResource(render_view_host); |
| 1333 DCHECK(resources_.find(render_view_host) == resources_.end()); | 1341 DCHECK(resources_.find(render_view_host) == resources_.end()); |
| 1334 resources_[render_view_host] = resource; | 1342 resources_[render_view_host] = resource; |
| 1335 pid_to_resources_[resource->process_id()] = resource; | 1343 pid_to_resources_[resource->process_id()] = resource; |
| 1336 task_manager_->AddResource(resource); | 1344 task_manager_->AddResource(resource); |
| 1337 } | 1345 } |
| 1338 | 1346 |
| 1339 void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager( | 1347 void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager( |
| 1340 content::RenderViewHost* render_view_host) { | 1348 content::RenderViewHost* render_view_host) { |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1492 | 1500 |
| 1493 return &resource_; | 1501 return &resource_; |
| 1494 } | 1502 } |
| 1495 | 1503 |
| 1496 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { | 1504 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { |
| 1497 task_manager_->AddResource(&resource_); | 1505 task_manager_->AddResource(&resource_); |
| 1498 } | 1506 } |
| 1499 | 1507 |
| 1500 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { | 1508 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { |
| 1501 } | 1509 } |
| OLD | NEW |