blob: 3df28dbf7404ebcf4e0dfda428508b062dd8223e [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 "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 {
// 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 OnAfterTextFieldValueChanged(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;
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;
// Is it either a textarea or a contenteditable.
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();
};
} // namespace compose
#endif // CHROME_BROWSER_COMPOSE_COMPOSE_TEXT_USAGE_LOGGER_H_