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

Side by Side Diff: chrome/browser/notifications/notification_ui_manager_mac.mm

Issue 11414215: Add CloseAllByProfile to NotificationUIManager and call before destroyng a Profile (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mac Created 8 years 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 | Annotate | Revision Log
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 #include "chrome/browser/notifications/notification_ui_manager_mac.h" 5 #include "chrome/browser/notifications/notification_ui_manager_mac.h"
6 6
7 #include "base/mac/cocoa_protocols.h" 7 #include "base/mac/cocoa_protocols.h"
8 #include "base/mac/mac_util.h" 8 #include "base/mac/mac_util.h"
9 #include "base/sys_string_conversions.h" 9 #include "base/sys_string_conversions.h"
10 #include "chrome/browser/notifications/notification.h" 10 #include "chrome/browser/notifications/notification.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 instance = impl = new NotificationUIManagerImpl(local_state); 92 instance = impl = new NotificationUIManagerImpl(local_state);
93 } 93 }
94 94
95 impl->Initialize(balloons); 95 impl->Initialize(balloons);
96 balloons->set_space_change_listener(impl); 96 balloons->set_space_change_listener(impl);
97 97
98 return instance; 98 return instance;
99 } 99 }
100 100
101 NotificationUIManagerMac::ControllerNotification::ControllerNotification( 101 NotificationUIManagerMac::ControllerNotification::ControllerNotification(
102 id<CrUserNotification> a_view, Notification* a_model) 102 Profile* a_profile,
103 : view(a_view), 103 id<CrUserNotification> a_view,
104 Notification* a_model)
105 : profile(a_profile),
106 view(a_view),
104 model(a_model) { 107 model(a_model) {
105 } 108 }
106 109
107 NotificationUIManagerMac::ControllerNotification::~ControllerNotification() { 110 NotificationUIManagerMac::ControllerNotification::~ControllerNotification() {
108 [view release]; 111 [view release];
109 delete model; 112 delete model;
110 } 113 }
111 114
112 //////////////////////////////////////////////////////////////////////////////// 115 ////////////////////////////////////////////////////////////////////////////////
113 116
(...skipping 29 matching lines...) Expand all
143 ns_notification.subtitle = 146 ns_notification.subtitle =
144 base::SysUTF16ToNSString(notification.display_source()); 147 base::SysUTF16ToNSString(notification.display_source());
145 ns_notification.informativeText = 148 ns_notification.informativeText =
146 base::SysUTF16ToNSString(notification.body()); 149 base::SysUTF16ToNSString(notification.body());
147 ns_notification.userInfo = 150 ns_notification.userInfo =
148 [NSDictionary dictionaryWithObject:base::SysUTF8ToNSString( 151 [NSDictionary dictionaryWithObject:base::SysUTF8ToNSString(
149 notification.notification_id()) 152 notification.notification_id())
150 forKey:kNotificationIDKey]; 153 forKey:kNotificationIDKey];
151 ns_notification.hasActionButton = NO; 154 ns_notification.hasActionButton = NO;
152 155
153 notification_map_.insert( 156 notification_map_.insert(std::make_pair(
154 std::make_pair(notification.notification_id(), 157 notification.notification_id(),
155 new ControllerNotification(ns_notification, 158 new ControllerNotification(profile,
156 new Notification(notification)))); 159 ns_notification,
160 new Notification(notification))));
157 161
158 [GetNotificationCenter() deliverNotification:ns_notification]; 162 [GetNotificationCenter() deliverNotification:ns_notification];
159 } 163 }
160 } 164 }
161 165
162 bool NotificationUIManagerMac::CancelById(const std::string& notification_id) { 166 bool NotificationUIManagerMac::CancelById(const std::string& notification_id) {
163 NotificationMap::iterator it = notification_map_.find(notification_id); 167 NotificationMap::iterator it = notification_map_.find(notification_id);
164 if (it == notification_map_.end()) 168 if (it == notification_map_.end())
165 return builtin_manager_->CancelById(notification_id); 169 return builtin_manager_->CancelById(notification_id);
166 170
(...skipping 11 matching lines...) Expand all
178 // references to the removed element. 182 // references to the removed element.
179 success |= RemoveNotification((it++)->second->view); 183 success |= RemoveNotification((it++)->second->view);
180 } else { 184 } else {
181 ++it; 185 ++it;
182 } 186 }
183 } 187 }
184 188
185 return success; 189 return success;
186 } 190 }
187 191
192 bool NotificationUIManagerMac::CancelAllByProfile(Profile* profile) {
193 bool success = builtin_manager_->CancelAllByProfile(profile);
194
195 for (NotificationMap::iterator it = notification_map_.begin();
196 it != notification_map_.end();) {
197 if (it->second->profile == profile) {
198 // RemoveNotification will erase from the map, invalidating iterator
199 // references to the removed element.
200 success |= RemoveNotification((it++)->second->view);
201 } else {
202 ++it;
203 }
204 }
205
206 return success;
207 }
208
188 void NotificationUIManagerMac::CancelAll() { 209 void NotificationUIManagerMac::CancelAll() {
189 id<CrUserNotificationCenter> center = GetNotificationCenter(); 210 id<CrUserNotificationCenter> center = GetNotificationCenter();
190 211
191 // Calling RemoveNotification would loop many times over, so just replicate 212 // Calling RemoveNotification would loop many times over, so just replicate
192 // a small bit of its logic here. 213 // a small bit of its logic here.
193 for (NotificationMap::iterator it = notification_map_.begin(); 214 for (NotificationMap::iterator it = notification_map_.begin();
194 it != notification_map_.end(); 215 it != notification_map_.end();
195 ++it) { 216 ++it) {
196 it->second->model->Close(false); 217 it->second->model->Close(false);
197 delete it->second; 218 delete it->second;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 notification->Click(); 321 notification->Click();
301 } 322 }
302 323
303 - (BOOL)userNotificationCenter:(NSUserNotificationCenter*)center 324 - (BOOL)userNotificationCenter:(NSUserNotificationCenter*)center
304 shouldPresentNotification:(id<CrUserNotification>)nsNotification { 325 shouldPresentNotification:(id<CrUserNotification>)nsNotification {
305 // Always display notifications, regardless of whether the app is foreground. 326 // Always display notifications, regardless of whether the app is foreground.
306 return YES; 327 return YES;
307 } 328 }
308 329
309 @end 330 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698