• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_STATUS_ICONS_STATUS_TRAY_H_
6 #define CHROME_BROWSER_STATUS_ICONS_STATUS_TRAY_H_
7 #pragma once
8 
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/gtest_prod_util.h"
13 
14 class StatusIcon;
15 
16 // Provides a cross-platform interface to the system's status tray, and exposes
17 // APIs to add/remove icons to the tray and attach context menus.
18 class StatusTray {
19  public:
20   // Static factory method that is implemented separately for each platform to
21   // produce the appropriate platform-specific instance. Returns NULL if this
22   // platform does not support status icons.
23   static StatusTray* Create();
24 
25   virtual ~StatusTray();
26 
27   // Creates a new StatusIcon. The StatusTray retains ownership of the
28   // StatusIcon. Returns NULL if the StatusIcon could not be created.
29   StatusIcon* CreateStatusIcon();
30 
31   // Removes the current status icon associated with this identifier, if any.
32   void RemoveStatusIcon(StatusIcon* icon);
33 
34  protected:
35   StatusTray();
36   // Factory method for creating a status icon for this platform.
37   virtual StatusIcon* CreatePlatformStatusIcon() = 0;
38 
39   // Removes all StatusIcons (used by derived classes to clean up in case they
40   // track external state used by the StatusIcons).
41   void RemoveAllIcons();
42 
43   typedef std::vector<StatusIcon*> StatusIconList;
44   // Returns the list of active status icons so subclasses can operate on them.
status_icons()45   const StatusIconList& status_icons() { return status_icons_; }
46 
47  private:
48   FRIEND_TEST_ALL_PREFIXES(StatusTrayTest, CreateRemove);
49 
50   // List containing all active StatusIcons.
51   StatusIconList status_icons_;
52 
53   DISALLOW_COPY_AND_ASSIGN(StatusTray);
54 };
55 
56 #endif  // CHROME_BROWSER_STATUS_ICONS_STATUS_TRAY_H_
57