Home | History | Annotate | Download | only in notifications
      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 
     12 BalloonCollectionBase::BalloonCollectionBase() {
     13 }
     14 
     15 BalloonCollectionBase::~BalloonCollectionBase() {
     16   STLDeleteElements(&balloons_);
     17 }
     18 
     19 void BalloonCollectionBase::Add(Balloon* balloon) {
     20   balloons_.push_back(balloon);
     21 }
     22 
     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 
     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 
     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 
     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 
     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