diff options
Diffstat (limited to 'chrome/browser/status_icons/status_tray.h')
-rw-r--r-- | chrome/browser/status_icons/status_tray.h | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/chrome/browser/status_icons/status_tray.h b/chrome/browser/status_icons/status_tray.h index 663bfa8..30a60aa 100644 --- a/chrome/browser/status_icons/status_tray.h +++ b/chrome/browser/status_icons/status_tray.h @@ -10,20 +10,15 @@ class StatusIcon; -// Factory interface for creating icons to improve testability. -class StatusIconFactory { - public: - virtual StatusIcon* CreateIcon() = 0; - virtual ~StatusIconFactory() { } -}; - // Provides a cross-platform interface to the system's status tray, and exposes // APIs to add/remove icons to the tray and attach context menus. class StatusTray { public: - // Takes ownership of |factory|. - explicit StatusTray(StatusIconFactory* factory); - ~StatusTray(); + // Static factory method that is implemented separately for each platform to + // produce the appropriate platform-specific instance. + static StatusTray* Create(); + + virtual ~StatusTray(); // Gets the current status icon associated with this identifier, or creates // a new one if none exists. The StatusTray retains ownership of the @@ -33,15 +28,27 @@ class StatusTray { // Removes the current status icon associated with this identifier, if any. void RemoveStatusIcon(const string16& identifier); - private: + protected: + StatusTray(); + // Factory method for creating a status icon. + virtual StatusIcon* CreateStatusIcon() = 0; + + // Removes all StatusIcons (used by derived classes to clean up in case they + // track external state used by the StatusIcons). + void RemoveAllIcons(); + typedef base::hash_map<string16, StatusIcon*> StatusIconMap; + // Returns the list of active status icons so subclasses can operate on them. + const StatusIconMap& status_icons() { return status_icons_; } + + private: // Map containing all active StatusIcons. // Key: String identifiers (passed in to GetStatusIcon) // Value: The StatusIcon associated with that identifier (strong pointer - // StatusIcons are freed when the StatusTray destructor is called). StatusIconMap status_icons_; - scoped_ptr<StatusIconFactory> factory_; + DISALLOW_COPY_AND_ASSIGN(StatusTray); }; #endif // CHROME_BROWSER_STATUS_ICONS_STATUS_TRAY_H_ |