1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
// 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_
|