Commit 223c45b1 authored by Maria Kazinova's avatar Maria Kazinova Committed by Commit Bot

Added a metric to record the success of form filling by Autofill on iOS.

This metric is added to ensure that using unique renderer IDs for form
filling will not result in additional filling failures.

Bug: 1131038, 1075444
Change-Id: If3314f265ab0104f1f64297fe1e5cea63c58698d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2506032Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Reviewed-by: default avatarVadym Doroshenko  <dvadym@chromium.org>
Commit-Queue: Maria Kazinova <kazinova@google.com>
Cr-Commit-Position: refs/heads/master@{#822081}
parent c1f4cd57
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "base/mac/foundation_util.h" #include "base/mac/foundation_util.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/metrics/field_trial.h" #include "base/metrics/field_trial.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
...@@ -107,7 +108,8 @@ void GetFormField(autofill::FormFieldData* field, ...@@ -107,7 +108,8 @@ void GetFormField(autofill::FormFieldData* field,
void UpdateFieldManagerWithFillingResults( void UpdateFieldManagerWithFillingResults(
scoped_refptr<FieldDataManager> fieldDataManager, scoped_refptr<FieldDataManager> fieldDataManager,
NSString* jsonString) { NSString* jsonString,
size_t numFieldsInFormData) {
std::map<uint32_t, base::string16> fillingResults; std::map<uint32_t, base::string16> fillingResults;
if (autofill::ExtractFillingResults(jsonString, &fillingResults)) { if (autofill::ExtractFillingResults(jsonString, &fillingResults)) {
for (auto& fillData : fillingResults) { for (auto& fillData : fillingResults) {
...@@ -116,6 +118,8 @@ void UpdateFieldManagerWithFillingResults( ...@@ -116,6 +118,8 @@ void UpdateFieldManagerWithFillingResults(
kAutofilledOnUserTrigger); kAutofilledOnUserTrigger);
} }
} }
// TODO(crbug/1131038): Remove once the experiment is over.
UMA_HISTOGRAM_BOOLEAN("Autofill.FormFillSuccessIOS", !fillingResults.empty());
} }
void UpdateFieldManagerForClearedIDs( void UpdateFieldManagerForClearedIDs(
...@@ -944,6 +948,7 @@ autofillManagerFromWebState:(web::WebState*)webState ...@@ -944,6 +948,7 @@ autofillManagerFromWebState:(web::WebState*)webState
SuggestionHandledCompletion suggestionHandledCompletionCopy = SuggestionHandledCompletion suggestionHandledCompletionCopy =
[_suggestionHandledCompletion copy]; [_suggestionHandledCompletion copy];
_suggestionHandledCompletion = nil; _suggestionHandledCompletion = nil;
size_t numFieldsInFormData = data->FindPath("fields")->DictSize();
[_jsAutofillManager fillForm:std::move(data) [_jsAutofillManager fillForm:std::move(data)
forceFillFieldIdentifier:SysUTF16ToNSString(_pendingAutocompleteField) forceFillFieldIdentifier:SysUTF16ToNSString(_pendingAutocompleteField)
forceFillFieldUniqueID:_pendingAutocompleteFieldID forceFillFieldUniqueID:_pendingAutocompleteFieldID
...@@ -953,7 +958,8 @@ autofillManagerFromWebState:(web::WebState*)webState ...@@ -953,7 +958,8 @@ autofillManagerFromWebState:(web::WebState*)webState
if (!strongSelf) if (!strongSelf)
return; return;
UpdateFieldManagerWithFillingResults( UpdateFieldManagerWithFillingResults(
strongSelf->_fieldDataManager, jsonString); strongSelf->_fieldDataManager, jsonString,
numFieldsInFormData);
// It is possible that the fill was not initiated by selecting // It is possible that the fill was not initiated by selecting
// a suggestion in this case the callback is nil. // a suggestion in this case the callback is nil.
if (suggestionHandledCompletionCopy) if (suggestionHandledCompletionCopy)
......
...@@ -7319,6 +7319,11 @@ Called by update_bad_message_reasons.py.--> ...@@ -7319,6 +7319,11 @@ Called by update_bad_message_reasons.py.-->
<int value="1" label="Some data available to fill"/> <int value="1" label="Some data available to fill"/>
</enum> </enum>
<enum name="BooleanAutofillFormFillSuccessIOS">
<int value="0" label="Not filled"/>
<int value="1" label="Filled"/>
</enum>
<enum name="BooleanAutofillInteractionAfterParsedAsType"> <enum name="BooleanAutofillInteractionAfterParsedAsType">
<int value="0" label="No interaction"/> <int value="0" label="No interaction"/>
<int value="1" label="Interaction observed"/> <int value="1" label="Interaction observed"/>
...@@ -802,6 +802,15 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -802,6 +802,15 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="Autofill.FormFillSuccessIOS"
enum="BooleanAutofillFormFillSuccessIOS" expires_after="2021-04-30">
<owner>kazinova@chromium.org</owner>
<owner>chrome-autofill@google.com</owner>
<summary>
Records whether the the form was successfully filled by Autofill on iOS.
</summary>
</histogram>
<histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState" <histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState"
expires_after="M95"> expires_after="M95">
<owner>battre@chromium.org</owner> <owner>battre@chromium.org</owner>
......
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