diff options
Diffstat (limited to 'chrome/browser/notifications/balloon_collection_base.cc')
-rw-r--r-- | chrome/browser/notifications/balloon_collection_base.cc | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/chrome/browser/notifications/balloon_collection_base.cc b/chrome/browser/notifications/balloon_collection_base.cc new file mode 100644 index 0000000..94765c0 --- /dev/null +++ b/chrome/browser/notifications/balloon_collection_base.cc @@ -0,0 +1,76 @@ +// 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(); +} + +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; +} |