• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/chromeos/notifications/system_notification.h"
6 
7 #include "base/callback.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/chromeos/notifications/system_notification_factory.h"
10 #include "chrome/browser/notifications/notification.h"
11 #include "chrome/browser/notifications/notification_ui_manager.h"
12 #include "chrome/browser/ui/webui/web_ui_util.h"
13 
14 namespace chromeos {
15 
Init(int icon_resource_id)16 void SystemNotification::Init(int icon_resource_id) {
17   collection_ = static_cast<BalloonCollectionImpl*>(
18        g_browser_process->notification_ui_manager()->balloon_collection());
19   std::string url = web_ui_util::GetImageDataUrlFromResource(icon_resource_id);
20   DCHECK(!url.empty());
21   GURL tmp_gurl(url);
22   icon_.Swap(&tmp_gurl);
23 }
24 
SystemNotification(Profile * profile,NotificationDelegate * delegate,int icon_resource_id,const string16 & title)25 SystemNotification::SystemNotification(Profile* profile,
26                                        NotificationDelegate* delegate,
27                                        int icon_resource_id,
28                                        const string16& title)
29     : profile_(profile),
30       collection_(NULL),
31       delegate_(delegate),
32       title_(title),
33       visible_(false),
34       urgent_(false) {
35   Init(icon_resource_id);
36 }
37 
SystemNotification(Profile * profile,const std::string & id,int icon_resource_id,const string16 & title)38 SystemNotification::SystemNotification(Profile* profile,
39                                        const std::string& id,
40                                        int icon_resource_id,
41                                        const string16& title)
42     : profile_(profile),
43       collection_(NULL),
44       delegate_(new Delegate(id)),
45       title_(title),
46       visible_(false),
47       urgent_(false) {
48   Init(icon_resource_id);
49 }
50 
~SystemNotification()51 SystemNotification::~SystemNotification() {
52 }
53 
Show(const string16 & message,bool urgent,bool sticky)54 void SystemNotification::Show(const string16& message,
55                               bool urgent,
56                               bool sticky) {
57   Show(message, string16(), NULL, urgent, sticky);
58 }
59 
Show(const string16 & message,const string16 & link,MessageCallback * callback,bool urgent,bool sticky)60 void SystemNotification::Show(const string16& message,
61                               const string16& link,
62                               MessageCallback* callback,
63                               bool urgent,
64                               bool sticky) {
65   Notification notify = SystemNotificationFactory::Create(icon_,
66       title_, message, link, delegate_.get());
67   if (visible_) {
68     // Force showing a user hidden notification on an urgent transition.
69     if (urgent && !urgent_) {
70       collection_->UpdateAndShowNotification(notify);
71     } else {
72       collection_->UpdateNotification(notify);
73     }
74   } else {
75     collection_->AddSystemNotification(notify, profile_,
76                                        sticky,
77                                        false /* no controls */);
78     collection_->AddWebUIMessageCallback(notify, "link", callback);
79   }
80   visible_ = true;
81   urgent_ = urgent;
82 }
83 
Hide()84 void SystemNotification::Hide() {
85   if (visible_) {
86     collection_->RemoveById(delegate_->id());
87     visible_ = false;
88     urgent_ = false;
89   }
90 }
91 
92 }  // namespace chromeos
93