blob: 520450cd426ad1e8ced15f8cb0df1557adf4f61e [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_
#define CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_
#include "components/autofill/core/browser/autofill_manager.h"
#include "content/public/browser/document_user_data.h"
namespace compose {
// Logs UKM for text writing use on web pages. There is one instance of this
// per page.
class ComposeTextUsageLogger
: public content::DocumentUserData<ComposeTextUsageLogger>,
public autofill::AutofillManager::Observer {
public:
~ComposeTextUsageLogger() override;
// autofill::AutofillManager::Observer:
void OnAfterTextFieldDidChange(autofill::AutofillManager& manager,
autofill::FormGlobalId form,
autofill::FieldGlobalId field,
const std::u16string& text_value) override;
private:
// No public constructors to force going through static methods of
// DocumentUserData (e.g. CreateForCurrentDocument).
explicit ComposeTextUsageLogger(content::RenderFrameHost* rfh);
// Flushes pending logs.
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;
std::u16string initial_text;
std::u16string final_text;
bool is_autofill_field_type = 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();
};
} // namespace compose
#endif // CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_