summaryrefslogtreecommitdiffstats
path: root/chrome/browser/status_icons
diff options
context:
space:
mode:
authordewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-18 09:51:25 +0000
committerdewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-18 09:51:25 +0000
commit4b49fb0c491fbec221cabd70447e69337d3259e5 (patch)
treea720e2c05dc0973ca21aa55d2805d9f46116a2fc /chrome/browser/status_icons
parentdb7fec83058900c80f0b5edee713d09317e51e27 (diff)
downloadchromium_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.cc4
-rw-r--r--chrome/browser/status_icons/status_tray.h14
-rw-r--r--chrome/browser/status_icons/status_tray_unittest.cc21
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());
}