| Index: chrome/browser/download/notification/download_notification_item.h | 
| diff --git a/chrome/browser/download/notification/download_notification_item.h b/chrome/browser/download/notification/download_notification_item.h | 
| index 76fb48b9e5a7e4c9d8b96d5f6850b98f4ec504be..b9fc87b7a367253900eb1dda59a4b8d7f77c390e 100644 | 
| --- a/chrome/browser/download/notification/download_notification_item.h | 
| +++ b/chrome/browser/download/notification/download_notification_item.h | 
| @@ -9,11 +9,13 @@ | 
|  | 
| #include "base/strings/string_number_conversions.h" | 
| #include "chrome/browser/download/download_commands.h" | 
| +#include "chrome/browser/image_decoder.h" | 
| #include "chrome/browser/notifications/notification.h" | 
| #include "chrome/browser/notifications/notification_delegate.h" | 
| #include "chrome/browser/notifications/notification_test_util.h" | 
| #include "content/public/browser/download_item.h" | 
| #include "grit/theme_resources.h" | 
| +#include "third_party/skia/include/core/SkBitmap.h" | 
| #include "ui/message_center/message_center.h" | 
| #include "ui/message_center/message_center_observer.h" | 
|  | 
| @@ -21,7 +23,8 @@ namespace test { | 
| class DownloadNotificationItemTest; | 
| } | 
|  | 
| -class DownloadNotificationItem : public content::DownloadItem::Observer { | 
| +class DownloadNotificationItem : public content::DownloadItem::Observer, | 
| +                                 public ImageDecoder::ImageRequest { | 
| public: | 
| class Delegate { | 
| public: | 
| @@ -47,6 +50,14 @@ class DownloadNotificationItem : public content::DownloadItem::Observer { | 
| UPDATE_EXISTING | 
| }; | 
|  | 
| +  enum ImageDecodeStatus { | 
| +    NOT_STARTED, | 
| +    IN_PROGRESS, | 
| +    DONE, | 
| +    FAILED, | 
| +    NOT_IMAGE | 
| +  }; | 
| + | 
| class NotificationWatcher : public NotificationDelegate { | 
| public: | 
| explicit NotificationWatcher(DownloadNotificationItem* item); | 
| @@ -76,6 +87,7 @@ class DownloadNotificationItem : public content::DownloadItem::Observer { | 
| // Methods called from NotificationWatcher. | 
| void OnNotificationClick(); | 
| void OnNotificationButtonClick(int button_index); | 
| +  void OnNotificationClose(bool by_user); | 
|  | 
| // DownloadItem::Observer overrides: | 
| void OnDownloadUpdated(content::DownloadItem* item) override; | 
| @@ -86,7 +98,16 @@ class DownloadNotificationItem : public content::DownloadItem::Observer { | 
| void CloseNotificationByUser(); | 
| void CloseNotificationByNonUser(); | 
| void UpdateNotificationData(NotificationUpdateType type); | 
| -  void SetNotificationImage(int resource_id); | 
| + | 
| +  // Set icon of the notification. | 
| +  void SetNotificationIcon(int resource_id); | 
| + | 
| +  // Set preview image of the notification. Must be called on IO thread. | 
| +  void OnImageLoaded(const std::string& image_data); | 
| + | 
| +  // ImageDecoder::ImageRequest overrides: | 
| +  void OnImageDecoded(const SkBitmap& decoded_image) override; | 
| +  void OnDecodeImageFailed() override; | 
|  | 
| NotificationUIManager* notification_ui_manager() const; | 
|  | 
| @@ -115,6 +136,11 @@ class DownloadNotificationItem : public content::DownloadItem::Observer { | 
| scoped_ptr<std::vector<DownloadCommands::Command>> button_actions_; | 
| Delegate* const delegate_; | 
|  | 
| +  // Status of the preview image decode. | 
| +  ImageDecodeStatus image_decode_status_ = NOT_STARTED; | 
| + | 
| +  base::WeakPtrFactory<DownloadNotificationItem> weak_factory_; | 
| + | 
| DISALLOW_COPY_AND_ASSIGN(DownloadNotificationItem); | 
| }; | 
|  | 
|  |