blob: 80e7171db844e018a35c43e85d54cb0d31d56ba7 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DATA_SHARING_PUBLIC_LOGGER_H_
#define COMPONENTS_DATA_SHARING_PUBLIC_LOGGER_H_
#include "base/observer_list.h"
#include "base/time/time.h"
#include "components/data_sharing/public/logger_common.mojom.h"
namespace data_sharing {
// Helper class for aggregating logs about Data Sharing and potentially exposing
// them to a helper internals page. Note that this class will not necessarily
// log or be stored unless there is a registered observer or
// --data-sharing-debug-logs is set.
class Logger {
public:
// A helper class to store state about a particular log.
struct Entry {
public:
Entry(base::Time event_time,
logger_common::mojom::LogSource log_source,
const std::string& source_file,
int source_line,
const std::string& message);
bool operator==(const Entry& other) const;
base::Time event_time;
logger_common::mojom::LogSource log_source;
std::string source_file;
int source_line;
std::string message;
};
// Observer to be notified when new logs are added.
class Observer {
public:
virtual ~Observer() = default;
// Called when a new log is available (or when a new Observer is registered,
// with any queued up logs.
virtual void OnNewLog(const Entry& entry) = 0;
};
virtual ~Logger() = default;
virtual void AddObserver(Observer* observer) = 0;
virtual void RemoveObserver(Observer* observer) = 0;
// Whether or not logs are enabled.
virtual bool ShouldEnableDebugLogs() = 0;
// Saves a message log related to Data Sharing along with associated metadata.
virtual void Log(base::Time event_time,
logger_common::mojom::LogSource log_source,
const std::string& source_file,
int source_line,
const std::string& message) = 0;
};
} // namespace data_sharing
#endif // COMPONENTS_DATA_SHARING_PUBLIC_LOGGER_H_