summaryrefslogtreecommitdiffstats
path: root/chrome/browser/task_manager
diff options
context:
space:
mode:
authorcreis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-05 23:20:27 +0000
committercreis@google.com <creis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-05 23:20:27 +0000
commitffb204f2827d3ce9974c0969fc4f470ab35892aa (patch)
treeccd77a1ea80100e7c8609ce559b6714850934e4f /chrome/browser/task_manager
parentd99bcaae9af32923a53f3c448cf95cbf7ad20775 (diff)
downloadchromium_src-ffb204f2827d3ce9974c0969fc4f470ab35892aa.zip
chromium_src-ffb204f2827d3ce9974c0969fc4f470ab35892aa.tar.gz
chromium_src-ffb204f2827d3ce9974c0969fc4f470ab35892aa.tar.bz2
Show extension tabs in task manager and correctly label apps.
BUG=31526 BUG=60840 TEST=TaskManagerBrowserTest.NoticeExtensionTabs TEST=TaskManagerBrowserTest.NoticeAppTabs Review URL: http://codereview.chromium.org/5526002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68324 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager')
-rw-r--r--chrome/browser/task_manager/task_manager_browsertest.cc80
-rw-r--r--chrome/browser/task_manager/task_manager_resource_providers.cc56
-rw-r--r--chrome/browser/task_manager/task_manager_resource_providers.h4
3 files changed, 125 insertions, 15 deletions
diff --git a/chrome/browser/task_manager/task_manager_browsertest.cc b/chrome/browser/task_manager/task_manager_browsertest.cc
index 64bf8ce7..d2337ed 100644
--- a/chrome/browser/task_manager/task_manager_browsertest.cc
+++ b/chrome/browser/task_manager/task_manager_browsertest.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/extensions/crashed_extension_infobar.h"
#include "chrome/browser/extensions/extension_browsertest.h"
+#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/notifications/desktop_notification_service.h"
#include "chrome/browser/notifications/notification.h"
#include "chrome/browser/notifications/notification_test_util.h"
@@ -106,6 +107,13 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeTabContentsChanges) {
AddTabAtIndex(0, url, PageTransition::TYPED);
WaitForResourceChange(3);
+ // Check that the third entry is a tab contents resource whose title starts
+ // starts with "Tab:".
+ ASSERT_TRUE(model()->GetResourceTabContents(2) != NULL);
+ string16 prefix = WideToUTF16Hack(l10n_util::GetStringF(
+ IDS_TASK_MANAGER_TAB_PREFIX, L""));
+ ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true));
+
// Close the tab and verify that we notice.
TabContents* first_tab = browser()->GetTabContentsAt(0);
ASSERT_TRUE(first_tab);
@@ -166,6 +174,78 @@ IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, MAYBE_NoticeExtensionChanges) {
WaitForResourceChange(3);
}
+IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeExtensionTabs) {
+ // Show the task manager. This populates the model, and helps with debugging
+ // (you see the task manager).
+ browser()->window()->ShowTaskManager();
+
+ ASSERT_TRUE(LoadExtension(
+ test_data_dir_.AppendASCII("good").AppendASCII("Extensions")
+ .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
+ .AppendASCII("1.0.0.0")));
+
+ // Browser, Extension background page, and the New Tab Page.
+ WaitForResourceChange(3);
+
+ // Open a new tab to an extension URL and make sure we notice that.
+ GURL url("chrome-extension://behllobkkfkfnphdnhnkndlbkcpglgmj/page.html");
+ AddTabAtIndex(0, url, PageTransition::TYPED);
+ WaitForResourceChange(4);
+
+ // Check that the third entry (background) is an extension resource whose
+ // title starts with "Extension:".
+ ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(2));
+ ASSERT_TRUE(model()->GetResourceTabContents(2) == NULL);
+ ASSERT_TRUE(model()->GetResourceExtension(2) != NULL);
+ string16 prefix = WideToUTF16Hack(l10n_util::GetStringF(
+ IDS_TASK_MANAGER_EXTENSION_PREFIX, L""));
+ ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true));
+
+ // Check that the fourth entry (page.html) is of type extension and has both
+ // a tab contents and an extension. The title should start with "Extension:".
+ ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(3));
+ ASSERT_TRUE(model()->GetResourceTabContents(3) != NULL);
+ ASSERT_TRUE(model()->GetResourceExtension(3) != NULL);
+ ASSERT_TRUE(StartsWith(model()->GetResourceTitle(3), prefix, true));
+
+ // Unload extension to avoid crash on Windows.
+ UnloadExtension(last_loaded_extension_id_);
+ WaitForResourceChange(2);
+}
+
+IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeAppTabs) {
+ // Show the task manager. This populates the model, and helps with debugging
+ // (you see the task manager).
+ browser()->window()->ShowTaskManager();
+
+ ASSERT_TRUE(LoadExtension(
+ test_data_dir_.AppendASCII("packaged_app")));
+ ExtensionsService* service = browser()->profile()->GetExtensionsService();
+ const Extension* extension =
+ service->GetExtensionById(last_loaded_extension_id_, false);
+
+ // Browser and the New Tab Page.
+ WaitForResourceChange(2);
+
+ // Open a new tab to the app's launch URL and make sure we notice that.
+ GURL url(extension->GetResourceURL("main.html"));
+ AddTabAtIndex(0, url, PageTransition::TYPED);
+ WaitForResourceChange(3);
+
+ // Check that the third entry (main.html) is of type extension and has both
+ // a tab contents and an extension. The title should start with "App:".
+ ASSERT_EQ(TaskManager::Resource::EXTENSION, model()->GetResourceType(2));
+ ASSERT_TRUE(model()->GetResourceTabContents(2) != NULL);
+ ASSERT_TRUE(model()->GetResourceExtension(2) != NULL);
+ string16 prefix = WideToUTF16Hack(l10n_util::GetStringF(
+ IDS_TASK_MANAGER_APP_PREFIX, L""));
+ ASSERT_TRUE(StartsWith(model()->GetResourceTitle(2), prefix, true));
+
+ // Unload extension to avoid crash on Windows.
+ UnloadExtension(last_loaded_extension_id_);
+ WaitForResourceChange(2);
+}
+
IN_PROC_BROWSER_TEST_F(TaskManagerBrowserTest, NoticeNotificationChanges) {
EXPECT_EQ(0, model()->ResourceCount());
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc
index f3dc3ff..e7b76e6 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.cc
+++ b/chrome/browser/task_manager/task_manager_resource_providers.cc
@@ -50,6 +50,24 @@
#include "gfx/icon_util.h"
#endif // defined(OS_WIN)
+namespace {
+
+// Returns the appropriate message prefix ID for tabs and extensions,
+// reflecting whether they are apps or in incognito mode.
+int GetMessagePrefixID(bool is_app, bool is_extension,
+ bool is_off_the_record) {
+ return is_app ?
+ (is_off_the_record ?
+ IDS_TASK_MANAGER_APP_INCOGNITO_PREFIX :
+ IDS_TASK_MANAGER_APP_PREFIX) :
+ (is_extension ?
+ (is_off_the_record ?
+ IDS_TASK_MANAGER_EXTENSION_INCOGNITO_PREFIX :
+ IDS_TASK_MANAGER_EXTENSION_PREFIX) :
+ IDS_TASK_MANAGER_TAB_PREFIX);
+}
+
+} // namespace
////////////////////////////////////////////////////////////////////////////////
// TaskManagerRendererResource class
@@ -131,6 +149,10 @@ TaskManagerTabContentsResource::TaskManagerTabContentsResource(
TaskManagerTabContentsResource::~TaskManagerTabContentsResource() {
}
+TaskManager::Resource::Type TaskManagerTabContentsResource::GetType() const {
+ return tab_contents_->HostsExtension() ? EXTENSION : RENDERER;
+}
+
std::wstring TaskManagerTabContentsResource::GetTitle() const {
// Fall back on the URL if there's no title.
std::wstring tab_title(UTF16ToWideHack(tab_contents_->GetTitle()));
@@ -152,10 +174,15 @@ std::wstring TaskManagerTabContentsResource::GetTitle() const {
base::i18n::AdjustStringForLocaleDirection(&tab_title);
}
- return l10n_util::GetStringF(IDS_TASK_MANAGER_TAB_PREFIX, tab_title);
+ ExtensionsService* extensions_service =
+ tab_contents_->profile()->GetExtensionsService();
+ int message_id = GetMessagePrefixID(
+ extensions_service->IsInstalledApp(tab_contents_->GetURL()),
+ tab_contents_->HostsExtension(),
+ tab_contents_->profile()->IsOffTheRecord());
+ return l10n_util::GetStringF(message_id, tab_title);
}
-
SkBitmap TaskManagerTabContentsResource::GetIcon() const {
return tab_contents_->GetFavIcon();
}
@@ -164,6 +191,16 @@ TabContents* TaskManagerTabContentsResource::GetTabContents() const {
return static_cast<TabContents*>(tab_contents_);
}
+const Extension* TaskManagerTabContentsResource::GetExtension() const {
+ if (tab_contents_->HostsExtension()) {
+ ExtensionsService* extensions_service =
+ tab_contents_->profile()->GetExtensionsService();
+ return extensions_service->GetExtensionByURL(tab_contents_->GetURL());
+ }
+
+ return NULL;
+}
+
////////////////////////////////////////////////////////////////////////////////
// TaskManagerTabContentsResourceProvider class
////////////////////////////////////////////////////////////////////////////////
@@ -267,11 +304,8 @@ void TaskManagerTabContentsResourceProvider::Add(TabContents* tab_contents) {
return;
// Don't add dead tabs or tabs that haven't yet connected.
- // Also ignore tabs which display extension content. We collapse
- // all of these into one extension row.
if (!tab_contents->GetRenderProcessHost()->GetHandle() ||
- !tab_contents->notify_disconnection() ||
- tab_contents->HostsExtension()) {
+ !tab_contents->notify_disconnection()) {
return;
}
@@ -826,14 +860,8 @@ TaskManagerExtensionProcessResource::TaskManagerExtensionProcessResource(
std::wstring extension_name(UTF8ToWide(GetExtension()->name()));
DCHECK(!extension_name.empty());
- int message_id =
- GetExtension()->is_app() ?
- (extension_host_->profile()->IsOffTheRecord() ?
- IDS_TASK_MANAGER_APP_INCOGNITO_PREFIX :
- IDS_TASK_MANAGER_APP_PREFIX) :
- (extension_host_->profile()->IsOffTheRecord() ?
- IDS_TASK_MANAGER_EXTENSION_INCOGNITO_PREFIX :
- IDS_TASK_MANAGER_EXTENSION_PREFIX);
+ int message_id = GetMessagePrefixID(GetExtension()->is_app(), true,
+ extension_host_->profile()->IsOffTheRecord());
title_ = l10n_util::GetStringF(message_id, extension_name);
}
diff --git a/chrome/browser/task_manager/task_manager_resource_providers.h b/chrome/browser/task_manager/task_manager_resource_providers.h
index 9c4e8c4..4c61b34 100644
--- a/chrome/browser/task_manager/task_manager_resource_providers.h
+++ b/chrome/browser/task_manager/task_manager_resource_providers.h
@@ -36,7 +36,7 @@ class TaskManagerRendererResource : public TaskManager::Resource {
// TaskManager::Resource methods:
base::ProcessHandle GetProcess() const;
- Type GetType() const { return RENDERER; }
+ virtual Type GetType() const { return RENDERER; }
virtual bool ReportsCacheStats() const { return true; }
virtual WebKit::WebCache::ResourceTypeStats GetWebCoreCacheStats() const;
virtual bool ReportsV8MemoryStats() const { return true; }
@@ -81,9 +81,11 @@ class TaskManagerTabContentsResource : public TaskManagerRendererResource {
~TaskManagerTabContentsResource();
// TaskManager::Resource methods:
+ virtual Type GetType() const;
virtual std::wstring GetTitle() const;
virtual SkBitmap GetIcon() const;
virtual TabContents* GetTabContents() const;
+ virtual const Extension* GetExtension() const;
private:
TabContents* tab_contents_;