| // Copyright (c) 2011 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/chromeos/notifications/system_notification.h" |
| |
| #include "base/callback.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/chromeos/notifications/system_notification_factory.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "chrome/browser/notifications/notification_ui_manager.h" |
| #include "chrome/browser/ui/webui/web_ui_util.h" |
| |
| namespace chromeos { |
| |
| void SystemNotification::Init(int icon_resource_id) { |
| collection_ = static_cast<BalloonCollectionImpl*>( |
| g_browser_process->notification_ui_manager()->balloon_collection()); |
| std::string url = web_ui_util::GetImageDataUrlFromResource(icon_resource_id); |
| DCHECK(!url.empty()); |
| GURL tmp_gurl(url); |
| icon_.Swap(&tmp_gurl); |
| } |
| |
| SystemNotification::SystemNotification(Profile* profile, |
| NotificationDelegate* delegate, |
| int icon_resource_id, |
| const string16& title) |
| : profile_(profile), |
| collection_(NULL), |
| delegate_(delegate), |
| title_(title), |
| visible_(false), |
| urgent_(false) { |
| Init(icon_resource_id); |
| } |
| |
| SystemNotification::SystemNotification(Profile* profile, |
| const std::string& id, |
| int icon_resource_id, |
| const string16& title) |
| : profile_(profile), |
| collection_(NULL), |
| delegate_(new Delegate(id)), |
| title_(title), |
| visible_(false), |
| urgent_(false) { |
| Init(icon_resource_id); |
| } |
| |
| SystemNotification::~SystemNotification() { |
| } |
| |
| void SystemNotification::Show(const string16& message, |
| bool urgent, |
| bool sticky) { |
| Show(message, string16(), NULL, urgent, sticky); |
| } |
| |
| void SystemNotification::Show(const string16& message, |
| const string16& link, |
| MessageCallback* callback, |
| bool urgent, |
| bool sticky) { |
| Notification notify = SystemNotificationFactory::Create(icon_, |
| title_, message, link, delegate_.get()); |
| if (visible_) { |
| // Force showing a user hidden notification on an urgent transition. |
| if (urgent && !urgent_) { |
| collection_->UpdateAndShowNotification(notify); |
| } else { |
| collection_->UpdateNotification(notify); |
| } |
| } else { |
| collection_->AddSystemNotification(notify, profile_, |
| sticky, |
| false /* no controls */); |
| collection_->AddWebUIMessageCallback(notify, "link", callback); |
| } |
| visible_ = true; |
| urgent_ = urgent; |
| } |
| |
| void SystemNotification::Hide() { |
| if (visible_) { |
| collection_->RemoveById(delegate_->id()); |
| visible_ = false; |
| urgent_ = false; |
| } |
| } |
| |
| } // namespace chromeos |