Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1501)

Unified Diff: chrome/browser/autofill/autofill_manager.cc

Issue 5963004: Add autofill metrics to dig into the failure case. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/browser/autofill/autofill_metrics.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/autofill/autofill_manager.cc
diff --git a/chrome/browser/autofill/autofill_manager.cc b/chrome/browser/autofill/autofill_manager.cc
index f8aa2816eaf538279d33331c63997715957d2e08..bda61ee29136452ce1b50447f427af2f9c2cfffe 100644
--- a/chrome/browser/autofill/autofill_manager.cc
+++ b/chrome/browser/autofill/autofill_manager.cc
@@ -209,7 +209,14 @@ void AutoFillManager::OnFormSubmitted(const FormData& form) {
if (!upload_form_structure_->ShouldBeParsed(true))
return;
- DeterminePossibleFieldTypesForUpload();
+ FormStructure* cached_upload_form_structure = NULL;
+ AutoFillField* ignored;
+ if (!FindCachedFormAndField(form, form.fields.front(),
+ &cached_upload_form_structure, &ignored)) {
+ cached_upload_form_structure = NULL;
+ }
+
+ DeterminePossibleFieldTypesForUpload(cached_upload_form_structure);
// TODO(isherman): Consider uploading to server here rather than in
// HandleSubmit().
@@ -486,7 +493,8 @@ bool AutoFillManager::IsAutoFillEnabled() const {
return prefs->GetBoolean(prefs::kAutoFillEnabled);
}
-void AutoFillManager::DeterminePossibleFieldTypesForUpload() {
+void AutoFillManager::DeterminePossibleFieldTypesForUpload(
+ const FormStructure* cached_upload_form_structure) {
for (size_t i = 0; i < upload_form_structure_->field_count(); i++) {
const AutoFillField* field = upload_form_structure_->field(i);
FieldTypeSet field_types;
@@ -506,13 +514,34 @@ void AutoFillManager::DeterminePossibleFieldTypesForUpload() {
metric_logger_->Log(AutoFillMetrics::FIELD_SUBMITTED);
if (field_types.find(EMPTY_TYPE) == field_types.end() &&
field_types.find(UNKNOWN_TYPE) == field_types.end()) {
- if (field->is_autofilled())
- metric_logger_->Log(AutoFillMetrics::FIELD_AUTOFILLED);
- else
- metric_logger_->Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED);
+ if (field->is_autofilled()) {
+ metric_logger_->Log(AutoFillMetrics::FIELD_AUTOFILLED);
+ } else {
+ metric_logger_->Log(AutoFillMetrics::FIELD_AUTOFILL_FAILED);
+
+ AutoFillFieldType heuristic_type = cached_upload_form_structure?
+ cached_upload_form_structure->field(i)->heuristic_type() :
+ UNKNOWN_TYPE;
+ if (heuristic_type == UNKNOWN_TYPE)
+ metric_logger_->Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_UNKNOWN);
+ else if (field_types.count(heuristic_type))
+ metric_logger_->Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_MATCH);
+ else
+ metric_logger_->Log(AutoFillMetrics::FIELD_HEURISTIC_TYPE_MISMATCH);
+
+ AutoFillFieldType server_type = cached_upload_form_structure?
+ cached_upload_form_structure->field(i)->server_type() :
+ NO_SERVER_DATA;
+ if (server_type == NO_SERVER_DATA)
+ metric_logger_->Log(AutoFillMetrics::FIELD_SERVER_TYPE_UNKNOWN);
+ else if (field_types.count(server_type))
+ metric_logger_->Log(AutoFillMetrics::FIELD_SERVER_TYPE_MATCH);
+ else
+ metric_logger_->Log(AutoFillMetrics::FIELD_SERVER_TYPE_MISMATCH);
+ }
+
// TODO(isherman): Other things we might want to log here:
- // * Did the field's heuristic type match the PDM type?
// * Per Vadim's email, a combination of (1) whether heuristics fired,
// (2) whether the server returned something interesting, (3) whether
// the user filled the field
@@ -623,7 +652,7 @@ bool AutoFillManager::FindCachedFormAndField(const FormData& form,
// Find the FormStructure that corresponds to |form|.
*form_structure = NULL;
for (std::vector<FormStructure*>::const_iterator iter =
- form_structures_.begin();
+ form_structures_.begin();
iter != form_structures_.end(); ++iter) {
if (**iter == form) {
*form_structure = *iter;
@@ -783,7 +812,7 @@ void AutoFillManager::FillPhoneNumberField(const AutoFillProfile* profile,
}
void AutoFillManager::ParseForms(const std::vector<FormData>& forms) {
- std::vector<FormStructure *> non_queryable_forms;
+ std::vector<FormStructure*> non_queryable_forms;
for (std::vector<FormData>::const_iterator iter = forms.begin();
iter != forms.end(); ++iter) {
scoped_ptr<FormStructure> form_structure(new FormStructure(*iter));
@@ -799,12 +828,10 @@ void AutoFillManager::ParseForms(const std::vector<FormData>& forms) {
}
// If none of the forms were parsed, no use querying the server.
- if (!form_structures_.empty() && !disable_download_manager_requests_) {
- download_manager_.StartQueryRequest(form_structures_,
- *metric_logger_);
- }
+ if (!form_structures_.empty() && !disable_download_manager_requests_)
+ download_manager_.StartQueryRequest(form_structures_, *metric_logger_);
- for (std::vector<FormStructure *>::const_iterator iter =
+ for (std::vector<FormStructure*>::const_iterator iter =
non_queryable_forms.begin();
iter != non_queryable_forms.end(); ++iter) {
form_structures_.push_back(*iter);
« no previous file with comments | « chrome/browser/autofill/autofill_manager.h ('k') | chrome/browser/autofill/autofill_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698