#ifndef CHROME_BROWSER_ASH_PRINTING_PRINTER_EVENT_TRACKER_H_
#define CHROME_BROWSER_ASH_PRINTING_PRINTER_EVENT_TRACKER_H_
#include <vector>
#include "base/synchronization/lock.h"
#include "chromeos/printing/printer_configuration.h"
#include "components/keyed_service/core/keyed_service.h"
#include "third_party/metrics_proto/printer_event.pb.h"
namespace chromeos {
class Printer;
struct PrinterSearchData;
}
namespace ash {
class PrinterEventTracker : public KeyedService {
public:
enum SetupMode {
kUnknownMode,
kUser,
kAutomatic
};
PrinterEventTracker();
PrinterEventTracker(const PrinterEventTracker&) = delete;
PrinterEventTracker& operator=(const PrinterEventTracker&) = delete;
~PrinterEventTracker() override;
void set_logging(bool logging);
void RecordUsbPrinterInstalled(
const chromeos::Printer::PpdReference& ppd_reference,
const chromeos::PrinterSearchData& ppd_search_data,
SetupMode mode);
void RecordIppPrinterInstalled(
const chromeos::Printer& printer,
SetupMode mode,
const std::optional<chromeos::IppPrinterInfo>& ipp_printer_info);
void RecordSetupAbandoned(const chromeos::Printer& printer);
void RecordUsbSetupAbandoned(
const chromeos::PrinterSearchData& ppd_search_data);
void RecordPrinterRemoved(const chromeos::Printer& printer);
void FlushPrinterEvents(std::vector<metrics::PrinterEventProto>* events);
private:
bool logging_ = false;
std::vector<metrics::PrinterEventProto> events_;
base::Lock lock_;
};
}
#endif