#ifndef CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_
#define CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_
#include "base/memory/raw_ptr.h"
#include "components/autofill/core/browser/foundations/autofill_manager.h"
#include "components/autofill/core/common/signatures.h"
#include "content/public/browser/document_user_data.h"
namespace compose {
class ComposeTextUsageLogger
: public content::DocumentUserData<ComposeTextUsageLogger>,
public autofill::AutofillManager::Observer {
public:
~ComposeTextUsageLogger() override;
void OnAfterTextFieldValueChanged(autofill::AutofillManager& manager,
autofill::FormGlobalId form,
autofill::FieldGlobalId field,
const std::u16string& text_value) override;
private:
explicit ComposeTextUsageLogger(content::RenderFrameHost* rfh);
void Reset();
struct FieldMetrics {
FieldMetrics() noexcept;
~FieldMetrics();
bool initialized = false;
bool sensitive_field = false;
int64_t estimate_typed_characters = 0;
int64_t form_control_type = -1;
autofill::FieldSignature field_signature;
autofill::FormSignature form_signature;
base::TimeTicks last_update_time;
base::TimeDelta editing_time;
std::u16string initial_text;
std::u16string final_text;
int64_t previous_text_length = 0;
bool is_autofill_field_type = false;
bool is_long_field = false;
};
raw_ptr<ukm::UkmRecorder> ukm_recorder_;
ukm::SourceId source_id_ = ukm::SourceId();
std::map<autofill::FieldGlobalId, FieldMetrics> field_metrics_;
friend DocumentUserData;
DOCUMENT_USER_DATA_KEY_DECL();
};
}
#endif