Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: chrome/browser/notifications/message_center_notification_manager.h

Issue 580243004: Remove unnecessary image downloading handler of notifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_ 5 #ifndef CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_
6 #define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_ 6 #define CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 93
94 protected: 94 protected:
95 // content::NotificationObserver override. 95 // content::NotificationObserver override.
96 virtual void Observe(int type, 96 virtual void Observe(int type,
97 const content::NotificationSource& source, 97 const content::NotificationSource& source,
98 const content::NotificationDetails& details) OVERRIDE; 98 const content::NotificationDetails& details) OVERRIDE;
99 99
100 private: 100 private:
101 FRIEND_TEST_ALL_PREFIXES(message_center::WebNotificationTrayTest, 101 FRIEND_TEST_ALL_PREFIXES(message_center::WebNotificationTrayTest,
102 ManuallyCloseMessageCenter); 102 ManuallyCloseMessageCenter);
103 class ImageDownloadsObserver {
104 public:
105 virtual void OnDownloadsCompleted() = 0;
106 };
107
108 typedef base::Callback<void(const gfx::Image&)> SetImageCallback;
109 class ImageDownloads
110 : public base::SupportsWeakPtr<ImageDownloads> {
111 public:
112 ImageDownloads(
113 message_center::MessageCenter* message_center,
114 ImageDownloadsObserver* observer);
115 virtual ~ImageDownloads();
116
117 void StartDownloads(const Notification& notification);
118 void StartDownloadWithImage(const Notification& notification,
119 const gfx::Image* image,
120 const GURL& url,
121 const SetImageCallback& callback);
122 void StartDownloadByKey(const Notification& notification,
123 const char* key,
124 int size,
125 const SetImageCallback& callback);
126
127 // FaviconHelper callback.
128 void DownloadComplete(const SetImageCallback& callback,
129 int download_id,
130 int http_status_code,
131 const GURL& image_url,
132 const std::vector<SkBitmap>& bitmaps,
133 const std::vector<gfx::Size>& original_bitmap_sizes);
134 private:
135 // Used to keep track of the number of pending downloads. Once this
136 // reaches zero, we can tell the delegate that we don't need the
137 // RenderViewHost anymore.
138 void AddPendingDownload();
139 void PendingDownloadCompleted();
140
141 // Weak reference to global message center.
142 message_center::MessageCenter* message_center_;
143
144 // Count of downloads that remain.
145 size_t pending_downloads_;
146
147 // Weak.
148 ImageDownloadsObserver* observer_;
149
150 DISALLOW_COPY_AND_ASSIGN(ImageDownloads);
151 };
152 103
153 // This class keeps a set of original Notification objects and corresponding 104 // This class keeps a set of original Notification objects and corresponding
154 // Profiles, so when MessageCenter calls back with a notification_id, this 105 // Profiles, so when MessageCenter calls back with a notification_id, this
155 // class has necessary mapping to other source info - for example, it calls 106 // class has necessary mapping to other source info - for example, it calls
156 // NotificationDelegate supplied by client when someone clicks on a 107 // NotificationDelegate supplied by client when someone clicks on a
157 // Notification in MessageCenter. Likewise, if a Profile or Extension is 108 // Notification in MessageCenter. Likewise, if a Profile or Extension is
158 // being removed, the map makes it possible to revoke the notifications from 109 // being removed, the map makes it possible to revoke the notifications from
159 // MessageCenter. To keep that set, we use the private ProfileNotification 110 // MessageCenter. To keep that set, we use the private ProfileNotification
160 // class that stores a superset of all information about a notification. 111 // class that stores a superset of all information about a notification.
161 112
162 // TODO(dimich): Consider merging all 4 types (Notification, 113 // TODO(dimich): Consider merging all 4 types (Notification,
163 // QueuedNotification, ProfileNotification and NotificationList::Notification) 114 // QueuedNotification, ProfileNotification and NotificationList::Notification)
164 // into a single class. 115 // into a single class.
165 class ProfileNotification : public ImageDownloadsObserver { 116 class ProfileNotification {
166 public: 117 public:
167 ProfileNotification(Profile* profile, 118 ProfileNotification(Profile* profile,
168 const Notification& notification, 119 const Notification& notification,
169 message_center::MessageCenter* message_center); 120 message_center::MessageCenter* message_center);
170 virtual ~ProfileNotification(); 121 virtual ~ProfileNotification();
171 122
172 void StartDownloads();
173
174 // Overridden from ImageDownloadsObserver.
175 virtual void OnDownloadsCompleted() OVERRIDE;
176
177 Profile* profile() const { return profile_; } 123 Profile* profile() const { return profile_; }
178 const Notification& notification() const { return notification_; } 124 const Notification& notification() const { return notification_; }
179 125
180 // Route a new notification to an app/extension. 126 // Route a new notification to an app/extension.
181 void AddToAlternateProvider(const std::string extension_id); 127 void AddToAlternateProvider(const std::string extension_id);
182 128
183 private: 129 private:
184 // Weak, guaranteed not to be used after profile removal by parent class. 130 // Weak, guaranteed not to be used after profile removal by parent class.
185 Profile* profile_; 131 Profile* profile_;
186 Notification notification_; 132 Notification notification_;
187 // Track the downloads for this notification so the notification can be
188 // updated properly.
189 scoped_ptr<ImageDownloads> downloads_;
190 }; 133 };
191 134
192 scoped_ptr<message_center::MessageCenterTrayDelegate> tray_; 135 scoped_ptr<message_center::MessageCenterTrayDelegate> tray_;
193 message_center::MessageCenter* message_center_; // Weak, global. 136 message_center::MessageCenter* message_center_; // Weak, global.
194 137
195 // Use a map by notification_id since this mapping is the most often used. 138 // Use a map by notification_id since this mapping is the most often used.
196 typedef std::map<std::string, ProfileNotification*> NotificationMap; 139 typedef std::map<std::string, ProfileNotification*> NotificationMap;
197 NotificationMap profile_notifications_; 140 NotificationMap profile_notifications_;
198 141
199 // Helpers that add/remove the notification from local map. 142 // Helpers that add/remove the notification from local map.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 // Keeps track of all notification statistics for UMA purposes. 187 // Keeps track of all notification statistics for UMA purposes.
245 MessageCenterStatsCollector stats_collector_; 188 MessageCenterStatsCollector stats_collector_;
246 189
247 // Keeps track of notifications specific to Google Now for UMA purposes. 190 // Keeps track of notifications specific to Google Now for UMA purposes.
248 GoogleNowNotificationStatsCollector google_now_stats_collector_; 191 GoogleNowNotificationStatsCollector google_now_stats_collector_;
249 192
250 DISALLOW_COPY_AND_ASSIGN(MessageCenterNotificationManager); 193 DISALLOW_COPY_AND_ASSIGN(MessageCenterNotificationManager);
251 }; 194 };
252 195
253 #endif // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_ 196 #endif // CHROME_BROWSER_NOTIFICATIONS_MESSAGE_CENTER_NOTIFICATION_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698