blob: a5f7c500bbc060d0328f1b7d11ec29171c7d3fcf [file] [log] [blame]
// Copyright 2019 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_NOTIFICATIONS_SCHEDULER_INTERNAL_NOTIFICATION_SCHEDULER_H_
#define CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_INTERNAL_NOTIFICATION_SCHEDULER_H_
#include <memory>
#include "base/functional/callback.h"
#include "chrome/browser/notifications/scheduler/public/client_overview.h"
#include "chrome/browser/notifications/scheduler/public/notification_background_task_scheduler.h"
#include "chrome/browser/notifications/scheduler/public/user_action_handler.h"
namespace notifications {
class NotificationSchedulerContext;
struct NotificationParams;
// Provides notification scheduling and throttling functionalities. This class
// glues all the subsystems together for notification scheduling system.
class NotificationScheduler
: public NotificationBackgroundTaskScheduler::Handler,
public UserActionHandler {
public:
using InitCallback = base::OnceCallback<void(bool)>;
static std::unique_ptr<NotificationScheduler> Create(
std::unique_ptr<NotificationSchedulerContext> context);
NotificationScheduler();
NotificationScheduler(const NotificationScheduler&) = delete;
NotificationScheduler& operator=(const NotificationScheduler&) = delete;
~NotificationScheduler() override;
// Initializes the scheduler.
virtual void Init(InitCallback init_callback) = 0;
// Schedules a notification to show in the future. Throttling logic may apply
// based on |notification_params|.
virtual void Schedule(
std::unique_ptr<NotificationParams> notification_params) = 0;
// Queries an overview of client information for a given
// |SchedulerClientType| including impression details.
virtual void GetClientOverview(
SchedulerClientType type,
ClientOverview::ClientOverviewCallback callback) = 0;
// Deletes all notifications of a given |SchedulerClientType|.
virtual void DeleteAllNotifications(SchedulerClientType type) = 0;
};
} // namespace notifications
#endif // CHROME_BROWSER_NOTIFICATIONS_SCHEDULER_INTERNAL_NOTIFICATION_SCHEDULER_H_