1201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/notifications/balloon_collection_base.h" 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/stl_util-inl.h" 8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/notifications/balloon.h" 9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/notifications/notification.h" 10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "googleurl/src/gurl.h" 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochBalloonCollectionBase::BalloonCollectionBase() { 13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochBalloonCollectionBase::~BalloonCollectionBase() { 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch STLDeleteElements(&balloons_); 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BalloonCollectionBase::Add(Balloon* balloon) { 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch balloons_.push_back(balloon); 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BalloonCollectionBase::Remove(Balloon* balloon) { 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Free after removing. 25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch scoped_ptr<Balloon> to_delete(balloon); 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons::iterator iter; 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if ((*iter) == balloon) { 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch balloons_.erase(iter); 30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochbool BalloonCollectionBase::CloseById(const std::string& id) { 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Use a local list of balloons to close to avoid breaking 37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // iterator changes on each close. 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons to_close; 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons::iterator iter; 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if ((*iter)->notification().notification_id() == id) 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch to_close.push_back(*iter); 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = to_close.begin(); iter != to_close.end(); ++iter) 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch (*iter)->CloseByScript(); 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return !to_close.empty(); 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochbool BalloonCollectionBase::CloseAllBySourceOrigin( 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const GURL& source_origin) { 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Use a local list of balloons to close to avoid breaking 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // iterator changes on each close. 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons to_close; 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons::iterator iter; 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if ((*iter)->notification().origin_url() == source_origin) 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch to_close.push_back(*iter); 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = to_close.begin(); iter != to_close.end(); ++iter) 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch (*iter)->CloseByScript(); 62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return !to_close.empty(); 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BalloonCollectionBase::CloseAll() { 67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Use a local list of balloons to close to avoid breaking 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // iterator changes on each close. 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons to_close = balloons_; 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (Balloons::iterator iter = to_close.begin(); 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch iter != to_close.end(); ++iter) 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch (*iter)->CloseByScript(); 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochBalloon* BalloonCollectionBase::FindBalloon( 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const Notification& notification) { 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch Balloons::iterator iter; 78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch for (iter = balloons_.begin(); iter != balloons_.end(); ++iter) { 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if ((*iter)->notification().notification_id() == 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch notification.notification_id()) { 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return *iter; 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return NULL; 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 86