// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_NOTIFICATIONS_H_
#define CHROME_BROWSER_APPS_APP_SERVICE_APP_NOTIFICATIONS_H_
#include <map>
#include <set>
#include <string>
#include <utility>
#include "components/services/app_service/public/cpp/app.h"
#include "components/services/app_service/public/cpp/app_types.h"
namespace apps {
// AppNotifications records the notification id for each app.
class AppNotifications {
public:
AppNotifications();
~AppNotifications();
AppNotifications(const AppNotifications&) = delete;
AppNotifications& operator=(const AppNotifications&) = delete;
// Records that |app_id| has a new notification identified by
// |notification_id|.
void AddNotification(const std::string& app_id,
const std::string& notification_id);
// Removes the notification for the given |notification_id|.
void RemoveNotification(const std::string& notification_id);
// Removes notifications for the given |app_id|.
void RemoveNotificationsForApp(const std::string& app_id);
// Returns true, if the app has notifications. Otherwise, returns false.
bool HasNotification(const std::string& app_id);
// Returns the set of app ids for the given |notification_id|, if
// |notification_id| exists in |notification_id_to_app_id_|. Otherwise, return
// an empty set.
std::set<std::string> GetAppIdsForNotification(
const std::string& notification_id);
AppPtr CreateAppWithHasBadgeStatus(AppType app_type,
const std::string& app_id);
private:
// Maps one app id to a set of all matching notification ids.
std::map<std::string, std::set<std::string>> app_id_to_notification_ids_;
// Maps one notification id to a set of app ids. When the notification has
// been delivered, the MessageCenter has already deleted the notification, so
// we can't fetch the corresponding app id when the notification is removed.
// So we need a record of this notification, and erase it from both
// |app_id_to_notification_id_| and |notification_id_to_app_id_|.
std::map<std::string, std::set<std::string>> notification_id_to_app_ids_;
};
} // namespace apps
#endif // CHROME_BROWSER_APPS_APP_SERVICE_APP_NOTIFICATIONS_H_