OLD | NEW |
---|---|
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 #include "chrome/browser/notifications/notification_ui_manager_impl.h" | 5 #include "chrome/browser/notifications/notification_ui_manager_impl.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
89 | 89 |
90 VLOG(1) << "Added notification. URL: " | 90 VLOG(1) << "Added notification. URL: " |
91 << notification.content_url().spec(); | 91 << notification.content_url().spec(); |
92 show_queue_.push_back( | 92 show_queue_.push_back( |
93 new QueuedNotification(notification, profile)); | 93 new QueuedNotification(notification, profile)); |
94 CheckAndShowNotifications(); | 94 CheckAndShowNotifications(); |
95 } | 95 } |
96 | 96 |
97 bool NotificationUIManagerImpl::CancelById(const std::string& id) { | 97 bool NotificationUIManagerImpl::CancelById(const std::string& id) { |
98 // See if this ID hasn't been shown yet. | 98 // See if this ID hasn't been shown yet. |
99 NotificationDeque::iterator iter; | 99 for (NotificationDeque::iterator iter = show_queue_.begin(); |
100 for (iter = show_queue_.begin(); iter != show_queue_.end(); ++iter) { | 100 iter != show_queue_.end(); ++iter) { |
101 if ((*iter)->notification().notification_id() == id) { | 101 if ((*iter)->notification().notification_id() == id) { |
102 show_queue_.erase(iter); | 102 show_queue_.erase(iter); |
103 return true; | 103 return true; |
104 } | 104 } |
105 } | 105 } |
106 // If it has been shown, remove it from the balloon collections. | 106 // If it has been shown, remove it from the balloon collections. |
107 return balloon_collection_->RemoveById(id); | 107 return balloon_collection_->RemoveById(id); |
108 } | 108 } |
109 | 109 |
110 bool NotificationUIManagerImpl::CancelAllBySourceOrigin(const GURL& source) { | 110 bool NotificationUIManagerImpl::CancelAllBySourceOrigin(const GURL& source) { |
111 // Same pattern as CancelById, but more complicated than the above | 111 // Same pattern as CancelById, but more complicated than the above |
112 // because there may be multiple notifications from the same source. | 112 // because there may be multiple notifications from the same source. |
113 bool removed = false; | 113 bool removed = false; |
114 NotificationDeque::iterator iter; | 114 for (NotificationDeque::iterator loopiter = show_queue_.begin(); |
115 for (iter = show_queue_.begin(); iter != show_queue_.end();) { | 115 loopiter != show_queue_.end(); ) { |
116 if ((*iter)->notification().origin_url() == source) { | 116 NotificationDeque::iterator curiter = loopiter++; |
117 iter = show_queue_.erase(iter); | 117 if ((*curiter)->notification().origin_url() == source) { |
118 show_queue_.erase(curiter); | |
118 removed = true; | 119 removed = true; |
119 } else { | |
120 ++iter; | |
121 } | 120 } |
122 } | 121 } |
122 return balloon_collection_->RemoveBySourceOrigin(source) || removed; | |
123 } | |
123 | 124 |
124 return balloon_collection_->RemoveBySourceOrigin(source) || removed; | 125 bool NotificationUIManagerImpl::CancelAllByProfile(Profile* profile) { |
126 // Same pattern as CancelAllBySourceOrigin. | |
127 bool removed = false; | |
128 for (NotificationDeque::iterator loopiter = show_queue_.begin(); | |
129 loopiter != show_queue_.end(); ) { | |
130 NotificationDeque::iterator curiter = loopiter++; | |
131 if ((*curiter)->profile() == profile) { | |
132 show_queue_.erase(curiter); | |
133 removed = true; | |
134 } | |
135 } | |
136 return balloon_collection_->RemoveByProfile(profile) || removed; | |
125 } | 137 } |
126 | 138 |
127 void NotificationUIManagerImpl::CancelAll() { | 139 void NotificationUIManagerImpl::CancelAll() { |
128 STLDeleteElements(&show_queue_); | 140 STLDeleteElements(&show_queue_); |
129 balloon_collection_->RemoveAll(); | 141 balloon_collection_->RemoveAll(); |
130 } | 142 } |
131 | 143 |
132 BalloonCollection* NotificationUIManagerImpl::balloon_collection() { | 144 BalloonCollection* NotificationUIManagerImpl::balloon_collection() { |
133 return balloon_collection_.get(); | 145 return balloon_collection_.get(); |
134 } | 146 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
178 bool NotificationUIManagerImpl::TryReplacement( | 190 bool NotificationUIManagerImpl::TryReplacement( |
179 const Notification& notification) { | 191 const Notification& notification) { |
180 const GURL& origin = notification.origin_url(); | 192 const GURL& origin = notification.origin_url(); |
181 const string16& replace_id = notification.replace_id(); | 193 const string16& replace_id = notification.replace_id(); |
182 | 194 |
183 if (replace_id.empty()) | 195 if (replace_id.empty()) |
184 return false; | 196 return false; |
185 | 197 |
186 // First check the queue of pending notifications for replacement. | 198 // First check the queue of pending notifications for replacement. |
187 // Then check the list of notifications already being shown. | 199 // Then check the list of notifications already being shown. |
188 NotificationDeque::iterator iter; | 200 for (NotificationDeque::const_iterator iter = show_queue_.begin(); |
189 for (iter = show_queue_.begin(); iter != show_queue_.end(); ++iter) { | 201 iter != show_queue_.end(); ++iter) { |
190 if (origin == (*iter)->notification().origin_url() && | 202 if (origin == (*iter)->notification().origin_url() && |
191 replace_id == (*iter)->notification().replace_id()) { | 203 replace_id == (*iter)->notification().replace_id()) { |
192 (*iter)->Replace(notification); | 204 (*iter)->Replace(notification); |
193 return true; | 205 return true; |
194 } | 206 } |
195 } | 207 } |
196 | 208 |
197 BalloonCollection::Balloons::iterator balloon_iter; | 209 const BalloonCollection::Balloons& balloons = |
stevenjb
2012/11/29 02:52:25
Note: now a reference
| |
198 BalloonCollection::Balloons balloons = | |
199 balloon_collection_->GetActiveBalloons(); | 210 balloon_collection_->GetActiveBalloons(); |
200 for (balloon_iter = balloons.begin(); | 211 for (BalloonCollection::Balloons::const_iterator iter = balloons.begin(); |
stevenjb
2012/11/29 02:52:25
Note: now a const_iterator. This worked before onl
| |
201 balloon_iter != balloons.end(); | 212 iter != balloons.end(); ++iter) { |
202 ++balloon_iter) { | 213 if (origin == (*iter)->notification().origin_url() && |
203 if (origin == (*balloon_iter)->notification().origin_url() && | 214 replace_id == (*iter)->notification().replace_id()) { |
204 replace_id == (*balloon_iter)->notification().replace_id()) { | 215 (*iter)->Update(notification); |
205 (*balloon_iter)->Update(notification); | |
206 return true; | 216 return true; |
207 } | 217 } |
208 } | 218 } |
209 | 219 |
210 return false; | 220 return false; |
211 } | 221 } |
212 | 222 |
213 BalloonCollection::PositionPreference | 223 BalloonCollection::PositionPreference |
214 NotificationUIManagerImpl::GetPositionPreference() const { | 224 NotificationUIManagerImpl::GetPositionPreference() const { |
215 LOG(INFO) << "Current position preference: " << position_pref_.GetValue(); | 225 LOG(INFO) << "Current position preference: " << position_pref_.GetValue(); |
216 | 226 |
217 return static_cast<BalloonCollection::PositionPreference>( | 227 return static_cast<BalloonCollection::PositionPreference>( |
218 position_pref_.GetValue()); | 228 position_pref_.GetValue()); |
219 } | 229 } |
220 | 230 |
221 void NotificationUIManagerImpl::SetPositionPreference( | 231 void NotificationUIManagerImpl::SetPositionPreference( |
222 BalloonCollection::PositionPreference preference) { | 232 BalloonCollection::PositionPreference preference) { |
223 LOG(INFO) << "Setting position preference: " << preference; | 233 LOG(INFO) << "Setting position preference: " << preference; |
224 position_pref_.SetValue(static_cast<int>(preference)); | 234 position_pref_.SetValue(static_cast<int>(preference)); |
225 balloon_collection_->SetPositionPreference(preference); | 235 balloon_collection_->SetPositionPreference(preference); |
226 } | 236 } |
227 | 237 |
228 void NotificationUIManagerImpl::GetQueuedNotificationsForTesting( | 238 void NotificationUIManagerImpl::GetQueuedNotificationsForTesting( |
229 std::vector<const Notification*>* notifications) { | 239 std::vector<const Notification*>* notifications) { |
230 NotificationDeque::const_iterator queued_iter; | 240 for (NotificationDeque::const_iterator iter = show_queue_.begin(); |
231 for (queued_iter = show_queue_.begin(); queued_iter != show_queue_.end(); | 241 iter != show_queue_.end(); ++iter) { |
232 ++queued_iter) { | 242 notifications->push_back(&(*iter)->notification()); |
233 notifications->push_back(&(*queued_iter)->notification()); | |
234 } | 243 } |
235 } | 244 } |
236 | 245 |
237 void NotificationUIManagerImpl::Observe( | 246 void NotificationUIManagerImpl::Observe( |
238 int type, | 247 int type, |
239 const content::NotificationSource& source, | 248 const content::NotificationSource& source, |
240 const content::NotificationDetails& details) { | 249 const content::NotificationDetails& details) { |
241 if (type == chrome::NOTIFICATION_APP_TERMINATING) { | 250 if (type == chrome::NOTIFICATION_APP_TERMINATING) { |
242 CancelAll(); | 251 CancelAll(); |
243 } else { | 252 } else { |
244 NOTREACHED(); | 253 NOTREACHED(); |
245 } | 254 } |
246 } | 255 } |
247 | 256 |
248 void NotificationUIManagerImpl::OnDesktopNotificationPositionChanged() { | 257 void NotificationUIManagerImpl::OnDesktopNotificationPositionChanged() { |
249 balloon_collection_->SetPositionPreference( | 258 balloon_collection_->SetPositionPreference( |
250 static_cast<BalloonCollection::PositionPreference>( | 259 static_cast<BalloonCollection::PositionPreference>( |
251 position_pref_.GetValue())); | 260 position_pref_.GetValue())); |
252 } | 261 } |
OLD | NEW |