• 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 #include "chrome/browser/notifications/balloon_collection_base.h"
6 
7 #include "base/stl_util-inl.h"
8 #include "chrome/browser/notifications/balloon.h"
9 #include "chrome/browser/notifications/notification.h"
10 #include "googleurl/src/gurl.h"
11 
BalloonCollectionBase()12 BalloonCollectionBase::BalloonCollectionBase() {
13 }
14 
~BalloonCollectionBase()15 BalloonCollectionBase::~BalloonCollectionBase() {
16   STLDeleteElements(&balloons_);
17 }
18 
Add(Balloon * balloon)19 void BalloonCollectionBase::Add(Balloon* balloon) {
20   balloons_.push_back(balloon);
21 }
22 
Remove(Balloon * balloon)23 void BalloonCollectionBase::Remove(Balloon* balloon) {
24   // Free after removing.
25   scoped_ptr<Balloon> to_delete(balloon);
26   Balloons::iterator iter;
27   for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
28     if ((*iter) == balloon) {
29       balloons_.erase(iter);
30       return;
31     }
32   }
33 }
34 
CloseById(const std::string & id)35 bool BalloonCollectionBase::CloseById(const std::string& id) {
36   // Use a local list of balloons to close to avoid breaking
37   // iterator changes on each close.
38   Balloons to_close;
39   Balloons::iterator iter;
40   for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
41     if ((*iter)->notification().notification_id() == id)
42       to_close.push_back(*iter);
43   }
44   for (iter = to_close.begin(); iter != to_close.end(); ++iter)
45     (*iter)->CloseByScript();
46 
47   return !to_close.empty();
48 }
49 
CloseAllBySourceOrigin(const GURL & source_origin)50 bool BalloonCollectionBase::CloseAllBySourceOrigin(
51     const GURL& source_origin) {
52   // Use a local list of balloons to close to avoid breaking
53   // iterator changes on each close.
54   Balloons to_close;
55   Balloons::iterator iter;
56   for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
57     if ((*iter)->notification().origin_url() == source_origin)
58       to_close.push_back(*iter);
59   }
60   for (iter = to_close.begin(); iter != to_close.end(); ++iter)
61     (*iter)->CloseByScript();
62 
63   return !to_close.empty();
64 }
65 
CloseAll()66 void BalloonCollectionBase::CloseAll() {
67   // Use a local list of balloons to close to avoid breaking
68   // iterator changes on each close.
69   Balloons to_close = balloons_;
70   for (Balloons::iterator iter = to_close.begin();
71        iter != to_close.end(); ++iter)
72     (*iter)->CloseByScript();
73 }
74 
FindBalloon(const Notification & notification)75 Balloon* BalloonCollectionBase::FindBalloon(
76     const Notification& notification) {
77   Balloons::iterator iter;
78   for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) {
79     if ((*iter)->notification().notification_id() ==
80         notification.notification_id()) {
81       return *iter;
82     }
83   }
84   return NULL;
85 }
86