electron/shell/browser/notifications/notification_presenter.cc
trop[bot] a842911215
perf: avoid a double-map lookup in NotificationPresenter::RemoveNotification() (#46356)
perf: avoid a double-map lokup in NotificationPresenter::RemoveNotification()

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
2025-03-29 08:12:04 -05:00

47 lines
1.4 KiB
C++

// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "shell/browser/notifications/notification_presenter.h"
#include <algorithm>
#include "shell/browser/notifications/notification.h"
namespace electron {
NotificationPresenter::NotificationPresenter() = default;
NotificationPresenter::~NotificationPresenter() {
for (Notification* notification : notifications_)
delete notification;
}
base::WeakPtr<Notification> NotificationPresenter::CreateNotification(
NotificationDelegate* delegate,
const std::string& notification_id) {
Notification* notification = CreateNotificationObject(delegate);
notification->set_notification_id(notification_id);
notifications_.insert(notification);
return notification->GetWeakPtr();
}
void NotificationPresenter::RemoveNotification(Notification* notification) {
if (const auto nh = notifications_.extract(notification))
delete nh.value();
}
void NotificationPresenter::CloseNotificationWithId(
const std::string& notification_id) {
auto it = std::ranges::find_if(
notifications_, [&notification_id](const Notification* n) {
return n->notification_id() == notification_id;
});
if (it != notifications_.end()) {
Notification* notification = (*it);
notification->Dismiss();
notifications_.erase(notification);
}
}
} // namespace electron