Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / file_system_provider / notification_manager.h
1 // Copyright 2014 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 #ifndef CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_NOTIFICATION_MANAGER_H_
6 #define CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_NOTIFICATION_MANAGER_H_
7
8 #include <map>
9 #include <string>
10
11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/browser/chromeos/file_system_provider/notification_manager_interface.h"
14 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
15 #include "chrome/browser/extensions/app_icon_loader.h"
16
17 class Profile;
18
19 namespace gfx {
20 class Image;
21 class ImageSkia;
22 }  // message gfx
23
24 namespace message_center {
25 class Notification;
26 }  // namespace message_center
27
28 namespace chromeos {
29 namespace file_system_provider {
30
31 // Provided file systems's manager for showing notifications. Shows always
32 // up to one notification. If more than one request is unresponsive, then
33 // all of them will be aborted when clicking on the notification button.
34 class NotificationManager : public NotificationManagerInterface,
35                             public extensions::AppIconLoader::Delegate {
36  public:
37   NotificationManager(Profile* profile,
38                       const ProvidedFileSystemInfo& file_system_info);
39   virtual ~NotificationManager();
40
41   // NotificationManagerInterface overrides:
42   virtual void ShowUnresponsiveNotification(
43       int id,
44       const NotificationCallback& callback) OVERRIDE;
45   virtual void HideUnresponsiveNotification(int id) OVERRIDE;
46
47   // Invoked when a button on the notification is clicked.
48   void OnButtonClick(int button_index);
49
50   // Invoked when the notification failed to show up.
51   void OnError();
52
53   // Invoked when the notification got closed either by user or by system.
54   void OnClose();
55
56   // extensions::AppIconLoader::Delegate overrides:
57   virtual void SetAppImage(const std::string& id,
58                            const gfx::ImageSkia& image) OVERRIDE;
59
60  private:
61   typedef std::map<int, NotificationCallback> CallbackMap;
62
63   // Creates a notification object for the actual state of the manager.
64   scoped_ptr<message_center::Notification> CreateNotification();
65
66   // Handles a notification result by calling all registered callbacks and
67   // clearing the list.
68   void OnNotificationResult(NotificationResult result);
69
70   Profile* profile_;  // Not owned.
71   ProvidedFileSystemInfo file_system_info_;
72   CallbackMap callbacks_;
73   scoped_ptr<extensions::AppIconLoader> icon_loader_;
74   scoped_ptr<gfx::Image> extension_icon_;
75
76   DISALLOW_COPY_AND_ASSIGN(NotificationManager);
77 };
78
79 }  // namespace file_system_provider
80 }  // namespace chromeos
81
82 #endif  // CHROME_BROWSER_CHROMEOS_FILE_SYSTEM_PROVIDER_NOTIFICATION_MANAGER_H_