diff options
author | dewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-18 09:51:25 +0000 |
---|---|---|
committer | dewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-18 09:51:25 +0000 |
commit | 4b49fb0c491fbec221cabd70447e69337d3259e5 (patch) | |
tree | a720e2c05dc0973ca21aa55d2805d9f46116a2fc /chrome/browser/status_icons | |
parent | db7fec83058900c80f0b5edee713d09317e51e27 (diff) | |
download | chromium_src-4b49fb0c491fbec221cabd70447e69337d3259e5.zip chromium_src-4b49fb0c491fbec221cabd70447e69337d3259e5.tar.gz chromium_src-4b49fb0c491fbec221cabd70447e69337d3259e5.tar.bz2 |
Add support for named status icons.
This addresses a bug where it's not possible to pin a StatusIcon to the taskbar if it is hidden and reshown, since the ids are never reused.
BUG=252524,189130
Review URL: https://chromiumcodereview.appspot.com/17611003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@212310 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/status_icons')
-rw-r--r-- | chrome/browser/status_icons/status_tray.cc | 4 | ||||
-rw-r--r-- | chrome/browser/status_icons/status_tray.h | 14 | ||||
-rw-r--r-- | chrome/browser/status_icons/status_tray_unittest.cc | 21 |
3 files changed, 24 insertions, 15 deletions
diff --git a/chrome/browser/status_icons/status_tray.cc b/chrome/browser/status_icons/status_tray.cc index 3d99ad5..aaa7a57 100644 --- a/chrome/browser/status_icons/status_tray.cc +++ b/chrome/browser/status_icons/status_tray.cc @@ -11,8 +11,8 @@ StatusTray::~StatusTray() { } -StatusIcon* StatusTray::CreateStatusIcon() { - StatusIcon* icon = CreatePlatformStatusIcon(); +StatusIcon* StatusTray::CreateStatusIcon(StatusIconType type) { + StatusIcon* icon = CreatePlatformStatusIcon(type); if (icon) status_icons_.push_back(icon); return icon; diff --git a/chrome/browser/status_icons/status_tray.h b/chrome/browser/status_icons/status_tray.h index c715ec5..e4f240d 100644 --- a/chrome/browser/status_icons/status_tray.h +++ b/chrome/browser/status_icons/status_tray.h @@ -15,6 +15,14 @@ class StatusIcon; // APIs to add/remove icons to the tray and attach context menus. class StatusTray { public: + enum StatusIconType { + NOTIFICATION_TRAY_ICON = 0, + MEDIA_STREAM_CAPTURE_ICON, + BACKGROUND_MODE_ICON, + OTHER_ICON, + NAMED_STATUS_ICON_COUNT + }; + // Static factory method that is implemented separately for each platform to // produce the appropriate platform-specific instance. Returns NULL if this // platform does not support status icons. @@ -24,7 +32,7 @@ class StatusTray { // Creates a new StatusIcon. The StatusTray retains ownership of the // StatusIcon. Returns NULL if the StatusIcon could not be created. - StatusIcon* CreateStatusIcon(); + StatusIcon* CreateStatusIcon(StatusIconType type); // Removes |icon| from this status tray. void RemoveStatusIcon(StatusIcon* icon); @@ -35,14 +43,12 @@ class StatusTray { StatusTray(); // Factory method for creating a status icon for this platform. - virtual StatusIcon* CreatePlatformStatusIcon() = 0; + virtual StatusIcon* CreatePlatformStatusIcon(StatusIconType type) = 0; // Returns the list of active status icons so subclasses can operate on them. const StatusIcons& status_icons() const { return status_icons_; } private: - FRIEND_TEST_ALL_PREFIXES(StatusTrayTest, CreateRemove); - // List containing all active StatusIcons. The icons are owned by this // StatusTray. StatusIcons status_icons_; diff --git a/chrome/browser/status_icons/status_tray_unittest.cc b/chrome/browser/status_icons/status_tray_unittest.cc index 818a4fa..a71fa9a 100644 --- a/chrome/browser/status_icons/status_tray_unittest.cc +++ b/chrome/browser/status_icons/status_tray_unittest.cc @@ -24,25 +24,28 @@ class MockStatusIcon : public StatusIcon { class TestStatusTray : public StatusTray { public: - MOCK_METHOD0(CreatePlatformStatusIcon, StatusIcon*()); + MOCK_METHOD1(CreatePlatformStatusIcon, + StatusIcon*(StatusTray::StatusIconType type)); MOCK_METHOD1(UpdatePlatformContextMenu, void(ui::MenuModel*)); + + const StatusIcons& GetStatusIconsForTest() const { return status_icons(); } }; TEST(StatusTrayTest, Create) { // Check for creation and leaks. TestStatusTray tray; - EXPECT_CALL(tray, - CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon())); - tray.CreateStatusIcon(); + EXPECT_CALL(tray, CreatePlatformStatusIcon(StatusTray::OTHER_ICON)).WillOnce( + Return(new MockStatusIcon())); + tray.CreateStatusIcon(StatusTray::OTHER_ICON); } // Make sure that removing an icon removes it from the list. TEST(StatusTrayTest, CreateRemove) { TestStatusTray tray; - EXPECT_CALL(tray, - CreatePlatformStatusIcon()).WillOnce(Return(new MockStatusIcon())); - StatusIcon* icon = tray.CreateStatusIcon(); - EXPECT_EQ(1U, tray.status_icons_.size()); + EXPECT_CALL(tray, CreatePlatformStatusIcon(StatusTray::OTHER_ICON)).WillOnce( + Return(new MockStatusIcon())); + StatusIcon* icon = tray.CreateStatusIcon(StatusTray::OTHER_ICON); + EXPECT_EQ(1U, tray.GetStatusIconsForTest().size()); tray.RemoveStatusIcon(icon); - EXPECT_EQ(0U, tray.status_icons_.size()); + EXPECT_EQ(0U, tray.GetStatusIconsForTest().size()); } |