- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / notifications / message_center_settings_controller.h
1 // Copyright (c) 2013 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_NOTIFICATIONS_MESSAGE_CENTER_SETTINGS_CONTROLLER_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_SETTINGS_CONTROLLER_H_
7
8 #include <map>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/scoped_vector.h"
14 #include "base/observer_list.h"
15 #include "chrome/browser/extensions/app_icon_loader.h"
16 #include "chrome/common/content_settings.h"
17 #include "content/public/browser/notification_details.h"
18 #include "content/public/browser/notification_observer.h"
19 #include "content/public/browser/notification_registrar.h"
20 #include "content/public/browser/notification_source.h"
21 #include "ui/message_center/notifier_settings.h"
22
23 class CancelableTaskTracker;
24 class Profile;
25 class ProfileInfoCache;
26
27 namespace chrome {
28 struct FaviconImageResult;
29 }
30
31 namespace message_center {
32 class ProfileNotifierGroup;
33 }
34
35 // The class to bridge between the settings UI of notifiers and the preference
36 // storage.
37 class MessageCenterSettingsController
38     : public message_center::NotifierSettingsProvider,
39       public content::NotificationObserver,
40       public extensions::AppIconLoader::Delegate {
41  public:
42   explicit MessageCenterSettingsController(
43       ProfileInfoCache* profile_info_cache);
44   virtual ~MessageCenterSettingsController();
45
46   // Overridden from message_center::NotifierSettingsProvider.
47   virtual void AddObserver(
48       message_center::NotifierSettingsObserver* observer) OVERRIDE;
49   virtual void RemoveObserver(
50       message_center::NotifierSettingsObserver* observer) OVERRIDE;
51   virtual size_t GetNotifierGroupCount() const OVERRIDE;
52   virtual const message_center::NotifierGroup& GetNotifierGroupAt(
53       size_t index) const OVERRIDE;
54   virtual bool IsNotifierGroupActiveAt(size_t index) const OVERRIDE;
55   virtual void SwitchToNotifierGroup(size_t index) OVERRIDE;
56   virtual const message_center::NotifierGroup& GetActiveNotifierGroup() const
57       OVERRIDE;
58   virtual void GetNotifierList(
59       std::vector<message_center::Notifier*>* notifiers) OVERRIDE;
60   virtual void SetNotifierEnabled(const message_center::Notifier& notifier,
61                                   bool enabled) OVERRIDE;
62   virtual void OnNotifierSettingsClosing() OVERRIDE;
63   virtual bool NotifierHasAdvancedSettings(
64       const message_center::NotifierId& notifier_id) const OVERRIDE;
65   virtual void OnNotifierAdvancedSettingsRequested(
66       const message_center::NotifierId& notifier_id,
67       const std::string* notification_id) OVERRIDE;
68
69   // Overridden from extensions::AppIconLoader::Delegate.
70   virtual void SetAppImage(const std::string& id,
71                            const gfx::ImageSkia& image) OVERRIDE;
72
73  private:
74   // Overridden from content::NotificationObserver.
75   virtual void Observe(int type,
76                        const content::NotificationSource& source,
77                        const content::NotificationDetails& details) OVERRIDE;
78
79   void OnFaviconLoaded(const GURL& url,
80                        const chrome::FaviconImageResult& favicon_result);
81
82   Profile* GetCurrentProfile() const;
83
84   void RebuildNotifierGroups();
85
86   // The views displaying notifier settings.
87   ObserverList<message_center::NotifierSettingsObserver> observers_;
88
89   // The task tracker for loading favicons.
90   scoped_ptr<CancelableTaskTracker> favicon_tracker_;
91
92   scoped_ptr<extensions::AppIconLoader> app_icon_loader_;
93
94   std::map<string16, ContentSettingsPattern> patterns_;
95
96   // The list of all configurable notifier groups. This is each profile that is
97   // loaded (and in the ProfileInfoCache - so no incognito profiles go here).
98   ScopedVector<message_center::ProfileNotifierGroup> notifier_groups_;
99   size_t current_notifier_group_;
100
101   content::NotificationRegistrar registrar_;
102
103   ProfileInfoCache* profile_info_cache_;
104
105   DISALLOW_COPY_AND_ASSIGN(MessageCenterSettingsController);
106 };
107
108 #endif  // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_SETTINGS_CONTROLLER_H_