Commit feb4f0d0 authored by Nikunj Bhagat's avatar Nikunj Bhagat Committed by Commit Bot

AutofillManager reset shouldn't cause the metrics to be dropped

Bug: 904953
Change-Id: I763d48881143645102fdaf5d85cb2ab812e8b8c0
Reviewed-on: https://chromium-review.googlesource.com/c/1334327Reviewed-by: default avatarSebastien Seguin-Gagnon <sebsg@chromium.org>
Commit-Queue: Nik Bhagat <nikunjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607856}
parent 7aeea3a2
...@@ -1102,7 +1102,7 @@ void AutofillManager::Reset() { ...@@ -1102,7 +1102,7 @@ void AutofillManager::Reset() {
AutofillHandler::Reset(); AutofillHandler::Reset();
form_interactions_ukm_logger_.reset( form_interactions_ukm_logger_.reset(
new AutofillMetrics::FormInteractionsUkmLogger( new AutofillMetrics::FormInteractionsUkmLogger(
client_->GetUkmRecorder())); client_->GetUkmRecorder(), client_->GetUkmSourceId()));
address_form_event_logger_.reset(new AutofillMetrics::FormEventLogger( address_form_event_logger_.reset(new AutofillMetrics::FormEventLogger(
/*is_for_credit_card=*/false, driver()->IsInMainFrame(), /*is_for_credit_card=*/false, driver()->IsInMainFrame(),
form_interactions_ukm_logger_.get())); form_interactions_ukm_logger_.get()));
...@@ -1143,7 +1143,8 @@ AutofillManager::AutofillManager( ...@@ -1143,7 +1143,8 @@ AutofillManager::AutofillManager(
std::make_unique<AutocompleteHistoryManager>(driver, client)), std::make_unique<AutocompleteHistoryManager>(driver, client)),
form_interactions_ukm_logger_( form_interactions_ukm_logger_(
std::make_unique<AutofillMetrics::FormInteractionsUkmLogger>( std::make_unique<AutofillMetrics::FormInteractionsUkmLogger>(
client->GetUkmRecorder())), client->GetUkmRecorder(),
client->GetUkmSourceId())),
address_form_event_logger_( address_form_event_logger_(
std::make_unique<AutofillMetrics::FormEventLogger>( std::make_unique<AutofillMetrics::FormEventLogger>(
/*is_for_credit_card=*/false, /*is_for_credit_card=*/false,
...@@ -1489,9 +1490,7 @@ void AutofillManager::OnFormsParsed( ...@@ -1489,9 +1490,7 @@ void AutofillManager::OnFormsParsed(
DCHECK(!form_structures.empty()); DCHECK(!form_structures.empty());
// Setup the url for metrics that we will collect for this form. // Setup the url for metrics that we will collect for this form.
form_interactions_ukm_logger_->OnFormsParsed( form_interactions_ukm_logger_->OnFormsParsed(client_->GetUkmSourceId());
form_structures[0]->ToFormData().main_frame_origin.GetURL(),
client_->GetUkmSourceId());
std::vector<FormStructure*> non_queryable_forms; std::vector<FormStructure*> non_queryable_forms;
std::vector<FormStructure*> queryable_forms; std::vector<FormStructure*> queryable_forms;
......
...@@ -1912,16 +1912,15 @@ void AutofillMetrics::FormEventLogger::Log( ...@@ -1912,16 +1912,15 @@ void AutofillMetrics::FormEventLogger::Log(
} }
AutofillMetrics::FormInteractionsUkmLogger::FormInteractionsUkmLogger( AutofillMetrics::FormInteractionsUkmLogger::FormInteractionsUkmLogger(
ukm::UkmRecorder* ukm_recorder) ukm::UkmRecorder* ukm_recorder,
: ukm_recorder_(ukm_recorder) {} const ukm::SourceId source_id)
: ukm_recorder_(ukm_recorder), source_id_(source_id) {}
void AutofillMetrics::FormInteractionsUkmLogger::OnFormsParsed( void AutofillMetrics::FormInteractionsUkmLogger::OnFormsParsed(
const GURL& url,
const ukm::SourceId source_id) { const ukm::SourceId source_id) {
if (ukm_recorder_ == nullptr) if (ukm_recorder_ == nullptr)
return; return;
url_ = url;
source_id_ = source_id; source_id_ = source_id;
} }
...@@ -2130,7 +2129,7 @@ void AutofillMetrics::FormInteractionsUkmLogger::LogFormSubmitted( ...@@ -2130,7 +2129,7 @@ void AutofillMetrics::FormInteractionsUkmLogger::LogFormSubmitted(
} }
bool AutofillMetrics::FormInteractionsUkmLogger::CanLog() const { bool AutofillMetrics::FormInteractionsUkmLogger::CanLog() const {
return ukm_recorder_ && url_.is_valid(); return ukm_recorder_ != nullptr;
} }
int64_t AutofillMetrics::FormInteractionsUkmLogger::MillisecondsSinceFormParsed( int64_t AutofillMetrics::FormInteractionsUkmLogger::MillisecondsSinceFormParsed(
......
...@@ -786,16 +786,22 @@ class AutofillMetrics { ...@@ -786,16 +786,22 @@ class AutofillMetrics {
// Utility to log URL keyed form interaction events. // Utility to log URL keyed form interaction events.
class FormInteractionsUkmLogger { class FormInteractionsUkmLogger {
public: public:
explicit FormInteractionsUkmLogger(ukm::UkmRecorder* ukm_recorder); FormInteractionsUkmLogger(ukm::UkmRecorder* ukm_recorder,
const ukm::SourceId source_id);
bool has_pinned_timestamp() const { return !pinned_timestamp_.is_null(); } bool has_pinned_timestamp() const { return !pinned_timestamp_.is_null(); }
void set_pinned_timestamp(base::TimeTicks t) { pinned_timestamp_ = t; } void set_pinned_timestamp(base::TimeTicks t) { pinned_timestamp_ = t; }
const GURL& url() const { return url_; } // Initializes this logger with a source_id. Unless forms is parsed no
// autofill UKM is recorded. However due to autofill_manager resets,
// Initializes this logger with a valid url and source_id. // it is possible to have the UKM being recorded after the forms were
// Unless forms is parsed no autofill UKM can be recorded. // parsed. So, rely on autofill_client to pass correct source_id
void OnFormsParsed(const GURL& url, const ukm::SourceId source_id); // However during some cases there is a race for setting AutofillClient
// and generation of new source_id (by UKM) as they are both observing tab
// navigation. Ideally we need to refactor ownership of this logger
// so as not to rely on OnFormsParsed to record the metrics correctly.
// TODO(nikunjb): Refactor the logger to be owned by AutofillClient.
void OnFormsParsed(const ukm::SourceId source_id);
void LogInteractedWithForm(bool is_for_credit_card, void LogInteractedWithForm(bool is_for_credit_card,
size_t local_record_type_count, size_t local_record_type_count,
size_t server_record_type_count, size_t server_record_type_count,
...@@ -846,8 +852,7 @@ class AutofillMetrics { ...@@ -846,8 +852,7 @@ class AutofillMetrics {
const base::TimeTicks& form_parsed_timestamp) const; const base::TimeTicks& form_parsed_timestamp) const;
ukm::UkmRecorder* ukm_recorder_; // Weak reference. ukm::UkmRecorder* ukm_recorder_; // Weak reference.
ukm::SourceId source_id_ = -1; ukm::SourceId source_id_;
GURL url_;
base::TimeTicks pinned_timestamp_; base::TimeTicks pinned_timestamp_;
}; };
......
...@@ -110,8 +110,7 @@ void TestAutofillManager::AddSeenForm( ...@@ -110,8 +110,7 @@ void TestAutofillManager::AddSeenForm(
form_structure->SetFieldTypes(heuristic_types, server_types); form_structure->SetFieldTypes(heuristic_types, server_types);
AddSeenFormStructure(std::move(form_structure)); AddSeenFormStructure(std::move(form_structure));
form_interactions_ukm_logger()->OnFormsParsed(form.main_frame_origin.GetURL(), form_interactions_ukm_logger()->OnFormsParsed(client()->GetUkmSourceId());
client()->GetUkmSourceId());
} }
void TestAutofillManager::AddSeenFormStructure( void TestAutofillManager::AddSeenFormStructure(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment