// Copyright 2022 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_METRICS_STRUCTURED_EVENTS_PROCESSOR_INTERFACE_H_ #define COMPONENTS_METRICS_STRUCTURED_EVENTS_PROCESSOR_INTERFACE_H_ #include "base/files/file_path.h" #include "components/metrics/structured/event.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" #include "third_party/metrics_proto/structured_data.pb.h" namespace metrics::structured { namespace { using ::metrics::ChromeUserMetricsExtension; using ::metrics::StructuredEventProto; } // namespace // An interface allowing different classes to add fields and metadata to events // after the events are recorded by a client. class EventsProcessorInterface { public: EventsProcessorInterface() = default; EventsProcessorInterface(const EventsProcessorInterface& events_processor) = delete; EventsProcessorInterface& operator=( const EventsProcessorInterface& events_processor) = delete; virtual ~EventsProcessorInterface() = default; // Returns true if |event| should be processed by |this|. virtual bool ShouldProcessOnEventRecord(const Event& event) = 0; // Processes |event|. Note that this function may mutate |event|. virtual void OnEventsRecord(Event* event) = 0; // Processes |event| proto. Note that this function may mutate |event|. // This is called by the StructuredMetricsRecorder::OnRecordEvent once the // StructuredEventProto is built. virtual void OnEventRecorded(StructuredEventProto* event) = 0; // Attach metadata when |ProvideIndependentMetrics| is called from the // MetricsService. This will be called before events are attached. virtual void OnProvideIndependentMetrics( ChromeUserMetricsExtension* uma_proto) = 0; // Notify the processor that a profile has been added. virtual void OnProfileAdded(const base::FilePath& path) {} }; } // namespace metrics::structured #endif // COMPONENTS_METRICS_STRUCTURED_EVENTS_PROCESSOR_INTERFACE_H_