summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoratwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-07 16:58:40 +0000
committeratwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-07 16:58:40 +0000
commitadb6a84d765332811ab4dbd1eee8366066574d79 (patch)
treef9deb44838b87b164c0c3388a9b6cd75939a4281
parent60f17894d95cfe15f9d23aa8cac85e23205d320c (diff)
downloadchromium_src-adb6a84d765332811ab4dbd1eee8366066574d79.zip
chromium_src-adb6a84d765332811ab4dbd1eee8366066574d79.tar.gz
chromium_src-adb6a84d765332811ab4dbd1eee8366066574d79.tar.bz2
Highlight background pages in task manager if user clicks View Background Pages.
Added "highlight_background_resources" param to BrowserWindow::ShowTaskManager() and added support in Cocoa for drawing highlights. BUG=71490 TEST=Click View Background Pages, see background pages are highlighted in yellow. Review URL: http://codereview.chromium.org/6312178 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73993 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/app_controller_mac.mm2
-rw-r--r--chrome/browser/background_mode_manager.cc2
-rw-r--r--chrome/browser/ui/browser.cc11
-rw-r--r--chrome/browser/ui/browser.h2
-rw-r--r--chrome/browser/ui/browser_window.h3
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.h1
-rw-r--r--chrome/browser/ui/cocoa/browser_window_cocoa.mm6
-rw-r--r--chrome/browser/ui/cocoa/task_manager_mac.h20
-rw-r--r--chrome/browser/ui/cocoa/task_manager_mac.mm72
-rw-r--r--chrome/browser/ui/cocoa/task_manager_mac_unittest.mm6
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.cc6
-rw-r--r--chrome/browser/ui/gtk/browser_window_gtk.h1
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc6
-rw-r--r--chrome/browser/ui/views/frame/browser_view.h1
-rw-r--r--chrome/test/test_browser_window.h1
15 files changed, 115 insertions, 25 deletions
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index c77d3f3..87642af 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -942,7 +942,7 @@ void RecordLastRunAppBundlePath() {
case IDC_TASK_MANAGER:
UserMetrics::RecordAction(UserMetricsAction("TaskManager"),
defaultProfile);
- TaskManagerMac::Show();
+ TaskManagerMac::Show(false);
break;
case IDC_OPTIONS:
[self showPreferences:sender];
diff --git a/chrome/browser/background_mode_manager.cc b/chrome/browser/background_mode_manager.cc
index 5ef5c64..fc0e07f 100644
--- a/chrome/browser/background_mode_manager.cc
+++ b/chrome/browser/background_mode_manager.cc
@@ -340,7 +340,7 @@ void BackgroundModeManager::ExecuteCommand(int item) {
GetBrowserWindow()->OpenOptionsDialog();
break;
case IDC_TASK_MANAGER:
- GetBrowserWindow()->OpenTaskManager();
+ GetBrowserWindow()->OpenTaskManager(true);
break;
default:
ExecuteApplication(item);
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 45cbf0c..d5bffbc 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -1768,9 +1768,12 @@ void Browser::ToggleDevToolsWindow(DevToolsToggleAction action) {
GetSelectedTabContentsWrapper()->render_view_host(), action);
}
-void Browser::OpenTaskManager() {
+void Browser::OpenTaskManager(bool highlight_background_resources) {
UserMetrics::RecordAction(UserMetricsAction("TaskManager"), profile_);
- window_->ShowTaskManager();
+ if (highlight_background_resources)
+ window_->ShowBackgroundPages();
+ else
+ window_->ShowTaskManager();
}
void Browser::OpenBugReportDialog() {
@@ -2262,8 +2265,8 @@ void Browser::ExecuteCommandWithDisposition(
case IDC_DEV_TOOLS_INSPECT: ToggleDevToolsWindow(
DEVTOOLS_TOGGLE_ACTION_INSPECT);
break;
- case IDC_TASK_MANAGER: // fall through to OpenTaskManager().
- case IDC_VIEW_BACKGROUND_PAGES: OpenTaskManager(); break;
+ case IDC_TASK_MANAGER: OpenTaskManager(false); break;
+ case IDC_VIEW_BACKGROUND_PAGES: OpenTaskManager(true); break;
case IDC_FEEDBACK: OpenBugReportDialog(); break;
case IDC_SHOW_BOOKMARK_BAR: ToggleBookmarkBar(); break;
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
index 9a266fc..25fc753 100644
--- a/chrome/browser/ui/browser.h
+++ b/chrome/browser/ui/browser.h
@@ -530,7 +530,7 @@ class Browser : public TabHandlerDelegate,
void OpenFile();
void OpenCreateShortcutsDialog();
void ToggleDevToolsWindow(DevToolsToggleAction action);
- void OpenTaskManager();
+ void OpenTaskManager(bool highlight_background_resources);
void OpenBugReportDialog();
void ToggleBookmarkBar();
diff --git a/chrome/browser/ui/browser_window.h b/chrome/browser/ui/browser_window.h
index 3d88d5c..39794d4 100644
--- a/chrome/browser/ui/browser_window.h
+++ b/chrome/browser/ui/browser_window.h
@@ -206,6 +206,9 @@ class BrowserWindow {
// Shows the Task manager.
virtual void ShowTaskManager() = 0;
+ // Shows task information related to background pages.
+ virtual void ShowBackgroundPages() = 0;
+
// Shows the Bookmark bubble. |url| is the URL being bookmarked,
// |already_bookmarked| is true if the url is already bookmarked.
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) = 0;
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.h b/chrome/browser/ui/cocoa/browser_window_cocoa.h
index 15eebf9..4dcb2f0 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.h
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.h
@@ -73,6 +73,7 @@ class BrowserWindowCocoa : public BrowserWindow,
virtual views::Window* ShowAboutChromeDialog();
virtual void ShowUpdateChromeDialog();
virtual void ShowTaskManager();
+ virtual void ShowBackgroundPages();
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual bool IsDownloadShelfVisible() const;
virtual DownloadShelf* GetDownloadShelf();
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa.mm b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
index cb7e64f..162b21c 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa.mm
@@ -309,7 +309,11 @@ void BrowserWindowCocoa::ShowUpdateChromeDialog() {
}
void BrowserWindowCocoa::ShowTaskManager() {
- TaskManagerMac::Show();
+ TaskManagerMac::Show(false);
+}
+
+void BrowserWindowCocoa::ShowBackgroundPages() {
+ TaskManagerMac::Show(true);
}
void BrowserWindowCocoa::ShowBookmarkBubble(const GURL& url,
diff --git a/chrome/browser/ui/cocoa/task_manager_mac.h b/chrome/browser/ui/cocoa/task_manager_mac.h
index 75c9811..211a86d0 100644
--- a/chrome/browser/ui/cocoa/task_manager_mac.h
+++ b/chrome/browser/ui/cocoa/task_manager_mac.h
@@ -29,6 +29,7 @@ class TaskManagerMac;
TaskManagerMac* taskManagerObserver_; // weak
TaskManager* taskManager_; // weak
TaskManagerModel* model_; // weak
+ bool highlightBackgroundResources_;
scoped_nsobject<WindowSizeAutosaver> size_saver_;
@@ -39,10 +40,14 @@ class TaskManagerMac;
// Descriptor of the current sort column.
scoped_nsobject<NSSortDescriptor> currentSortDescriptor_;
+
+ // Color we use for background resources.
+ scoped_nsobject<NSColor> backgroundResourceColor_;
}
// Creates and shows the task manager's window.
-- (id)initWithTaskManagerObserver:(TaskManagerMac*)taskManagerObserver;
+- (id)initWithTaskManagerObserver:(TaskManagerMac*)taskManagerObserver
+ highlightBackgroundResources:(bool)highlightBackgroundResources;
// Refreshes all data in the task manager table.
- (void)reloadData;
@@ -65,7 +70,7 @@ class TaskManagerMac;
class TaskManagerMac : public TaskManagerModelObserver,
public TableRowNSImageCache::Table {
public:
- TaskManagerMac(TaskManager* task_manager);
+ TaskManagerMac(TaskManager* task_manager, bool highlight_background);
virtual ~TaskManagerMac();
// TaskManagerModelObserver
@@ -83,8 +88,9 @@ class TaskManagerMac : public TaskManagerModelObserver,
virtual SkBitmap GetIcon(int r) const;
// Creates the task manager if it doesn't exist; otherwise, it activates the
- // existing task manager window.
- static void Show();
+ // existing task manager window. Highlights background resources if
+ // |highlight_background_resources| is true.
+ static void Show(bool highlight_background_resources);
// Returns the TaskManager observed by |this|.
TaskManager* task_manager() { return task_manager_; }
@@ -94,6 +100,9 @@ class TaskManagerMac : public TaskManagerModelObserver,
// Returns the cocoa object. Used for testing.
TaskManagerWindowController* cocoa_controller() { return window_controller_; }
+
+ // Returns true if the resource at this location is a background resource.
+ bool IsBackgroundRow(int row) const;
private:
// The task manager.
TaskManager* const task_manager_; // weak
@@ -108,6 +117,9 @@ class TaskManagerMac : public TaskManagerModelObserver,
// Caches favicons for all rows. Needs to be initalized after |model_|.
TableRowNSImageCache icon_cache_;
+ // If true, highlight background resources.
+ bool highlight_background_resources_;
+
// An open task manager window. There can only be one open at a time. This
// is reset to NULL when the window is closed.
static TaskManagerMac* instance_;
diff --git a/chrome/browser/ui/cocoa/task_manager_mac.mm b/chrome/browser/ui/cocoa/task_manager_mac.mm
index 21b0b9d..f9222bf 100644
--- a/chrome/browser/ui/cocoa/task_manager_mac.mm
+++ b/chrome/browser/ui/cocoa/task_manager_mac.mm
@@ -102,7 +102,8 @@ class SortHelper {
@implementation TaskManagerWindowController
-- (id)initWithTaskManagerObserver:(TaskManagerMac*)taskManagerObserver {
+- (id)initWithTaskManagerObserver:(TaskManagerMac*)taskManagerObserver
+ highlightBackgroundResources:(bool)highlightBackgroundResources {
NSString* nibpath = [base::mac::MainAppBundle()
pathForResource:@"TaskManager"
ofType:@"nib"];
@@ -110,6 +111,15 @@ class SortHelper {
taskManagerObserver_ = taskManagerObserver;
taskManager_ = taskManagerObserver_->task_manager();
model_ = taskManager_->model();
+ highlightBackgroundResources_ = highlightBackgroundResources;
+ if (highlightBackgroundResources_) {
+ // Highlight background resources with a yellow background.
+ backgroundResourceColor_.reset(
+ [[NSColor colorWithDeviceRed:0xff/255.0
+ green:0xfa/255.0
+ blue:0xcd/255.0
+ alpha:1.0] retain]);
+ }
if (g_browser_process && g_browser_process->local_state()) {
size_saver_.reset([[WindowSizeAutosaver alloc]
@@ -192,6 +202,7 @@ class SortHelper {
[self adjustSelectionAndEndProcessButton];
[tableView_ setDoubleAction:@selector(selectDoubleClickedTab:)];
+ [tableView_ setIntercellSpacing:NSMakeSize(0.0, 0.0)];
[tableView_ sizeToFit];
}
@@ -370,6 +381,29 @@ class SortHelper {
[self autorelease];
}
+// Delegate method invoked before each cell in the table is displayed. We
+// override this to provide highlighting of background resources.
+- (void) tableView:(NSTableView*)tableView
+ willDisplayCell:(id)cell
+ forTableColumn:(NSTableColumn*)tableColumn
+ row:(NSInteger)row {
+ if (!highlightBackgroundResources_)
+ return;
+
+ bool isBackground =
+ taskManagerObserver_->IsBackgroundRow(viewToModelMap_[row]);
+ DCHECK([cell respondsToSelector:@selector(setBackgroundColor:)]);
+ if ([cell respondsToSelector:@selector(setBackgroundColor:)]) {
+ if (isBackground && ![tableView isRowSelected:row]) {
+ [cell setDrawsBackground:YES];
+ [cell setBackgroundColor:backgroundResourceColor_];
+ } else {
+ [cell setBackgroundColor:nil];
+ [cell setDrawsBackground:NO];
+ }
+ }
+}
+
@end
@implementation TaskManagerWindowController (NSTableDataSource)
@@ -502,12 +536,16 @@ class SortHelper {
////////////////////////////////////////////////////////////////////////////////
// TaskManagerMac implementation:
-TaskManagerMac::TaskManagerMac(TaskManager* task_manager)
+TaskManagerMac::TaskManagerMac(TaskManager* task_manager,
+ bool highlight_background_resources)
: task_manager_(task_manager),
model_(task_manager->model()),
- icon_cache_(this) {
+ icon_cache_(this),
+ highlight_background_resources_(highlight_background_resources) {
window_controller_ =
- [[TaskManagerWindowController alloc] initWithTaskManagerObserver:this];
+ [[TaskManagerWindowController alloc]
+ initWithTaskManagerObserver:this
+ highlightBackgroundResources:highlight_background_resources];
model_->AddObserver(this);
}
@@ -569,14 +607,28 @@ SkBitmap TaskManagerMac::GetIcon(int r) const {
return model_->GetResourceIcon(r);
}
+bool TaskManagerMac::IsBackgroundRow(int row) const {
+ return model_->IsBackgroundResource(row);
+}
+
// static
-void TaskManagerMac::Show() {
+void TaskManagerMac::Show(bool highlight_background_resources) {
if (instance_) {
- // If there's a Task manager window open already, just activate it.
- [[instance_->window_controller_ window]
+ if (instance_->highlight_background_resources_ ==
+ highlight_background_resources) {
+ // There's a Task manager window open already, so just activate it.
+ [[instance_->window_controller_ window]
makeKeyAndOrderFront:instance_->window_controller_];
- } else {
- instance_ = new TaskManagerMac(TaskManager::GetInstance());
- instance_->model_->StartUpdating();
+ return;
+ } else {
+ // The user is switching between "View Background Pages" and
+ // "Task Manager" so close the existing window and fall through to
+ // open a new one.
+ [[instance_->window_controller_ window] close];
+ }
}
+ // Create a new instance.
+ instance_ = new TaskManagerMac(TaskManager::GetInstance(),
+ highlight_background_resources);
+ instance_->model_->StartUpdating();
}
diff --git a/chrome/browser/ui/cocoa/task_manager_mac_unittest.mm b/chrome/browser/ui/cocoa/task_manager_mac_unittest.mm
index 05e5323..f5d9b2a 100644
--- a/chrome/browser/ui/cocoa/task_manager_mac_unittest.mm
+++ b/chrome/browser/ui/cocoa/task_manager_mac_unittest.mm
@@ -39,7 +39,7 @@ class TaskManagerWindowControllerTest : public CocoaTest {
// Test creation, to ensure nothing leaks or crashes.
TEST_F(TaskManagerWindowControllerTest, Init) {
TaskManager task_manager;
- TaskManagerMac* bridge(new TaskManagerMac(&task_manager));
+ TaskManagerMac* bridge(new TaskManagerMac(&task_manager, false));
TaskManagerWindowController* controller = bridge->cocoa_controller();
// Releases the controller, which in turn deletes |bridge|.
@@ -57,7 +57,7 @@ TEST_F(TaskManagerWindowControllerTest, Sort) {
task_manager.AddResource(&resource2);
task_manager.AddResource(&resource3); // Will be in the same group as 2.
- TaskManagerMac* bridge(new TaskManagerMac(&task_manager));
+ TaskManagerMac* bridge(new TaskManagerMac(&task_manager, false));
TaskManagerWindowController* controller = bridge->cocoa_controller();
NSTableView* table = [controller tableView];
ASSERT_EQ(3, [controller numberOfRowsInTableView:table]);
@@ -90,7 +90,7 @@ TEST_F(TaskManagerWindowControllerTest, SelectionAdaptsToSorting) {
task_manager.AddResource(&resource1);
task_manager.AddResource(&resource2);
- TaskManagerMac* bridge(new TaskManagerMac(&task_manager));
+ TaskManagerMac* bridge(new TaskManagerMac(&task_manager, false));
TaskManagerWindowController* controller = bridge->cocoa_controller();
NSTableView* table = [controller tableView];
ASSERT_EQ(2, [controller numberOfRowsInTableView:table]);
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc
index 568306c..36180bf 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.cc
+++ b/chrome/browser/ui/gtk/browser_window_gtk.cc
@@ -845,6 +845,12 @@ void BrowserWindowGtk::ShowTaskManager() {
TaskManagerGtk::Show();
}
+void BrowserWindowGtk::ShowBackgroundPages() {
+ // TODO(atwilson): Support highlighting background resources.
+ // (http://crbug.com/71490)
+ TaskManagerGtk::Show();
+}
+
void BrowserWindowGtk::ShowBookmarkBubble(const GURL& url,
bool already_bookmarked) {
toolbar_->GetLocationBarView()->ShowStarBubble(url, !already_bookmarked);
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.h b/chrome/browser/ui/gtk/browser_window_gtk.h
index 7d0ec5f..18f7c8e 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.h
+++ b/chrome/browser/ui/gtk/browser_window_gtk.h
@@ -92,6 +92,7 @@ class BrowserWindowGtk : public BrowserWindow,
virtual views::Window* ShowAboutChromeDialog();
virtual void ShowUpdateChromeDialog();
virtual void ShowTaskManager();
+ virtual void ShowBackgroundPages();
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual bool IsDownloadShelfVisible() const;
virtual DownloadShelf* GetDownloadShelf();
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 2171633..f9a5744 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1074,6 +1074,12 @@ void BrowserView::ShowTaskManager() {
browser::ShowTaskManager();
}
+void BrowserView::ShowBackgroundPages() {
+ // TODO(atwilson): Support highlighting background resources.
+ // (http://crbug.com/71490)
+ browser::ShowTaskManager();
+}
+
void BrowserView::ShowBookmarkBubble(const GURL& url, bool already_bookmarked) {
toolbar_->location_bar()->ShowStarBubble(url, !already_bookmarked);
}
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 66b35f6..98ec934 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -289,6 +289,7 @@ class BrowserView : public BrowserBubbleHost,
virtual views::Window* ShowAboutChromeDialog();
virtual void ShowUpdateChromeDialog();
virtual void ShowTaskManager();
+ virtual void ShowBackgroundPages();
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual void SetDownloadShelfVisible(bool visible);
virtual bool IsDownloadShelfVisible() const;
diff --git a/chrome/test/test_browser_window.h b/chrome/test/test_browser_window.h
index 1e9e99f..4bd7e0d 100644
--- a/chrome/test/test_browser_window.h
+++ b/chrome/test/test_browser_window.h
@@ -74,6 +74,7 @@ class TestBrowserWindow : public BrowserWindow {
virtual views::Window* ShowAboutChromeDialog() { return NULL; }
virtual void ShowUpdateChromeDialog() {}
virtual void ShowTaskManager() {}
+ virtual void ShowBackgroundPages() {}
virtual void ShowBookmarkManager() {}
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) {}
virtual bool IsDownloadShelfVisible() const { return false; }