12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_MESSAGE_CENTER_NOTIFICATION_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_MESSAGE_CENTER_NOTIFICATION_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector>
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/image/image.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_export.h"
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/message_center/notification_delegate.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/notification_types.h"
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "ui/message_center/notifier_settings.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace message_center {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MESSAGE_CENTER_EXPORT NotificationItem {
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 title;
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 message;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NotificationItem(const base::string16& title, const base::string16& message);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct MESSAGE_CENTER_EXPORT ButtonInfo {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 title;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Image icon;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ButtonInfo(const base::string16& title);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MESSAGE_CENTER_EXPORT RichNotificationData {
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RichNotificationData();
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RichNotificationData(const RichNotificationData& other);
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ~RichNotificationData();
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int priority;
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool never_timeout;
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::Time timestamp;
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 context_message;
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  gfx::Image image;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Image small_image;
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  std::vector<NotificationItem> items;
49a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  int progress;
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  std::vector<ButtonInfo> buttons;
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  bool should_make_spoken_feedback_for_popup_updates;
528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool clickable;
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MESSAGE_CENTER_EXPORT Notification {
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Notification(NotificationType type,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)               const std::string& id,
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               const base::string16& title,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               const base::string16& message,
61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)               const gfx::Image& icon,
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)               const base::string16& display_source,
63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)               const NotifierId& notifier_id,
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)               const RichNotificationData& optional_fields,
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)               NotificationDelegate* delegate);
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  Notification(const Notification& other);
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~Notification();
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Copies the internal on-memory state from |base|, i.e. shown_as_popup,
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // is_read, and never_timeout.
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void CopyState(Notification* base);
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotificationType type() const { return type_; }
76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_type(NotificationType type) { type_ = type; }
77558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Uniquely identifies a notification in the message center. For
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // notification front ends that support multiple profiles, this id should
80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // identify a unique profile + frontend_notification_id combination. You can
81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Use this id against the MessageCenter interface but not the
82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // NotificationUIManager interface.
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& id() const { return id_; }
84558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& title() const { return title_; }
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_title(const base::string16& title) { title_ = title; }
87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& message() const { return message_; }
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_message(const base::string16& message) { message_ = message; }
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // A display string for the source of the notification.
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& display_source() const { return display_source_; }
93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
94424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  const NotifierId& notifier_id() const { return notifier_id_; }
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void set_profile_id(const std::string& profile_id) {
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    notifier_id_.profile_id = profile_id;
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Begin unpacked values from optional_fields.
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int priority() const { return optional_fields_.priority; }
102558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_priority(int priority) { optional_fields_.priority = priority; }
103558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::Time timestamp() const { return optional_fields_.timestamp; }
105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_timestamp(const base::Time& timestamp) {
106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    optional_fields_.timestamp = timestamp;
107558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
108558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& context_message() const {
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return optional_fields_.context_message;
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_context_message(const base::string16& context_message) {
11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    optional_fields_.context_message = context_message;
11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const std::vector<NotificationItem>& items() const {
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return optional_fields_.items;
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
119558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_items(const std::vector<NotificationItem>& items) {
120558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    optional_fields_.items = items;
121558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
122558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
123a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  int progress() const { return optional_fields_.progress; }
124558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void set_progress(int progress) { optional_fields_.progress = progress; }
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // End unpacked values.
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Images fetched asynchronously.
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Image& icon() const { return icon_; }
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_icon(const gfx::Image& icon) { icon_ = icon; }
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const gfx::Image& image() const { return optional_fields_.image; }
132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void set_image(const gfx::Image& image) { optional_fields_.image = image; }
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const gfx::Image& small_image() const { return optional_fields_.small_image; }
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_small_image(const gfx::Image& image) {
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    optional_fields_.small_image = image;
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Buttons, with icons fetched asynchronously.
140868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const std::vector<ButtonInfo>& buttons() const {
141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return optional_fields_.buttons;
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void set_buttons(const std::vector<ButtonInfo>& buttons) {
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    optional_fields_.buttons = buttons;
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
146868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void SetButtonIcon(size_t index, const gfx::Image& icon);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool shown_as_popup() const { return shown_as_popup_; }
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_shown_as_popup(bool shown_as_popup) {
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    shown_as_popup_ = shown_as_popup;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Read status in the message center.
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool IsRead() const;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void set_is_read(bool read) { is_read_ = read; }
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Used to keep the order of notifications with the same timestamp.
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The notification with lesser serial_number is considered 'older'.
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  unsigned serial_number() { return serial_number_; }
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Marks this explicitly to prevent the timeout dismiss of notification.
162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // This is used by webkit notifications to keep the existing behavior.
163868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void set_never_timeout(bool never_timeout) {
164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    optional_fields_.never_timeout = never_timeout;
165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool never_timeout() const { return optional_fields_.never_timeout; }
1688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool clickable() const { return optional_fields_.clickable; }
1708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  void set_clickable(bool clickable) {
1718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    optional_fields_.clickable = clickable;
1728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  }
1738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NotificationDelegate* delegate() const { return delegate_.get(); }
1758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const RichNotificationData& rich_notification_data() const {
177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    return optional_fields_;
178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Set the priority to SYSTEM. The system priority user needs to call this
1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // method explicitly, to avoid setting it accidentally.
1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void SetSystemPriority();
1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
184868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Delegate actions.
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Display() const { delegate()->Display(); }
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Error() const { delegate()->Error(); }
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  bool HasClickedListener() const { return delegate()->HasClickedListener(); }
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Click() const { delegate()->Click(); }
189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void ButtonClick(int index) const { delegate()->ButtonClick(index); }
190868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void Close(bool by_user) const { delegate()->Close(by_user); }
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Helper method to create a simple system notification. |click_callback|
1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // will be invoked when the notification is clicked.
1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  static scoped_ptr<Notification> CreateSystemNotification(
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const std::string& notification_id,
1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::string16& title,
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::string16& message,
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const gfx::Image& icon,
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const std::string& system_component_id,
2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::Closure& click_callback);
2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected:
2036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  Notification& operator=(const Notification& other);
2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // The type of notification we'd like displayed.
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotificationType type_;
207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string id_;
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 title_;
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 message_;
211868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Image data for the associated icon, used by Ash when available.
213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  gfx::Image icon_;
214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // The display string for the source of the notification.  Could be
216868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // the same as origin_url_, or the name of an extension.
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 display_source_;
218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
220424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  NotifierId notifier_id_;
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  unsigned serial_number_;
222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RichNotificationData optional_fields_;
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool shown_as_popup_;  // True if this has been shown as a popup.
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool is_read_;  // True if this has been seen in the message center.
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // A proxy object that allows access back to the JavaScript object that
22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // represents the notification, for firing events.
22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_refptr<NotificationDelegate> delegate_;
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace message_center
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // UI_MESSAGE_CENTER_NOTIFICATION_H_
234