1// Copyright (c) 2012 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// Handles the visible notification (or balloons).
6
7#ifndef CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
8#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
9
10#include <deque>
11#include <string>
12
13#include "base/basictypes.h"
14
15class Balloon;
16class GURL;
17class Notification;
18class Profile;
19
20// This class provides support for implementing a BalloonCollection
21// including the parts common between Chrome UI and ChromeOS UI.
22class BalloonCollectionBase {
23 public:
24  BalloonCollectionBase();
25  virtual ~BalloonCollectionBase();
26
27  typedef std::deque<Balloon*> Balloons;
28
29  // Adds a balloon to the collection. Takes ownership of pointer.
30  virtual void Add(Balloon* balloon, bool add_to_front);
31
32  // Removes a balloon from the collection (if present).  Frees
33  // the pointer after removal.
34  virtual void Remove(Balloon* balloon);
35
36  // Returns true if any balloon matches the given notification id.
37  virtual const Notification* FindById(const std::string& id) const;
38
39  // Finds any balloon matching the given notification id, and
40  // calls CloseByScript on it.  Returns true if anything was
41  // found.
42  virtual bool CloseById(const std::string& id);
43
44  // Finds all balloons matching the given notification source,
45  // and calls CloseByScript on them.  Returns true if anything
46  // was found.
47  virtual bool CloseAllBySourceOrigin(const GURL& source_origin);
48
49  // Finds all balloons matching the given profile and calls CloseByScript
50  // on them.  Returns true if anything was found.
51  virtual bool CloseAllByProfile(Profile* profile);
52
53  // Calls CloseByScript on all balloons.
54  virtual void CloseAll();
55
56  const Balloons& balloons() const { return balloons_; }
57
58  // Returns the balloon matching the given notification id, or
59  // NULL if there is no matching balloon.
60  Balloon* FindBalloonById(const std::string& notification_id);
61
62  // Returns the balloon matching the given notification, or
63  // NULL if there is no matching balloon.
64  Balloon* FindBalloon(const Notification& notification);
65
66  // The number of balloons being displayed.
67  int count() const { return static_cast<int>(balloons_.size()); }
68
69 private:
70  // Queue of active balloons.  Pointers are owned by this class.
71  Balloons balloons_;
72
73  DISALLOW_COPY_AND_ASSIGN(BalloonCollectionBase);
74};
75
76#endif  // CHROME_BROWSER_NOTIFICATIONS_BALLOON_COLLECTION_BASE_H_
77