1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_SYSTEM_NOTIFICATION_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_SYSTEM_NOTIFICATION_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/notifications/balloon_collection_impl.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/notification_delegate.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass MessageCallback;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The system notification object handles the display of a system notification
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SystemNotification {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The profile is the current user profile. The id is any string used
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to uniquely identify this notification. The title is the title of
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the message to be displayed. On creation, the message is hidden.
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SystemNotification(Profile* profile,
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     const std::string& id,
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     int icon_resource_id,
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     const string16& title);
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Allows to provide custom NotificationDelegate.
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SystemNotification(Profile* profile,
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     NotificationDelegate* delegate,
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                     int icon_resource_id,
38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                     const string16& title);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~SystemNotification();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void set_title(const string16& title) { title_ = title; }
43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Show will show or update the message for this notification
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on a transition to urgent, the notification will be shown if it was
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // previously hidden or minimized by the user.
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void Show(const string16& message, bool urgent, bool sticky);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Same as Show() above with a footer link at the bottom and a callback
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // for when the link is clicked.
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void Show(const string16& message, const string16& link_text,
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            MessageCallback* callback, bool urgent, bool sticky);
53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Hide will dismiss the notification, if the notification is already
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // hidden it does nothing
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Hide();
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Current visibility state for this notification.
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool visible() const { return visible_; }
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Current urgent state for this notification.
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool urgent() const { return urgent_; }
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  class Delegate : public NotificationDelegate {
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   public:
67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    explicit Delegate(const std::string& id) : id_(id) {}
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void Display() {}
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void Error() {}
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    void Close(bool by_user) {}
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    void Click() {}
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string id() const { return id_; }
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch   private:
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string id_;
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DISALLOW_COPY_AND_ASSIGN(Delegate);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void Init(int icon_resource_id);
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile_;
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BalloonCollectionImpl* collection_;
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_refptr<NotificationDelegate> delegate_;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GURL icon_;
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 title_;
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool visible_;
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool urgent_;
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(SystemNotification);
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_NOTIFICATIONS_SYSTEM_NOTIFICATION_H_
96