| 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..327ea9a265b8c75771baac224f8a3b9b0e90cf7c 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,32 @@ 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) or background contents
|
| + // (handled by TaskManagerBackgroundResourceProvider).
|
| + // TODO(benwells): create specific chrome::VIEW_TYPE_TAB_CONTENTS for
|
| + // tab contents, as VIEW_TYPE_WEB_CONTENTS is the default.
|
| + content::ViewType view_type = rvh->GetDelegate()->GetRenderViewType();
|
| + if (view_type == content::VIEW_TYPE_WEB_CONTENTS ||
|
| + view_type == chrome::VIEW_TYPE_BACKGROUND_CONTENTS) {
|
| + continue;
|
| + }
|
| +
|
| + AddToTaskManager(rvh);
|
| }
|
| }
|
| }
|
| @@ -1284,11 +1312,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 +1327,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;
|
|
|
|
|