| Index: chrome/browser/notifications/notification_ui_manager.cc
|
| ===================================================================
|
| --- chrome/browser/notifications/notification_ui_manager.cc (revision 0)
|
| +++ chrome/browser/notifications/notification_ui_manager.cc (revision 0)
|
| @@ -0,0 +1,77 @@
|
| +// Copyright (c) 2009 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/notification_ui_manager.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/stl_util-inl.h"
|
| +#include "chrome/browser/notifications/balloon_collection.h"
|
| +#include "chrome/browser/notifications/notification.h"
|
| +#include "chrome/browser/renderer_host/site_instance.h"
|
| +
|
| +// A class which represents a notification waiting to be shown.
|
| +class QueuedNotification {
|
| + public:
|
| + QueuedNotification(const Notification& notification, Profile* profile)
|
| + : notification_(notification),
|
| + profile_(profile) {
|
| + }
|
| +
|
| + const Notification& notification() const { return notification_; }
|
| + Profile* profile() const { return profile_; }
|
| +
|
| + private:
|
| + // The notification to be shown.
|
| + Notification notification_;
|
| +
|
| + // Non owned pointer to the user's profile.
|
| + Profile* profile_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(QueuedNotification);
|
| +};
|
| +
|
| +NotificationUIManager::NotificationUIManager()
|
| + : balloon_collection_(NULL) {
|
| +}
|
| +
|
| +NotificationUIManager::~NotificationUIManager() {
|
| + STLDeleteElements(&show_queue_);
|
| +}
|
| +
|
| +// static
|
| +NotificationUIManager* NotificationUIManager::Create() {
|
| + BalloonCollectionImpl* balloons = new BalloonCollectionImpl();
|
| + NotificationUIManager* instance = new NotificationUIManager();
|
| + instance->Initialize(balloons);
|
| + balloons->set_space_change_listener(instance);
|
| + return instance;
|
| +}
|
| +
|
| +void NotificationUIManager::Add(const Notification& notification,
|
| + Profile* profile) {
|
| + LOG(INFO) << "Added notification. URL: "
|
| + << notification.content_url().spec().c_str();
|
| + show_queue_.push_back(
|
| + new QueuedNotification(notification, profile));
|
| + CheckAndShowNotifications();
|
| +}
|
| +
|
| +void NotificationUIManager::CheckAndShowNotifications() {
|
| + // TODO(johnnyg): http://crbug.com/25061 - Check for user idle/presentation.
|
| + ShowNotifications();
|
| +}
|
| +
|
| +void NotificationUIManager::ShowNotifications() {
|
| + while (!show_queue_.empty() && balloon_collection_->HasSpace()) {
|
| + scoped_ptr<QueuedNotification> queued_notification(show_queue_.front());
|
| + show_queue_.pop_front();
|
| + balloon_collection_->Add(queued_notification->notification(),
|
| + queued_notification->profile());
|
| + }
|
| +}
|
| +
|
| +void NotificationUIManager::OnBalloonSpaceChanged() {
|
| + CheckAndShowNotifications();
|
| +}
|
|
|
| Property changes on: chrome\browser\notifications\notification_ui_manager.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|