| Index: chrome/browser/task_manager/task_manager_background_resource_provider.cc
|
| diff --git a/chrome/browser/task_manager/task_manager_background_resource_provider.cc b/chrome/browser/task_manager/task_manager_background_resource_provider.cc
|
| deleted file mode 100644
|
| index 6c95b90c82ab365f4f6b8bfd29f8b280e325bbdc..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/task_manager/task_manager_background_resource_provider.cc
|
| +++ /dev/null
|
| @@ -1,315 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/task_manager/task_manager_background_resource_provider.h"
|
| -
|
| -#include "base/i18n/rtl.h"
|
| -#include "base/string16.h"
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/browser/background/background_contents_service.h"
|
| -#include "chrome/browser/background/background_contents_service_factory.h"
|
| -#include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/tab_contents/background_contents.h"
|
| -#include "chrome/browser/task_manager/task_manager_render_resource.h"
|
| -#include "chrome/common/chrome_notification_types.h"
|
| -#include "chrome/common/extensions/extension.h"
|
| -#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/web_contents.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "grit/theme_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/resource/resource_bundle.h"
|
| -#include "ui/gfx/image/image_skia.h"
|
| -
|
| -using content::RenderProcessHost;
|
| -using content::RenderViewHost;
|
| -using content::WebContents;
|
| -using extensions::Extension;
|
| -
|
| -class TaskManagerBackgroundContentsResource
|
| - : public TaskManagerRendererResource {
|
| - public:
|
| - TaskManagerBackgroundContentsResource(
|
| - BackgroundContents* background_contents,
|
| - const string16& application_name);
|
| - virtual ~TaskManagerBackgroundContentsResource();
|
| -
|
| - // TaskManager::Resource methods:
|
| - virtual string16 GetTitle() const OVERRIDE;
|
| - virtual string16 GetProfileName() const OVERRIDE;
|
| - virtual gfx::ImageSkia GetIcon() const OVERRIDE;
|
| - virtual bool IsBackground() const OVERRIDE;
|
| -
|
| - const string16& application_name() const { return application_name_; }
|
| - private:
|
| - BackgroundContents* background_contents_;
|
| -
|
| - string16 application_name_;
|
| -
|
| - // The icon painted for BackgroundContents.
|
| - // TODO(atwilson): Use the favicon when there's a way to get the favicon for
|
| - // BackgroundContents.
|
| - static gfx::ImageSkia* default_icon_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TaskManagerBackgroundContentsResource);
|
| -};
|
| -
|
| -gfx::ImageSkia* TaskManagerBackgroundContentsResource::default_icon_ = NULL;
|
| -
|
| -// TODO(atwilson): http://crbug.com/116893
|
| -// HACK: if the process handle is invalid, we use the current process's handle.
|
| -// This preserves old behavior but is incorrect, and should be fixed.
|
| -TaskManagerBackgroundContentsResource::TaskManagerBackgroundContentsResource(
|
| - BackgroundContents* background_contents,
|
| - const string16& application_name)
|
| - : TaskManagerRendererResource(
|
| - background_contents->web_contents()->GetRenderProcessHost()->
|
| - GetHandle() ?
|
| - background_contents->web_contents()->GetRenderProcessHost()->
|
| - GetHandle() :
|
| - base::Process::Current().handle(),
|
| - background_contents->web_contents()->GetRenderViewHost()),
|
| - background_contents_(background_contents),
|
| - application_name_(application_name) {
|
| - // Just use the same icon that other extension resources do.
|
| - // TODO(atwilson): Use the favicon when that's available.
|
| - if (!default_icon_) {
|
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| - default_icon_ = rb.GetImageSkiaNamed(IDR_PLUGINS_FAVICON);
|
| - }
|
| - // Ensure that the string has the appropriate direction markers (see comment
|
| - // in TaskManagerTabContentsResource::GetTitle()).
|
| - base::i18n::AdjustStringForLocaleDirection(&application_name_);
|
| -}
|
| -
|
| -TaskManagerBackgroundContentsResource::~TaskManagerBackgroundContentsResource(
|
| - ) {
|
| -}
|
| -
|
| -string16 TaskManagerBackgroundContentsResource::GetTitle() const {
|
| - string16 title = application_name_;
|
| -
|
| - if (title.empty()) {
|
| - // No title (can't locate the parent app for some reason) so just display
|
| - // the URL (properly forced to be LTR).
|
| - title = base::i18n::GetDisplayStringInLTRDirectionality(
|
| - UTF8ToUTF16(background_contents_->GetURL().spec()));
|
| - }
|
| - return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_BACKGROUND_PREFIX, title);
|
| -}
|
| -
|
| -string16 TaskManagerBackgroundContentsResource::GetProfileName() const {
|
| - return string16();
|
| -}
|
| -
|
| -gfx::ImageSkia TaskManagerBackgroundContentsResource::GetIcon() const {
|
| - return *default_icon_;
|
| -}
|
| -
|
| -bool TaskManagerBackgroundContentsResource::IsBackground() const {
|
| - return true;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// TaskManagerBackgroundContentsResourceProvider class
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -TaskManagerBackgroundContentsResourceProvider::
|
| - TaskManagerBackgroundContentsResourceProvider(TaskManager* task_manager)
|
| - : updating_(false),
|
| - task_manager_(task_manager) {
|
| -}
|
| -
|
| -TaskManagerBackgroundContentsResourceProvider::
|
| - ~TaskManagerBackgroundContentsResourceProvider() {
|
| -}
|
| -
|
| -TaskManager::Resource*
|
| -TaskManagerBackgroundContentsResourceProvider::GetResource(
|
| - int origin_pid,
|
| - int render_process_host_id,
|
| - int routing_id) {
|
| - // If an origin PID was specified, the request is from a plugin, not the
|
| - // render view host process
|
| - if (origin_pid)
|
| - return NULL;
|
| -
|
| - for (Resources::iterator i = resources_.begin(); i != resources_.end(); i++) {
|
| - WebContents* tab = i->first->web_contents();
|
| - if (tab->GetRenderProcessHost()->GetID() == render_process_host_id
|
| - && tab->GetRenderViewHost()->GetRoutingID() == routing_id) {
|
| - return i->second;
|
| - }
|
| - }
|
| -
|
| - // Can happen if the page went away while a network request was being
|
| - // performed.
|
| - return NULL;
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::StartUpdating() {
|
| - DCHECK(!updating_);
|
| - updating_ = true;
|
| -
|
| - // Add all the existing BackgroundContents from every profile, including
|
| - // incognito profiles.
|
| - ProfileManager* profile_manager = g_browser_process->profile_manager();
|
| - std::vector<Profile*> profiles(profile_manager->GetLoadedProfiles());
|
| - size_t num_default_profiles = profiles.size();
|
| - for (size_t i = 0; i < num_default_profiles; ++i) {
|
| - if (profiles[i]->HasOffTheRecordProfile()) {
|
| - profiles.push_back(profiles[i]->GetOffTheRecordProfile());
|
| - }
|
| - }
|
| - for (size_t i = 0; i < profiles.size(); ++i) {
|
| - BackgroundContentsService* background_contents_service =
|
| - BackgroundContentsServiceFactory::GetForProfile(profiles[i]);
|
| - std::vector<BackgroundContents*> contents =
|
| - background_contents_service->GetBackgroundContents();
|
| - ExtensionService* extension_service = profiles[i]->GetExtensionService();
|
| - for (std::vector<BackgroundContents*>::iterator iterator = contents.begin();
|
| - iterator != contents.end(); ++iterator) {
|
| - string16 application_name;
|
| - // Lookup the name from the parent extension.
|
| - if (extension_service) {
|
| - const string16& application_id =
|
| - background_contents_service->GetParentApplicationId(*iterator);
|
| - const Extension* extension = extension_service->GetExtensionById(
|
| - UTF16ToUTF8(application_id), false);
|
| - if (extension)
|
| - application_name = UTF8ToUTF16(extension->name());
|
| - }
|
| - Add(*iterator, application_name);
|
| - }
|
| - }
|
| -
|
| - // Then we register for notifications to get new BackgroundContents.
|
| - registrar_.Add(this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_OPENED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| - registrar_.Add(this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_NAVIGATED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| - registrar_.Add(this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::StopUpdating() {
|
| - DCHECK(updating_);
|
| - updating_ = false;
|
| -
|
| - // Unregister for notifications
|
| - registrar_.Remove(
|
| - this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_OPENED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| - registrar_.Remove(
|
| - this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_NAVIGATED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| - registrar_.Remove(
|
| - this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED,
|
| - content::NotificationService::AllBrowserContextsAndSources());
|
| -
|
| - // Delete all the resources.
|
| - STLDeleteContainerPairSecondPointers(resources_.begin(), resources_.end());
|
| -
|
| - resources_.clear();
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::AddToTaskManager(
|
| - BackgroundContents* background_contents,
|
| - const string16& application_name) {
|
| - TaskManagerBackgroundContentsResource* resource =
|
| - new TaskManagerBackgroundContentsResource(background_contents,
|
| - application_name);
|
| - resources_[background_contents] = resource;
|
| - task_manager_->AddResource(resource);
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::Add(
|
| - BackgroundContents* contents, const string16& application_name) {
|
| - if (!updating_)
|
| - return;
|
| -
|
| - // TODO(atwilson): http://crbug.com/116893
|
| - // We should check that the process handle is valid here, but it won't
|
| - // be in the case of NOTIFICATION_BACKGROUND_CONTENTS_OPENED.
|
| -
|
| - // Should never add the same BackgroundContents twice.
|
| - DCHECK(resources_.find(contents) == resources_.end());
|
| - AddToTaskManager(contents, application_name);
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::Remove(
|
| - BackgroundContents* contents) {
|
| - if (!updating_)
|
| - return;
|
| - Resources::iterator iter = resources_.find(contents);
|
| - DCHECK(iter != resources_.end());
|
| -
|
| - // Remove the resource from the Task Manager.
|
| - TaskManagerBackgroundContentsResource* resource = iter->second;
|
| - task_manager_->RemoveResource(resource);
|
| - // And from the provider.
|
| - resources_.erase(iter);
|
| - // Finally, delete the resource.
|
| - delete resource;
|
| -}
|
| -
|
| -void TaskManagerBackgroundContentsResourceProvider::Observe(
|
| - int type,
|
| - const content::NotificationSource& source,
|
| - const content::NotificationDetails& details) {
|
| - switch (type) {
|
| - case chrome::NOTIFICATION_BACKGROUND_CONTENTS_OPENED: {
|
| - // Get the name from the parent application. If no parent application is
|
| - // found, just pass an empty string - BackgroundContentsResource::GetTitle
|
| - // will display the URL instead in this case. This should never happen
|
| - // except in rare cases when an extension is being unloaded or chrome is
|
| - // exiting while the task manager is displayed.
|
| - string16 application_name;
|
| - ExtensionService* service =
|
| - content::Source<Profile>(source)->GetExtensionService();
|
| - if (service) {
|
| - std::string application_id = UTF16ToUTF8(
|
| - content::Details<BackgroundContentsOpenedDetails>(details)->
|
| - application_id);
|
| - const Extension* extension =
|
| - service->GetExtensionById(application_id, false);
|
| - // Extension can be NULL when running unit tests.
|
| - if (extension)
|
| - application_name = UTF8ToUTF16(extension->name());
|
| - }
|
| - Add(content::Details<BackgroundContentsOpenedDetails>(details)->contents,
|
| - application_name);
|
| - // Opening a new BackgroundContents needs to force the display to refresh
|
| - // (applications may now be considered "background" that weren't before).
|
| - task_manager_->ModelChanged();
|
| - break;
|
| - }
|
| - case chrome::NOTIFICATION_BACKGROUND_CONTENTS_NAVIGATED: {
|
| - BackgroundContents* contents =
|
| - content::Details<BackgroundContents>(details).ptr();
|
| - // Should never get a NAVIGATED before OPENED.
|
| - DCHECK(resources_.find(contents) != resources_.end());
|
| - // Preserve the application name.
|
| - string16 application_name(
|
| - resources_.find(contents)->second->application_name());
|
| - Remove(contents);
|
| - Add(contents, application_name);
|
| - break;
|
| - }
|
| - case chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED:
|
| - Remove(content::Details<BackgroundContents>(details).ptr());
|
| - // Closing a BackgroundContents needs to force the display to refresh
|
| - // (applications may now be considered "foreground" that weren't before).
|
| - task_manager_->ModelChanged();
|
| - break;
|
| - default:
|
| - NOTREACHED() << "Unexpected notification.";
|
| - return;
|
| - }
|
| -}
|
|
|