Commit b6d57544 authored by Dominic Battre's avatar Dominic Battre Committed by Commit Bot

Show html type of input elements in chrome://autofill-internals

As the autocomplete attribute influences the field classification, this
CL introduces that the type of the autocomplete attribute is presented
in chrome://autofill-internals. This only happens if the autocomplete
attribute actually exists in the DOM.

Bug: 928595
Change-Id: Id8538f724311a95307470cebe525b40fb549be79
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2300080
Commit-Queue: Dominic Battré <battre@chromium.org>
Auto-Submit: Dominic Battré <battre@chromium.org>
Reviewed-by: default avatarMatthias Körber <koerber@google.com>
Cr-Commit-Position: refs/heads/master@{#788610}
parent 96277202
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/field_types.h"
#include "base/notreached.h" #include "base/notreached.h"
#include "base/strings/string_piece.h"
#include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_features.h"
namespace autofill { namespace autofill {
...@@ -132,4 +133,101 @@ bool IsFillableFieldType(ServerFieldType field_type) { ...@@ -132,4 +133,101 @@ bool IsFillableFieldType(ServerFieldType field_type) {
return false; return false;
} }
base::StringPiece FieldTypeToStringPiece(HtmlFieldType type) {
switch (type) {
case HTML_TYPE_UNSPECIFIED:
return "HTML_TYPE_UNSPECIFIED";
case HTML_TYPE_NAME:
return "HTML_TYPE_NAME";
case HTML_TYPE_HONORIFIC_PREFIX:
return "HTML_TYPE_HONORIFIC_PREFIX";
case HTML_TYPE_GIVEN_NAME:
return "HTML_TYPE_GIVEN_NAME";
case HTML_TYPE_ADDITIONAL_NAME:
return "HTML_TYPE_ADDITIONAL_NAME";
case HTML_TYPE_FAMILY_NAME:
return "HTML_TYPE_FAMILY_NAME";
case HTML_TYPE_ORGANIZATION:
return "HTML_TYPE_ORGANIZATION";
case HTML_TYPE_STREET_ADDRESS:
return "HTML_TYPE_STREET_ADDRESS";
case HTML_TYPE_ADDRESS_LINE1:
return "HTML_TYPE_ADDRESS_LINE1";
case HTML_TYPE_ADDRESS_LINE2:
return "HTML_TYPE_ADDRESS_LINE2";
case HTML_TYPE_ADDRESS_LINE3:
return "HTML_TYPE_ADDRESS_LINE3";
case HTML_TYPE_ADDRESS_LEVEL1:
return "HTML_TYPE_ADDRESS_LEVEL1";
case HTML_TYPE_ADDRESS_LEVEL2:
return "HTML_TYPE_ADDRESS_LEVEL2";
case HTML_TYPE_ADDRESS_LEVEL3:
return "HTML_TYPE_ADDRESS_LEVEL3";
case HTML_TYPE_COUNTRY_CODE:
return "HTML_TYPE_COUNTRY_CODE";
case HTML_TYPE_COUNTRY_NAME:
return "HTML_TYPE_COUNTRY_NAME";
case HTML_TYPE_POSTAL_CODE:
return "HTML_TYPE_POSTAL_CODE";
case HTML_TYPE_FULL_ADDRESS:
return "HTML_TYPE_FULL_ADDRESS";
case HTML_TYPE_CREDIT_CARD_NAME_FULL:
return "HTML_TYPE_CREDIT_CARD_NAME_FULL";
case HTML_TYPE_CREDIT_CARD_NAME_FIRST:
return "HTML_TYPE_CREDIT_CARD_NAME_FIRST";
case HTML_TYPE_CREDIT_CARD_NAME_LAST:
return "HTML_TYPE_CREDIT_CARD_NAME_LAST";
case HTML_TYPE_CREDIT_CARD_NUMBER:
return "HTML_TYPE_CREDIT_CARD_NUMBER";
case HTML_TYPE_CREDIT_CARD_EXP:
return "HTML_TYPE_CREDIT_CARD_EXP";
case HTML_TYPE_CREDIT_CARD_EXP_MONTH:
return "HTML_TYPE_CREDIT_CARD_EXP_MONTH";
case HTML_TYPE_CREDIT_CARD_EXP_YEAR:
return "HTML_TYPE_CREDIT_CARD_EXP_YEAR";
case HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE:
return "HTML_TYPE_CREDIT_CARD_VERIFICATION_CODE";
case HTML_TYPE_CREDIT_CARD_TYPE:
return "HTML_TYPE_CREDIT_CARD_TYPE";
case HTML_TYPE_TEL:
return "HTML_TYPE_TEL";
case HTML_TYPE_TEL_COUNTRY_CODE:
return "HTML_TYPE_TEL_COUNTRY_CODE";
case HTML_TYPE_TEL_NATIONAL:
return "HTML_TYPE_TEL_NATIONAL";
case HTML_TYPE_TEL_AREA_CODE:
return "HTML_TYPE_TEL_AREA_CODE";
case HTML_TYPE_TEL_LOCAL:
return "HTML_TYPE_TEL_LOCAL";
case HTML_TYPE_TEL_LOCAL_PREFIX:
return "HTML_TYPE_TEL_LOCAL_PREFIX";
case HTML_TYPE_TEL_LOCAL_SUFFIX:
return "HTML_TYPE_TEL_LOCAL_SUFFIX";
case HTML_TYPE_TEL_EXTENSION:
return "HTML_TYPE_TEL_EXTENSION";
case HTML_TYPE_EMAIL:
return "HTML_TYPE_EMAIL";
case HTML_TYPE_TRANSACTION_AMOUNT:
return "HTML_TYPE_TRANSACTION_AMOUNT";
case HTML_TYPE_TRANSACTION_CURRENCY:
return "HTML_TYPE_TRANSACTION_CURRENCY";
case HTML_TYPE_ADDITIONAL_NAME_INITIAL:
return "HTML_TYPE_ADDITIONAL_NAME_INITIAL";
case HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR:
return "HTML_TYPE_CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR";
case HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR:
return "HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR";
case HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR:
return "HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR";
case HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR:
return "HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR";
case HTML_TYPE_UPI_VPA:
return "HTML_TYPE_UPI_VPA";
case HTML_TYPE_UNRECOGNIZED:
return "HTML_TYPE_UNRECOGNIZED";
}
NOTREACHED();
return "";
}
} // namespace autofill } // namespace autofill
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <set> #include <set>
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/string_piece_forward.h"
namespace autofill { namespace autofill {
...@@ -323,6 +324,9 @@ typedef std::set<ServerFieldType> ServerFieldTypeSet; ...@@ -323,6 +324,9 @@ typedef std::set<ServerFieldType> ServerFieldTypeSet;
// Returns whether the field can be filled with data. // Returns whether the field can be filled with data.
bool IsFillableFieldType(ServerFieldType field_type); bool IsFillableFieldType(ServerFieldType field_type);
// Returns a StringPiece describing |type|. As the StringPiece points to a
// static string, you don't need to worry about memory deallocation.
base::StringPiece FieldTypeToStringPiece(HtmlFieldType type);
} // namespace autofill } // namespace autofill
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_FIELD_TYPES_H_ #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_FIELD_TYPES_H_
...@@ -2346,16 +2346,23 @@ std::ostream& operator<<(std::ostream& buffer, const FormStructure& form) { ...@@ -2346,16 +2346,23 @@ std::ostream& operator<<(std::ostream& buffer, const FormStructure& form) {
{base::NumberToString(field->GetFieldSignature().value()), {base::NumberToString(field->GetFieldSignature().value()),
" - ", " - ",
base::NumberToString( base::NumberToString(
HashFieldSignature(field->GetFieldSignature()))}); HashFieldSignature(field->GetFieldSignature())),
", unique renderer id: ",
base::NumberToString(field->unique_renderer_id.value())});
buffer << "\n Name: " << field->parseable_name(); buffer << "\n Name: " << field->parseable_name();
auto type = field->Type().ToString(); auto type = field->Type().ToString();
auto heuristic_type = AutofillType(field->heuristic_type()).ToString(); auto heuristic_type = AutofillType(field->heuristic_type()).ToString();
auto server_type = AutofillType(field->server_type()).ToString(); auto server_type = AutofillType(field->server_type()).ToString();
auto html_type_description =
field->html_type() != HTML_TYPE_UNSPECIFIED
? base::StrCat(
{", html: ", FieldTypeToStringPiece(field->html_type())})
: "";
buffer << "\n Type: " buffer << "\n Type: "
<< base::StrCat({type, " (heuristic: ", heuristic_type, << base::StrCat({type, " (heuristic: ", heuristic_type, ", server: ",
", server: ", server_type, ")"}); server_type, html_type_description, ")"});
buffer << "\n Section: " << field->section; buffer << "\n Section: " << field->section;
constexpr size_t kMaxLabelSize = 100; constexpr size_t kMaxLabelSize = 100;
...@@ -2398,10 +2405,15 @@ LogBuffer& operator<<(LogBuffer& buffer, const FormStructure& form) { ...@@ -2398,10 +2405,15 @@ LogBuffer& operator<<(LogBuffer& buffer, const FormStructure& form) {
auto type = field->Type().ToString(); auto type = field->Type().ToString();
auto heuristic_type = AutofillType(field->heuristic_type()).ToString(); auto heuristic_type = AutofillType(field->heuristic_type()).ToString();
auto server_type = AutofillType(field->server_type()).ToString(); auto server_type = AutofillType(field->server_type()).ToString();
auto html_type_description =
field->html_type() != HTML_TYPE_UNSPECIFIED
? base::StrCat(
{", html: ", FieldTypeToStringPiece(field->html_type())})
: "";
buffer << Tr{} << "Type:" buffer << Tr{} << "Type:"
<< base::StrCat({type, " (heuristic: ", heuristic_type, << base::StrCat({type, " (heuristic: ", heuristic_type, ", server: ",
", server: ", server_type, ")"}); server_type, html_type_description, ")"});
buffer << Tr{} << "Section:" << field->section; buffer << Tr{} << "Section:" << field->section;
constexpr size_t kMaxLabelSize = 100; constexpr size_t kMaxLabelSize = 100;
......
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