| 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 7e6572264cebd18e4ec56b411096dc531face38f..fa8ad4550daa34dbfd7922c1a0bd6adf67f0dc1e 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) {
 | 
|          // Don't add dead extension processes.
 | 
| -        if ((*jt)->IsRenderViewLive())
 | 
| -          AddToTaskManager(*jt);
 | 
| +        if (!(*jt)->IsRenderViewLive())
 | 
| +          continue;
 | 
| +
 | 
| +        // Don't add WebContents (those are handled by
 | 
| +        // TaskManagerTabContentsResourceProvider).
 | 
| +        if ((*jt)->GetDelegate()->GetRenderViewType() ==
 | 
| +            content::VIEW_TYPE_WEB_CONTENTS) {
 | 
| +          continue;
 | 
| +        }
 | 
| +
 | 
| +        AddToTaskManager(*jt);
 | 
|        }
 | 
|      }
 | 
|    }
 | 
| @@ -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;
 | 
|  
 | 
| 
 |