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 |