OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/file_version_info.h" | 10 #include "base/file_version_info.h" |
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 if (iter != pid_to_resources_.end()) | 1154 if (iter != pid_to_resources_.end()) |
1155 return iter->second; | 1155 return iter->second; |
1156 else | 1156 else |
1157 return NULL; | 1157 return NULL; |
1158 } | 1158 } |
1159 | 1159 |
1160 void TaskManagerExtensionProcessResourceProvider::StartUpdating() { | 1160 void TaskManagerExtensionProcessResourceProvider::StartUpdating() { |
1161 DCHECK(!updating_); | 1161 DCHECK(!updating_); |
1162 updating_ = true; | 1162 updating_ = true; |
1163 | 1163 |
1164 // Add all the existing ExtensionHosts. | 1164 // Add all the existing ExtensionHosts from all Profiles, including those from |
| 1165 // incognito split mode. |
1165 ProfileManager* profile_manager = g_browser_process->profile_manager(); | 1166 ProfileManager* profile_manager = g_browser_process->profile_manager(); |
1166 std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); | 1167 std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); |
| 1168 size_t num_default_profiles = profiles.size(); |
| 1169 for (size_t i = 0; i < num_default_profiles; ++i) { |
| 1170 if (profiles[i]->HasOffTheRecordProfile()) { |
| 1171 profiles.push_back(profiles[i]->GetOffTheRecordProfile()); |
| 1172 } |
| 1173 } |
1167 for (size_t i = 0; i < profiles.size(); ++i) { | 1174 for (size_t i = 0; i < profiles.size(); ++i) { |
1168 ExtensionProcessManager* process_manager = | 1175 ExtensionProcessManager* process_manager = |
1169 profiles[i]->GetExtensionProcessManager(); | 1176 profiles[i]->GetExtensionProcessManager(); |
1170 if (process_manager) { | 1177 if (process_manager) { |
1171 ExtensionProcessManager::const_iterator jt; | 1178 ExtensionProcessManager::const_iterator jt; |
1172 for (jt = process_manager->begin(); jt != process_manager->end(); ++jt) | 1179 for (jt = process_manager->begin(); jt != process_manager->end(); ++jt) { |
1173 AddToTaskManager(*jt); | 1180 // Don't add dead extension processes. |
1174 } | 1181 if ((*jt)->IsRenderViewLive()) |
1175 | 1182 AddToTaskManager(*jt); |
1176 // If we have an incognito profile active, include the split-mode incognito | |
1177 // extensions. | |
1178 if (BrowserList::IsOffTheRecordSessionActiveForProfile(profiles[i])) { | |
1179 ExtensionProcessManager* process_manager = | |
1180 profiles[i]->GetOffTheRecordProfile()->GetExtensionProcessManager(); | |
1181 if (process_manager) { | |
1182 ExtensionProcessManager::const_iterator jt; | |
1183 for (jt = process_manager->begin(); jt != process_manager->end(); ++jt) | |
1184 AddToTaskManager(*jt); | |
1185 } | 1183 } |
1186 } | 1184 } |
1187 } | 1185 } |
1188 | 1186 |
1189 // Register for notifications about extension process changes. | 1187 // Register for notifications about extension process changes. |
1190 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_CREATED, | 1188 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_CREATED, |
1191 content::NotificationService::AllBrowserContextsAndSources()); | 1189 content::NotificationService::AllBrowserContextsAndSources()); |
1192 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, | 1190 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, |
1193 content::NotificationService::AllBrowserContextsAndSources()); | 1191 content::NotificationService::AllBrowserContextsAndSources()); |
1194 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 1192 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
1195 content::NotificationService::AllBrowserContextsAndSources()); | 1193 content::NotificationService::AllBrowserContextsAndSources()); |
1196 } | 1194 } |
1197 | 1195 |
1198 void TaskManagerExtensionProcessResourceProvider::StopUpdating() { | 1196 void TaskManagerExtensionProcessResourceProvider::StopUpdating() { |
1199 DCHECK(updating_); | 1197 DCHECK(updating_); |
1200 updating_ = false; | 1198 updating_ = false; |
1201 | 1199 |
1202 // Unregister for notifications about extension process changes. | 1200 // Unregister for notifications about extension process changes. |
1203 registrar_.Remove( | 1201 registrar_.Remove( |
1204 this, chrome::NOTIFICATION_EXTENSION_PROCESS_CREATED, | 1202 this, chrome::NOTIFICATION_EXTENSION_HOST_CREATED, |
1205 content::NotificationService::AllBrowserContextsAndSources()); | 1203 content::NotificationService::AllBrowserContextsAndSources()); |
1206 registrar_.Remove( | 1204 registrar_.Remove( |
1207 this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, | 1205 this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED, |
1208 content::NotificationService::AllBrowserContextsAndSources()); | 1206 content::NotificationService::AllBrowserContextsAndSources()); |
1209 registrar_.Remove( | 1207 registrar_.Remove( |
1210 this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, | 1208 this, chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, |
1211 content::NotificationService::AllBrowserContextsAndSources()); | 1209 content::NotificationService::AllBrowserContextsAndSources()); |
1212 | 1210 |
1213 // Delete all the resources. | 1211 // Delete all the resources. |
1214 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); | 1212 STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end()); |
1215 | 1213 |
1216 resources_.clear(); | 1214 resources_.clear(); |
1217 pid_to_resources_.clear(); | 1215 pid_to_resources_.clear(); |
1218 } | 1216 } |
1219 | 1217 |
1220 void TaskManagerExtensionProcessResourceProvider::Observe( | 1218 void TaskManagerExtensionProcessResourceProvider::Observe( |
1221 int type, | 1219 int type, |
1222 const content::NotificationSource& source, | 1220 const content::NotificationSource& source, |
1223 const content::NotificationDetails& details) { | 1221 const content::NotificationDetails& details) { |
1224 switch (type) { | 1222 switch (type) { |
1225 case chrome::NOTIFICATION_EXTENSION_PROCESS_CREATED: | 1223 case chrome::NOTIFICATION_EXTENSION_HOST_CREATED: |
1226 AddToTaskManager(content::Details<ExtensionHost>(details).ptr()); | 1224 AddToTaskManager(content::Details<ExtensionHost>(details).ptr()); |
1227 break; | 1225 break; |
1228 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: | 1226 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: |
1229 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: | 1227 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: |
1230 RemoveFromTaskManager(content::Details<ExtensionHost>(details).ptr()); | 1228 RemoveFromTaskManager(content::Details<ExtensionHost>(details).ptr()); |
1231 break; | 1229 break; |
1232 default: | 1230 default: |
1233 NOTREACHED() << "Unexpected notification."; | 1231 NOTREACHED() << "Unexpected notification."; |
1234 return; | 1232 return; |
1235 } | 1233 } |
1236 } | 1234 } |
1237 | 1235 |
1238 void TaskManagerExtensionProcessResourceProvider::AddToTaskManager( | 1236 void TaskManagerExtensionProcessResourceProvider::AddToTaskManager( |
1239 ExtensionHost* extension_host) { | 1237 ExtensionHost* extension_host) { |
1240 // Don't add dead extension processes. | |
1241 if (!extension_host->IsRenderViewLive()) | |
1242 return; | |
1243 | |
1244 TaskManagerExtensionProcessResource* resource = | 1238 TaskManagerExtensionProcessResource* resource = |
1245 new TaskManagerExtensionProcessResource(extension_host); | 1239 new TaskManagerExtensionProcessResource(extension_host); |
1246 DCHECK(resources_.find(extension_host) == resources_.end()); | 1240 DCHECK(resources_.find(extension_host) == resources_.end()); |
1247 resources_[extension_host] = resource; | 1241 resources_[extension_host] = resource; |
1248 pid_to_resources_[resource->process_id()] = resource; | 1242 pid_to_resources_[resource->process_id()] = resource; |
1249 task_manager_->AddResource(resource); | 1243 task_manager_->AddResource(resource); |
1250 } | 1244 } |
1251 | 1245 |
1252 void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager( | 1246 void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager( |
1253 ExtensionHost* extension_host) { | 1247 ExtensionHost* extension_host) { |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1401 | 1395 |
1402 return &resource_; | 1396 return &resource_; |
1403 } | 1397 } |
1404 | 1398 |
1405 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { | 1399 void TaskManagerBrowserProcessResourceProvider::StartUpdating() { |
1406 task_manager_->AddResource(&resource_); | 1400 task_manager_->AddResource(&resource_); |
1407 } | 1401 } |
1408 | 1402 |
1409 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { | 1403 void TaskManagerBrowserProcessResourceProvider::StopUpdating() { |
1410 } | 1404 } |
OLD | NEW |