#include "content/browser/notifications/notification_database.h"
#include <string>
#include <utility>
#include "base/files/file_util.h"
#include "base/functional/bind.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "content/browser/notifications/notification_database_conversions.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/notification_database_data.h"
#include "storage/common/database/database_identifier.h"
#include "third_party/blink/public/common/notifications/notification_resources.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h"
#include "third_party/leveldatabase/env_chromium.h"
#include "third_party/leveldatabase/leveldb_chrome.h"
#include "third_party/leveldatabase/src/include/leveldb/db.h"
#include "third_party/leveldatabase/src/include/leveldb/filter_policy.h"
#include "third_party/leveldatabase/src/include/leveldb/write_batch.h"
#include "url/gurl.h"
namespace content {
namespace {
const char kDataKeyPrefix[] = …;
const char kResourcesKeyPrefix[] = …;
const char kNotificationKeySeparator = …;
NotificationDatabase::Status LevelDBStatusToNotificationDatabaseStatus(
const leveldb::Status& status) { … }
std::string CreateDataPrefix(const GURL& origin) { … }
std::string CreateDataKey(const GURL& origin,
const std::string& notification_id) { … }
std::string CreateResourcesPrefix(const GURL& origin) { … }
std::string CreateResourcesKey(const GURL& origin,
const std::string& notification_id) { … }
NotificationDatabase::Status DeserializedNotificationData(
const std::string& serialized_data,
NotificationDatabaseData* notification_database_data) { … }
NotificationDatabase::Status DeserializedNotificationResources(
const std::string& serialized_resources,
blink::NotificationResources* notification_resources) { … }
void UpdateNotificationTimestamps(NotificationDatabaseData* data) { … }
}
NotificationDatabase::NotificationDatabase(const base::FilePath& path,
UkmCallback callback)
: … { … }
NotificationDatabase::~NotificationDatabase() { … }
NotificationDatabase::Status NotificationDatabase::Open(
bool create_if_missing) { … }
NotificationDatabase::Status NotificationDatabase::ReadNotificationData(
const std::string& notification_id,
const GURL& origin,
NotificationDatabaseData* notification_database_data) const { … }
NotificationDatabase::Status NotificationDatabase::ReadNotificationResources(
const std::string& notification_id,
const GURL& origin,
blink::NotificationResources* notification_resources) const { … }
NotificationDatabase::Status
NotificationDatabase::ReadNotificationDataAndRecordInteraction(
const std::string& notification_id,
const GURL& origin,
PlatformNotificationContext::Interaction interaction,
NotificationDatabaseData* notification_database_data) { … }
NotificationDatabase::Status NotificationDatabase::ForEachNotificationData(
ReadAllNotificationsCallback callback) const { … }
NotificationDatabase::Status
NotificationDatabase::ForEachNotificationDataForServiceWorkerRegistration(
const GURL& origin,
int64_t service_worker_registration_id,
ReadAllNotificationsCallback callback) const { … }
NotificationDatabase::Status
NotificationDatabase::ReadAllNotificationDataForOrigin(
const GURL& origin,
std::vector<NotificationDatabaseData>* notification_data_vector) const { … }
NotificationDatabase::Status
NotificationDatabase::ReadAllNotificationDataForServiceWorkerRegistration(
const GURL& origin,
int64_t service_worker_registration_id,
std::optional<bool> is_shown_by_browser,
std::vector<NotificationDatabaseData>* notification_data_vector) const { … }
NotificationDatabase::Status NotificationDatabase::WriteNotificationData(
const GURL& origin,
const NotificationDatabaseData& notification_data) { … }
NotificationDatabase::Status NotificationDatabase::DeleteNotificationData(
const std::string& notification_id,
const GURL& origin) { … }
NotificationDatabase::Status NotificationDatabase::DeleteNotificationResources(
const std::string& notification_id,
const GURL& origin) { … }
NotificationDatabase::Status
NotificationDatabase::DeleteAllNotificationDataForOrigin(
const GURL& origin,
const std::string& tag,
std::optional<bool> is_shown_by_browser,
std::set<std::string>* deleted_notification_ids) { … }
NotificationDatabase::Status
NotificationDatabase::DeleteAllNotificationDataForServiceWorkerRegistration(
const GURL& origin,
int64_t service_worker_registration_id,
std::set<std::string>* deleted_notification_ids) { … }
NotificationDatabase::Status NotificationDatabase::Destroy() { … }
NotificationDatabase::Status
NotificationDatabase::ReadAllNotificationDataInternal(
const GURL& origin,
int64_t service_worker_registration_id,
std::optional<bool> is_shown_by_browser,
std::vector<NotificationDatabaseData>* notification_data_vector) const { … }
NotificationDatabase::Status
NotificationDatabase::ForEachNotificationDataInternal(
const GURL& origin,
int64_t service_worker_registration_id,
std::optional<bool> is_shown_by_browser,
ReadAllNotificationsCallback callback) const { … }
NotificationDatabase::Status
NotificationDatabase::DeleteAllNotificationDataInternal(
const GURL& origin,
const std::string& tag,
std::optional<bool> is_shown_by_browser,
int64_t service_worker_registration_id,
std::set<std::string>* deleted_notification_ids) { … }
}