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

Side by Side Diff: ui/message_center/message_center_impl.cc

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 years, 8 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) 2013 The Chromium Authors. All rights reserved. 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 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 "ui/message_center/message_center_impl.h" 5 #include "ui/message_center/message_center_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 28 matching lines...) Expand all
39 // Change represents an operation made on a notification. Since it contains 39 // Change represents an operation made on a notification. Since it contains
40 // the final state of the notification, we only keep the last change for a 40 // the final state of the notification, we only keep the last change for a
41 // particular notification that is in the notification list around. There are 41 // particular notification that is in the notification list around. There are
42 // two ids; |id_| is the newest notification id that has been assigned by an 42 // two ids; |id_| is the newest notification id that has been assigned by an
43 // update, and |notification_list_id_| is the id of the notification it should 43 // update, and |notification_list_id_| is the id of the notification it should
44 // be updating as it exists in the notification list. 44 // be updating as it exists in the notification list.
45 class Change { 45 class Change {
46 public: 46 public:
47 Change(ChangeType type, 47 Change(ChangeType type,
48 const std::string& id, 48 const std::string& id,
49 scoped_ptr<Notification> notification); 49 std::unique_ptr<Notification> notification);
50 ~Change(); 50 ~Change();
51 51
52 // Used to transfer ownership of the contained notification. 52 // Used to transfer ownership of the contained notification.
53 scoped_ptr<Notification> PassNotification(); 53 std::unique_ptr<Notification> PassNotification();
54 54
55 Notification* notification() const { return notification_.get(); } 55 Notification* notification() const { return notification_.get(); }
56 // Returns the post-update ID. It means: 56 // Returns the post-update ID. It means:
57 // - ADD event: ID of the notification to be added. 57 // - ADD event: ID of the notification to be added.
58 // - UPDATE event: ID of the notification after the change. If the change 58 // - UPDATE event: ID of the notification after the change. If the change
59 // doesn't update its ID, this value is same as |notification_list_id|. 59 // doesn't update its ID, this value is same as |notification_list_id|.
60 // - DELETE event: ID of the notification to be deleted. 60 // - DELETE event: ID of the notification to be deleted.
61 const std::string& id() const { return id_; } 61 const std::string& id() const { return id_; }
62 ChangeType type() const { return type_; } 62 ChangeType type() const { return type_; }
63 bool by_user() const { return by_user_; } 63 bool by_user() const { return by_user_; }
64 void set_by_user(bool by_user) { by_user_ = by_user; } 64 void set_by_user(bool by_user) { by_user_ = by_user; }
65 // Returns the ID which is used in the notification list. In other word, it 65 // Returns the ID which is used in the notification list. In other word, it
66 // means the ID before the change. 66 // means the ID before the change.
67 const std::string& notification_list_id() const { 67 const std::string& notification_list_id() const {
68 return notification_list_id_; 68 return notification_list_id_;
69 } 69 }
70 void set_type(const ChangeType new_type) { 70 void set_type(const ChangeType new_type) {
71 type_ = new_type; 71 type_ = new_type;
72 } 72 }
73 void ReplaceNotification(scoped_ptr<Notification> new_notification); 73 void ReplaceNotification(std::unique_ptr<Notification> new_notification);
74 74
75 private: 75 private:
76 ChangeType type_; 76 ChangeType type_;
77 std::string id_; 77 std::string id_;
78 std::string notification_list_id_; 78 std::string notification_list_id_;
79 bool by_user_; 79 bool by_user_;
80 scoped_ptr<Notification> notification_; 80 std::unique_ptr<Notification> notification_;
81 81
82 DISALLOW_COPY_AND_ASSIGN(Change); 82 DISALLOW_COPY_AND_ASSIGN(Change);
83 }; 83 };
84 84
85 ChangeQueue(); 85 ChangeQueue();
86 ~ChangeQueue(); 86 ~ChangeQueue();
87 87
88 // Called when the message center has appropriate visibility. Modifies 88 // Called when the message center has appropriate visibility. Modifies
89 // |message_center| but does not retain it. This also causes the queue to 89 // |message_center| but does not retain it. This also causes the queue to
90 // empty itself. 90 // empty itself.
91 void ApplyChanges(MessageCenterImpl* message_center); 91 void ApplyChanges(MessageCenterImpl* message_center);
92 92
93 // Applies only the changes of the given ID. 93 // Applies only the changes of the given ID.
94 void ApplyChangesForId(MessageCenterImpl* message_center, 94 void ApplyChangesForId(MessageCenterImpl* message_center,
95 const std::string& id); 95 const std::string& id);
96 96
97 // Causes a TYPE_ADD change to be added to the queue. 97 // Causes a TYPE_ADD change to be added to the queue.
98 void AddNotification(scoped_ptr<Notification> notification); 98 void AddNotification(std::unique_ptr<Notification> notification);
99 99
100 // Causes a TYPE_UPDATE change to be added to the queue. 100 // Causes a TYPE_UPDATE change to be added to the queue.
101 void UpdateNotification(const std::string& old_id, 101 void UpdateNotification(const std::string& old_id,
102 scoped_ptr<Notification> notification); 102 std::unique_ptr<Notification> notification);
103 103
104 // Causes a TYPE_DELETE change to be added to the queue. 104 // Causes a TYPE_DELETE change to be added to the queue.
105 void EraseNotification(const std::string& id, bool by_user); 105 void EraseNotification(const std::string& id, bool by_user);
106 106
107 // Returns whether the queue matches an id. The id given will be matched 107 // Returns whether the queue matches an id. The id given will be matched
108 // against the ID of all changes post-update, not the id of the notification 108 // against the ID of all changes post-update, not the id of the notification
109 // as it stands in the notification list. 109 // as it stands in the notification list.
110 bool Has(const std::string& id) const; 110 bool Has(const std::string& id) const;
111 111
112 // Returns a Change that can be modified by the caller. ChangeQueue retains 112 // Returns a Change that can be modified by the caller. ChangeQueue retains
113 // ownership of the Change; pointers should not be retained. 113 // ownership of the Change; pointers should not be retained.
114 Notification* GetLatestNotification(const std::string& id) const; 114 Notification* GetLatestNotification(const std::string& id) const;
115 115
116 private: 116 private:
117 void ApplyChangeInternal(MessageCenterImpl* message_center, 117 void ApplyChangeInternal(MessageCenterImpl* message_center,
118 scoped_ptr<Change> change); 118 std::unique_ptr<Change> change);
119 119
120 ScopedVector<Change> changes_; 120 ScopedVector<Change> changes_;
121 121
122 DISALLOW_COPY_AND_ASSIGN(ChangeQueue); 122 DISALLOW_COPY_AND_ASSIGN(ChangeQueue);
123 }; 123 };
124 124
125 //////////////////////////////////////////////////////////////////////////////// 125 ////////////////////////////////////////////////////////////////////////////////
126 // ChangeFinder 126 // ChangeFinder
127 127
128 struct ChangeFinder { 128 struct ChangeFinder {
129 explicit ChangeFinder(const std::string& id) : id(id) {} 129 explicit ChangeFinder(const std::string& id) : id(id) {}
130 bool operator()(ChangeQueue::Change* change) { return change->id() == id; } 130 bool operator()(ChangeQueue::Change* change) { return change->id() == id; }
131 131
132 std::string id; 132 std::string id;
133 }; 133 };
134 134
135 //////////////////////////////////////////////////////////////////////////////// 135 ////////////////////////////////////////////////////////////////////////////////
136 // ChangeQueue::Change 136 // ChangeQueue::Change
137 137
138 ChangeQueue::Change::Change(ChangeType type, 138 ChangeQueue::Change::Change(ChangeType type,
139 const std::string& id, 139 const std::string& id,
140 scoped_ptr<Notification> notification) 140 std::unique_ptr<Notification> notification)
141 : type_(type), 141 : type_(type),
142 notification_list_id_(id), 142 notification_list_id_(id),
143 by_user_(false), 143 by_user_(false),
144 notification_(std::move(notification)) { 144 notification_(std::move(notification)) {
145 DCHECK(!id.empty()); 145 DCHECK(!id.empty());
146 DCHECK(type != CHANGE_TYPE_DELETE || notification_.get() == NULL); 146 DCHECK(type != CHANGE_TYPE_DELETE || notification_.get() == NULL);
147 147
148 id_ = notification_ ? notification_->id() : notification_list_id_; 148 id_ = notification_ ? notification_->id() : notification_list_id_;
149 } 149 }
150 150
151 ChangeQueue::Change::~Change() {} 151 ChangeQueue::Change::~Change() {}
152 152
153 scoped_ptr<Notification> ChangeQueue::Change::PassNotification() { 153 std::unique_ptr<Notification> ChangeQueue::Change::PassNotification() {
154 return std::move(notification_); 154 return std::move(notification_);
155 } 155 }
156 156
157 void ChangeQueue::Change::ReplaceNotification( 157 void ChangeQueue::Change::ReplaceNotification(
158 scoped_ptr<Notification> new_notification) { 158 std::unique_ptr<Notification> new_notification) {
159 id_ = new_notification ? new_notification->id() : notification_list_id_; 159 id_ = new_notification ? new_notification->id() : notification_list_id_;
160 notification_.swap(new_notification); 160 notification_.swap(new_notification);
161 } 161 }
162 162
163 //////////////////////////////////////////////////////////////////////////////// 163 ////////////////////////////////////////////////////////////////////////////////
164 // ChangeQueue 164 // ChangeQueue
165 165
166 ChangeQueue::ChangeQueue() {} 166 ChangeQueue::ChangeQueue() {}
167 167
168 ChangeQueue::~ChangeQueue() {} 168 ChangeQueue::~ChangeQueue() {}
169 169
170 void ChangeQueue::ApplyChanges(MessageCenterImpl* message_center) { 170 void ChangeQueue::ApplyChanges(MessageCenterImpl* message_center) {
171 // This method is re-entrant. 171 // This method is re-entrant.
172 while (!changes_.empty()) { 172 while (!changes_.empty()) {
173 ScopedVector<Change>::iterator iter = changes_.begin(); 173 ScopedVector<Change>::iterator iter = changes_.begin();
174 scoped_ptr<Change> change(*iter); 174 std::unique_ptr<Change> change(*iter);
175 // TODO(dewittj): Replace changes_ with a deque. 175 // TODO(dewittj): Replace changes_ with a deque.
176 changes_.weak_erase(iter); 176 changes_.weak_erase(iter);
177 ApplyChangeInternal(message_center, std::move(change)); 177 ApplyChangeInternal(message_center, std::move(change));
178 } 178 }
179 } 179 }
180 180
181 void ChangeQueue::ApplyChangesForId(MessageCenterImpl* message_center, 181 void ChangeQueue::ApplyChangesForId(MessageCenterImpl* message_center,
182 const std::string& id) { 182 const std::string& id) {
183 std::deque<Change*> changes_for_id; 183 std::deque<Change*> changes_for_id;
184 std::string interesting_id = id; 184 std::string interesting_id = id;
185 185
186 // Traverses the queue in reverse so shat we can track changes which change 186 // Traverses the queue in reverse so shat we can track changes which change
187 // the notification's ID. 187 // the notification's ID.
188 ScopedVector<Change>::iterator iter = changes_.end(); 188 ScopedVector<Change>::iterator iter = changes_.end();
189 while (iter != changes_.begin()) { 189 while (iter != changes_.begin()) {
190 --iter; 190 --iter;
191 if (interesting_id != (*iter)->id()) 191 if (interesting_id != (*iter)->id())
192 continue; 192 continue;
193 scoped_ptr<Change> change(*iter); 193 std::unique_ptr<Change> change(*iter);
194 194
195 interesting_id = change->notification_list_id(); 195 interesting_id = change->notification_list_id();
196 196
197 iter = changes_.weak_erase(iter); 197 iter = changes_.weak_erase(iter);
198 changes_for_id.push_back(change.release()); 198 changes_for_id.push_back(change.release());
199 } 199 }
200 200
201 while (!changes_for_id.empty()) { 201 while (!changes_for_id.empty()) {
202 ApplyChangeInternal( 202 ApplyChangeInternal(message_center,
203 message_center, scoped_ptr<Change>(changes_for_id.back())); 203 std::unique_ptr<Change>(changes_for_id.back()));
204 changes_for_id.pop_back(); 204 changes_for_id.pop_back();
205 } 205 }
206 } 206 }
207 207
208 void ChangeQueue::AddNotification(scoped_ptr<Notification> notification) { 208 void ChangeQueue::AddNotification(std::unique_ptr<Notification> notification) {
209 std::string id = notification->id(); 209 std::string id = notification->id();
210 changes_.push_back(new Change(CHANGE_TYPE_ADD, id, std::move(notification))); 210 changes_.push_back(new Change(CHANGE_TYPE_ADD, id, std::move(notification)));
211 } 211 }
212 212
213 void ChangeQueue::UpdateNotification(const std::string& old_id, 213 void ChangeQueue::UpdateNotification(
214 scoped_ptr<Notification> notification) { 214 const std::string& old_id,
215 std::unique_ptr<Notification> notification) {
215 ScopedVector<Change>::reverse_iterator iter = 216 ScopedVector<Change>::reverse_iterator iter =
216 std::find_if(changes_.rbegin(), changes_.rend(), ChangeFinder(old_id)); 217 std::find_if(changes_.rbegin(), changes_.rend(), ChangeFinder(old_id));
217 if (iter == changes_.rend()) { 218 if (iter == changes_.rend()) {
218 changes_.push_back( 219 changes_.push_back(
219 new Change(CHANGE_TYPE_UPDATE, old_id, std::move(notification))); 220 new Change(CHANGE_TYPE_UPDATE, old_id, std::move(notification)));
220 return; 221 return;
221 } 222 }
222 223
223 Change* change = *iter; 224 Change* change = *iter;
224 switch (change->type()) { 225 switch (change->type()) {
(...skipping 30 matching lines...) Expand all
255 break; 256 break;
256 default: 257 default:
257 NOTREACHED(); 258 NOTREACHED();
258 } 259 }
259 } 260 }
260 261
261 void ChangeQueue::EraseNotification(const std::string& id, bool by_user) { 262 void ChangeQueue::EraseNotification(const std::string& id, bool by_user) {
262 ScopedVector<Change>::reverse_iterator iter = 263 ScopedVector<Change>::reverse_iterator iter =
263 std::find_if(changes_.rbegin(), changes_.rend(), ChangeFinder(id)); 264 std::find_if(changes_.rbegin(), changes_.rend(), ChangeFinder(id));
264 if (iter == changes_.rend()) { 265 if (iter == changes_.rend()) {
265 scoped_ptr<Change> change(new Change(CHANGE_TYPE_DELETE, id, nullptr)); 266 std::unique_ptr<Change> change(new Change(CHANGE_TYPE_DELETE, id, nullptr));
266 change->set_by_user(by_user); 267 change->set_by_user(by_user);
267 changes_.push_back(std::move(change)); 268 changes_.push_back(std::move(change));
268 return; 269 return;
269 } 270 }
270 271
271 Change* change = *iter; 272 Change* change = *iter;
272 switch (change->type()) { 273 switch (change->type()) {
273 case CHANGE_TYPE_ADD: 274 case CHANGE_TYPE_ADD:
274 // ADD -> DELETE. Just removes both. 275 // ADD -> DELETE. Just removes both.
275 changes_.erase(--(iter.base())); 276 changes_.erase(--(iter.base()));
(...skipping 23 matching lines...) Expand all
299 Notification* ChangeQueue::GetLatestNotification(const std::string& id) const { 300 Notification* ChangeQueue::GetLatestNotification(const std::string& id) const {
300 ScopedVector<Change>::const_iterator iter = 301 ScopedVector<Change>::const_iterator iter =
301 std::find_if(changes_.begin(), changes_.end(), ChangeFinder(id)); 302 std::find_if(changes_.begin(), changes_.end(), ChangeFinder(id));
302 if (iter == changes_.end()) 303 if (iter == changes_.end())
303 return NULL; 304 return NULL;
304 305
305 return (*iter)->notification(); 306 return (*iter)->notification();
306 } 307 }
307 308
308 void ChangeQueue::ApplyChangeInternal(MessageCenterImpl* message_center, 309 void ChangeQueue::ApplyChangeInternal(MessageCenterImpl* message_center,
309 scoped_ptr<Change> change) { 310 std::unique_ptr<Change> change) {
310 switch (change->type()) { 311 switch (change->type()) {
311 case CHANGE_TYPE_ADD: 312 case CHANGE_TYPE_ADD:
312 message_center->AddNotificationImmediately(change->PassNotification()); 313 message_center->AddNotificationImmediately(change->PassNotification());
313 break; 314 break;
314 case CHANGE_TYPE_UPDATE: 315 case CHANGE_TYPE_UPDATE:
315 message_center->UpdateNotificationImmediately( 316 message_center->UpdateNotificationImmediately(
316 change->notification_list_id(), change->PassNotification()); 317 change->notification_list_id(), change->PassNotification());
317 break; 318 break;
318 case CHANGE_TYPE_DELETE: 319 case CHANGE_TYPE_DELETE:
319 message_center->RemoveNotificationImmediately( 320 message_center->RemoveNotificationImmediately(
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 return notification_list_->GetPopupNotifications(blockers_, NULL); 502 return notification_list_->GetPopupNotifications(blockers_, NULL);
502 } 503 }
503 504
504 void MessageCenterImpl::ForceNotificationFlush(const std::string& id) { 505 void MessageCenterImpl::ForceNotificationFlush(const std::string& id) {
505 if (notification_queue_) 506 if (notification_queue_)
506 notification_queue_->ApplyChangesForId(this, id); 507 notification_queue_->ApplyChangesForId(this, id);
507 } 508 }
508 509
509 //------------------------------------------------------------------------------ 510 //------------------------------------------------------------------------------
510 // Client code interface. 511 // Client code interface.
511 void MessageCenterImpl::AddNotification(scoped_ptr<Notification> notification) { 512 void MessageCenterImpl::AddNotification(
513 std::unique_ptr<Notification> notification) {
512 DCHECK(notification); 514 DCHECK(notification);
513 const std::string id = notification->id(); 515 const std::string id = notification->id();
514 for (size_t i = 0; i < blockers_.size(); ++i) 516 for (size_t i = 0; i < blockers_.size(); ++i)
515 blockers_[i]->CheckState(); 517 blockers_[i]->CheckState();
516 518
517 if (notification_queue_ && 519 if (notification_queue_ &&
518 notification_list_->is_message_center_visible()) { 520 notification_list_->is_message_center_visible()) {
519 notification_queue_->AddNotification(std::move(notification)); 521 notification_queue_->AddNotification(std::move(notification));
520 return; 522 return;
521 } 523 }
522 524
523 AddNotificationImmediately(std::move(notification)); 525 AddNotificationImmediately(std::move(notification));
524 } 526 }
525 527
526 void MessageCenterImpl::AddNotificationImmediately( 528 void MessageCenterImpl::AddNotificationImmediately(
527 scoped_ptr<Notification> notification) { 529 std::unique_ptr<Notification> notification) {
528 const std::string id = notification->id(); 530 const std::string id = notification->id();
529 531
530 // Sometimes the notification can be added with the same id and the 532 // Sometimes the notification can be added with the same id and the
531 // |notification_list| will replace the notification instead of adding new. 533 // |notification_list| will replace the notification instead of adding new.
532 // This is essentially an update rather than addition. 534 // This is essentially an update rather than addition.
533 bool already_exists = (notification_list_->GetNotificationById(id) != NULL); 535 bool already_exists = (notification_list_->GetNotificationById(id) != NULL);
534 notification_list_->AddNotification(std::move(notification)); 536 notification_list_->AddNotification(std::move(notification));
535 notification_cache_.Rebuild( 537 notification_cache_.Rebuild(
536 notification_list_->GetVisibleNotifications(blockers_)); 538 notification_list_->GetVisibleNotifications(blockers_));
537 539
538 if (already_exists) { 540 if (already_exists) {
539 FOR_EACH_OBSERVER( 541 FOR_EACH_OBSERVER(
540 MessageCenterObserver, observer_list_, OnNotificationUpdated(id)); 542 MessageCenterObserver, observer_list_, OnNotificationUpdated(id));
541 } else { 543 } else {
542 FOR_EACH_OBSERVER( 544 FOR_EACH_OBSERVER(
543 MessageCenterObserver, observer_list_, OnNotificationAdded(id)); 545 MessageCenterObserver, observer_list_, OnNotificationAdded(id));
544 } 546 }
545 } 547 }
546 548
547 void MessageCenterImpl::UpdateNotification( 549 void MessageCenterImpl::UpdateNotification(
548 const std::string& old_id, 550 const std::string& old_id,
549 scoped_ptr<Notification> new_notification) { 551 std::unique_ptr<Notification> new_notification) {
550 for (size_t i = 0; i < blockers_.size(); ++i) 552 for (size_t i = 0; i < blockers_.size(); ++i)
551 blockers_[i]->CheckState(); 553 blockers_[i]->CheckState();
552 554
553 if (notification_queue_ && 555 if (notification_queue_ &&
554 notification_list_->is_message_center_visible()) { 556 notification_list_->is_message_center_visible()) {
555 // We will allow notifications that are progress types (and stay progress 557 // We will allow notifications that are progress types (and stay progress
556 // types) to be updated even if the message center is open. There are 3 558 // types) to be updated even if the message center is open. There are 3
557 // requirements here: 559 // requirements here:
558 // * Notification of type PROGRESS exists with same ID in the center 560 // * Notification of type PROGRESS exists with same ID in the center
559 // * There are no queued updates for this notification (they imply a change 561 // * There are no queued updates for this notification (they imply a change
(...skipping 13 matching lines...) Expand all
573 std::move(new_notification)); 575 std::move(new_notification));
574 return; 576 return;
575 } 577 }
576 } 578 }
577 579
578 UpdateNotificationImmediately(old_id, std::move(new_notification)); 580 UpdateNotificationImmediately(old_id, std::move(new_notification));
579 } 581 }
580 582
581 void MessageCenterImpl::UpdateNotificationImmediately( 583 void MessageCenterImpl::UpdateNotificationImmediately(
582 const std::string& old_id, 584 const std::string& old_id,
583 scoped_ptr<Notification> new_notification) { 585 std::unique_ptr<Notification> new_notification) {
584 std::string new_id = new_notification->id(); 586 std::string new_id = new_notification->id();
585 notification_list_->UpdateNotificationMessage(old_id, 587 notification_list_->UpdateNotificationMessage(old_id,
586 std::move(new_notification)); 588 std::move(new_notification));
587 notification_cache_.Rebuild( 589 notification_cache_.Rebuild(
588 notification_list_->GetVisibleNotifications(blockers_)); 590 notification_list_->GetVisibleNotifications(blockers_));
589 if (old_id == new_id) { 591 if (old_id == new_id) {
590 FOR_EACH_OBSERVER( 592 FOR_EACH_OBSERVER(
591 MessageCenterObserver, observer_list_, OnNotificationUpdated(new_id)); 593 MessageCenterObserver, observer_list_, OnNotificationUpdated(new_id));
592 } else { 594 } else {
593 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_, 595 FOR_EACH_OBSERVER(MessageCenterObserver, observer_list_,
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 } 889 }
888 890
889 void MessageCenterImpl::EnableChangeQueueForTest(bool enable) { 891 void MessageCenterImpl::EnableChangeQueueForTest(bool enable) {
890 if (enable) 892 if (enable)
891 notification_queue_.reset(new internal::ChangeQueue()); 893 notification_queue_.reset(new internal::ChangeQueue());
892 else 894 else
893 notification_queue_.reset(); 895 notification_queue_.reset();
894 } 896 }
895 897
896 } // namespace message_center 898 } // namespace message_center
OLDNEW
« no previous file with comments | « ui/message_center/message_center_impl.h ('k') | ui/message_center/message_center_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698