#ifndef CONTENT_BROWSER_NOTIFICATIONS_PLATFORM_NOTIFICATION_SERVICE_PROXY_H_
#define CONTENT_BROWSER_NOTIFICATIONS_PLATFORM_NOTIFICATION_SERVICE_PROXY_H_
#include <memory>
#include <set>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
class GURL;
namespace base {
class Time;
}
namespace blink {
enum class ServiceWorkerStatusCode;
}
namespace content {
class BrowserContext;
struct NotificationDatabaseData;
class PlatformNotificationService;
class ServiceWorkerContextWrapper;
class ServiceWorkerRegistration;
class PlatformNotificationServiceProxy {
public:
using DisplayResultCallback =
base::OnceCallback<void(bool ,
const std::string& )>;
PlatformNotificationServiceProxy(
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
BrowserContext* browser_context);
PlatformNotificationServiceProxy(const PlatformNotificationServiceProxy&) =
delete;
PlatformNotificationServiceProxy& operator=(
const PlatformNotificationServiceProxy&) = delete;
~PlatformNotificationServiceProxy();
base::WeakPtr<PlatformNotificationServiceProxy> AsWeakPtr();
void DisplayNotification(const NotificationDatabaseData& data,
DisplayResultCallback callback);
void CloseNotifications(const std::set<std::string>& notification_ids);
void ScheduleTrigger(base::Time timestamp);
void ScheduleNotification(const NotificationDatabaseData& data);
base::Time GetNextTrigger();
void RecordNotificationUkmEvent(const NotificationDatabaseData& data);
bool ShouldLogClose(const GURL& origin);
void LogClose(const NotificationDatabaseData& data);
private:
void DoDisplayNotification(const NotificationDatabaseData& data,
const GURL& service_worker_scope,
DisplayResultCallback callback);
void VerifyServiceWorkerScope(
const NotificationDatabaseData& data,
DisplayResultCallback callback,
blink::ServiceWorkerStatusCode status,
scoped_refptr<ServiceWorkerRegistration> registration);
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
raw_ptr<BrowserContext> browser_context_;
raw_ptr<PlatformNotificationService> notification_service_;
base::WeakPtrFactory<PlatformNotificationServiceProxy> weak_ptr_factory_{
this};
};
}
#endif