| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/notifications/balloon_collection_base.h" |
| |
| #include "base/stl_util-inl.h" |
| #include "chrome/browser/notifications/balloon.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "googleurl/src/gurl.h" |
| |
| BalloonCollectionBase::BalloonCollectionBase() { |
| } |
| |
| BalloonCollectionBase::~BalloonCollectionBase() { |
| STLDeleteElements(&balloons_); |
| } |
| |
| void BalloonCollectionBase::Add(Balloon* balloon) { |
| balloons_.push_back(balloon); |
| } |
| |
| void BalloonCollectionBase::Remove(Balloon* balloon) { |
| // Free after removing. |
| scoped_ptr<Balloon> to_delete(balloon); |
| Balloons::iterator iter; |
| for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { |
| if ((*iter) == balloon) { |
| balloons_.erase(iter); |
| return; |
| } |
| } |
| } |
| |
| bool BalloonCollectionBase::CloseById(const std::string& id) { |
| // Use a local list of balloons to close to avoid breaking |
| // iterator changes on each close. |
| Balloons to_close; |
| Balloons::iterator iter; |
| for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { |
| if ((*iter)->notification().notification_id() == id) |
| to_close.push_back(*iter); |
| } |
| for (iter = to_close.begin(); iter != to_close.end(); ++iter) |
| (*iter)->CloseByScript(); |
| |
| return !to_close.empty(); |
| } |
| |
| bool BalloonCollectionBase::CloseAllBySourceOrigin( |
| const GURL& source_origin) { |
| // Use a local list of balloons to close to avoid breaking |
| // iterator changes on each close. |
| Balloons to_close; |
| Balloons::iterator iter; |
| for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { |
| if ((*iter)->notification().origin_url() == source_origin) |
| to_close.push_back(*iter); |
| } |
| for (iter = to_close.begin(); iter != to_close.end(); ++iter) |
| (*iter)->CloseByScript(); |
| |
| return !to_close.empty(); |
| } |
| |
| void BalloonCollectionBase::CloseAll() { |
| // Use a local list of balloons to close to avoid breaking |
| // iterator changes on each close. |
| Balloons to_close = balloons_; |
| for (Balloons::iterator iter = to_close.begin(); |
| iter != to_close.end(); ++iter) |
| (*iter)->CloseByScript(); |
| } |
| |
| Balloon* BalloonCollectionBase::FindBalloon( |
| const Notification& notification) { |
| Balloons::iterator iter; |
| for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { |
| if ((*iter)->notification().notification_id() == |
| notification.notification_id()) { |
| return *iter; |
| } |
| } |
| return NULL; |
| } |