Chromium Code Reviews| Index: chrome/browser/task_manager/task_manager_resource_providers.cc |
| diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc |
| index 6a511b33596e10303f250f9690b515f9291f5d4c..68c39d7ee3bb93d7af8eef21be57217a3572740f 100644 |
| --- a/chrome/browser/task_manager/task_manager_resource_providers.cc |
| +++ b/chrome/browser/task_manager/task_manager_resource_providers.cc |
| @@ -24,6 +24,7 @@ |
| #include "chrome/browser/extensions/extension_host.h" |
| #include "chrome/browser/extensions/extension_process_manager.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/extensions/extension_system.h" |
| #include "chrome/browser/favicon/favicon_tab_helper.h" |
| #include "chrome/browser/instant/instant_controller.h" |
| #include "chrome/browser/prerender/prerender_manager.h" |
| @@ -47,8 +48,10 @@ |
| #include "content/public/browser/notification_service.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| +#include "content/public/browser/render_view_host_delegate.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/process_type.h" |
| +#include "content/public/common/view_type.h" |
| #include "grit/generated_resources.h" |
| #include "grit/theme_resources.h" |
| #include "grit/theme_resources_standard.h" |
| @@ -1117,20 +1120,22 @@ void TaskManagerChildProcessResourceProvider::ChildProcessDataRetreived( |
| SkBitmap* TaskManagerExtensionProcessResource::default_icon_ = NULL; |
| TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource( |
| - ExtensionHost* extension_host) |
| - : extension_host_(extension_host) { |
| + content::RenderViewHost* render_view_host) |
| + : render_view_host_(render_view_host) { |
| if (!default_icon_) { |
| ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| default_icon_ = rb.GetBitmapNamed(IDR_PLUGIN); |
| } |
| - process_handle_ = extension_host_->render_process_host()->GetHandle(); |
| - unique_process_id_ = extension_host_->render_process_host()->GetID(); |
| + process_handle_ = render_view_host_->GetProcess()->GetHandle(); |
| + unique_process_id_ = render_view_host->GetProcess()->GetID(); |
| pid_ = base::GetProcId(process_handle_); |
| string16 extension_name = UTF8ToUTF16(GetExtension()->name()); |
| DCHECK(!extension_name.empty()); |
| + Profile* profile = Profile::FromBrowserContext( |
| + render_view_host->GetProcess()->GetBrowserContext()); |
| int message_id = GetMessagePrefixID(GetExtension()->is_app(), true, |
| - extension_host_->profile()->IsOffTheRecord(), false, false); |
| + profile->IsOffTheRecord(), false, false); |
| title_ = l10n_util::GetStringFUTF16(message_id, extension_name); |
| } |
| @@ -1144,7 +1149,9 @@ string16 TaskManagerExtensionProcessResource::GetTitle() const { |
| string16 TaskManagerExtensionProcessResource::GetProfileName() const { |
| ProfileInfoCache& cache = |
| g_browser_process->profile_manager()->GetProfileInfoCache(); |
| - Profile* profile = extension_host_->profile()->GetOriginalProfile(); |
| + Profile* profile = Profile::FromBrowserContext( |
| + render_view_host_->GetProcess()->GetBrowserContext()); |
| + profile = profile->GetOriginalProfile(); |
| size_t index = cache.GetIndexOfProfileWithPath(profile->GetPath()); |
| if (index == std::string::npos) |
| return string16(); |
| @@ -1174,7 +1181,7 @@ bool TaskManagerExtensionProcessResource::CanInspect() const { |
| } |
| void TaskManagerExtensionProcessResource::Inspect() const { |
| - DevToolsWindow::OpenDevToolsWindow(extension_host_->render_view_host()); |
| + DevToolsWindow::OpenDevToolsWindow(render_view_host_); |
| } |
| bool TaskManagerExtensionProcessResource::SupportNetworkUsage() const { |
| @@ -1186,11 +1193,15 @@ void TaskManagerExtensionProcessResource::SetSupportNetworkUsage() { |
| } |
| const Extension* TaskManagerExtensionProcessResource::GetExtension() const { |
| - return extension_host_->extension(); |
| + Profile* profile = Profile::FromBrowserContext( |
| + render_view_host_->GetProcess()->GetBrowserContext()); |
| + ExtensionProcessManager* process_manager = |
| + ExtensionSystem::Get(profile)->process_manager(); |
| + return process_manager->GetExtensionForRenderViewHost(render_view_host_); |
| } |
| bool TaskManagerExtensionProcessResource::IsBackground() const { |
| - return extension_host_->extension_host_type() == |
| + return render_view_host_->GetDelegate()->GetRenderViewType() == |
| chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE; |
| } |
| @@ -1224,8 +1235,8 @@ void TaskManagerExtensionProcessResourceProvider::StartUpdating() { |
| DCHECK(!updating_); |
| updating_ = true; |
| - // Add all the existing ExtensionHosts from all Profiles, including those from |
| - // incognito split mode. |
| + // Add all the existing extension views from all Profiles, including those |
| + // from incognito split mode. |
| ProfileManager* profile_manager = g_browser_process->profile_manager(); |
| std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles()); |
| size_t num_default_profiles = profiles.size(); |
| @@ -1234,15 +1245,28 @@ void TaskManagerExtensionProcessResourceProvider::StartUpdating() { |
| profiles.push_back(profiles[i]->GetOffTheRecordProfile()); |
| } |
| } |
| + |
| for (size_t i = 0; i < profiles.size(); ++i) { |
| ExtensionProcessManager* process_manager = |
| profiles[i]->GetExtensionProcessManager(); |
| if (process_manager) { |
| - ExtensionProcessManager::const_iterator jt; |
| - for (jt = process_manager->begin(); jt != process_manager->end(); ++jt) { |
| + const ExtensionProcessManager::ViewSet all_views = |
| + process_manager->GetAllViews(); |
| + ExtensionProcessManager::ViewSet::const_iterator jt = all_views.begin(); |
| + for (; jt != all_views.end(); ++jt) { |
| + content::RenderViewHost* rvh = *jt; |
| // Don't add dead extension processes. |
| - if ((*jt)->IsRenderViewLive()) |
| - AddToTaskManager(*jt); |
| + if (!rvh->IsRenderViewLive()) |
| + continue; |
| + |
| + // Don't add WebContents (those are handled by |
| + // TaskManagerTabContentsResourceProvider). |
| + if (rvh->GetDelegate()->GetRenderViewType() == |
| + content::VIEW_TYPE_WEB_CONTENTS) { |
|
Aaron Boodman
2012/04/20 06:34:56
TYPE_WEB_CONTENTS is actually the default type. It
benwells
2012/04/23 05:00:26
Done.
|
| + continue; |
| + } |
| + |
| + AddToTaskManager(rvh); |
| } |
| } |
| } |
| @@ -1284,11 +1308,13 @@ void TaskManagerExtensionProcessResourceProvider::Observe( |
| const content::NotificationDetails& details) { |
| switch (type) { |
| case chrome::NOTIFICATION_EXTENSION_HOST_CREATED: |
| - AddToTaskManager(content::Details<ExtensionHost>(details).ptr()); |
| + AddToTaskManager( |
| + content::Details<ExtensionHost>(details).ptr()->render_view_host()); |
| break; |
| case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: |
| case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: |
| - RemoveFromTaskManager(content::Details<ExtensionHost>(details).ptr()); |
| + RemoveFromTaskManager( |
| + content::Details<ExtensionHost>(details).ptr()->render_view_host()); |
| break; |
| default: |
| NOTREACHED() << "Unexpected notification."; |
| @@ -1297,21 +1323,21 @@ void TaskManagerExtensionProcessResourceProvider::Observe( |
| } |
| void TaskManagerExtensionProcessResourceProvider::AddToTaskManager( |
| - ExtensionHost* extension_host) { |
| + content::RenderViewHost* render_view_host) { |
| TaskManagerExtensionProcessResource* resource = |
| - new TaskManagerExtensionProcessResource(extension_host); |
| - DCHECK(resources_.find(extension_host) == resources_.end()); |
| - resources_[extension_host] = resource; |
| + new TaskManagerExtensionProcessResource(render_view_host); |
| + DCHECK(resources_.find(render_view_host) == resources_.end()); |
| + resources_[render_view_host] = resource; |
| pid_to_resources_[resource->process_id()] = resource; |
| task_manager_->AddResource(resource); |
| } |
| void TaskManagerExtensionProcessResourceProvider::RemoveFromTaskManager( |
| - ExtensionHost* extension_host) { |
| + content::RenderViewHost* render_view_host) { |
| if (!updating_) |
| return; |
| - std::map<ExtensionHost*, TaskManagerExtensionProcessResource*> |
| - ::iterator iter = resources_.find(extension_host); |
| + std::map<content::RenderViewHost*, TaskManagerExtensionProcessResource*> |
| + ::iterator iter = resources_.find(render_view_host); |
| if (iter == resources_.end()) |
| return; |