#ifndef COMPONENTS_BREADCRUMBS_CORE_APPLICATION_BREADCRUMBS_LOGGER_H_
#define COMPONENTS_BREADCRUMBS_CORE_APPLICATION_BREADCRUMBS_LOGGER_H_
#include <memory>
#include <string>
#include "base/files/file_path.h"
#include "base/functional/callback.h"
#include "base/memory/memory_pressure_listener.h"
#include "base/metrics/user_metrics.h"
#if defined(TOOLKIT_VIEWS)
#include "ui/views/widget/any_widget_observer.h"
#endif
namespace base {
class TimeTicks;
}
namespace breadcrumbs {
class BreadcrumbPersistentStorageManager;
class ApplicationBreadcrumbsLogger : public base::MemoryPressureListener {
public:
explicit ApplicationBreadcrumbsLogger(
const base::FilePath& storage_dir,
base::RepeatingCallback<bool()> is_metrics_enabled_callback);
ApplicationBreadcrumbsLogger(const ApplicationBreadcrumbsLogger&) = delete;
~ApplicationBreadcrumbsLogger() override;
breadcrumbs::BreadcrumbPersistentStorageManager* GetPersistentStorageManager()
const;
private:
void OnUserAction(const std::string& action, base::TimeTicks action_time);
void OnMemoryPressure(
base::MemoryPressureLevel memory_pressure_level) override;
#if defined(TOOLKIT_VIEWS)
void OnWidgetClosed(views::Widget* widget);
#endif
static bool IsUserTriggeredAction(const std::string& action);
base::ActionCallback user_action_callback_;
base::MemoryPressureListenerRegistration
memory_pressure_listener_registration_;
#if defined(TOOLKIT_VIEWS)
views::AnyWidgetObserver any_widget_observer_;
#endif
std::unique_ptr<breadcrumbs::BreadcrumbPersistentStorageManager>
persistent_storage_manager_;
};
}
#endif