autofill_field.h revision effb81e5f8246d0db0270817048dc992db66e9fb
14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2013 The Chromium Authors. All rights reserved. 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Use of this source code is governed by a BSD-style license that can be 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian// found in the LICENSE file. 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_ 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_ 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <string> 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "base/basictypes.h" 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "base/strings/string16.h" 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "components/autofill/core/browser/field_types.h" 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "components/autofill/core/common/form_field_data.h" 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 154b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace autofill { 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian 174b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass AutofillType; 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian 194b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass AutofillField : public FormFieldData { 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian enum PhonePart { 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian IGNORED = 0, 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian PHONE_PREFIX = 1, 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian PHONE_SUFFIX = 2, 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian AutofillField(); 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian AutofillField(const FormFieldData& field, const base::string16& unique_name); 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ~AutofillField(); 304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 314b6829f0d28990dd645e16386eb226d0f10c8731shiqian const base::string16& unique_name() const { return unique_name_; } 324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 334b6829f0d28990dd645e16386eb226d0f10c8731shiqian const std::string& section() const { return section_; } 344b6829f0d28990dd645e16386eb226d0f10c8731shiqian ServerFieldType heuristic_type() const { return heuristic_type_; } 354b6829f0d28990dd645e16386eb226d0f10c8731shiqian ServerFieldType server_type() const { return server_type_; } 364b6829f0d28990dd645e16386eb226d0f10c8731shiqian HtmlFieldType html_type() const { return html_type_; } 374b6829f0d28990dd645e16386eb226d0f10c8731shiqian HtmlFieldMode html_mode() const { return html_mode_; } 384b6829f0d28990dd645e16386eb226d0f10c8731shiqian const ServerFieldTypeSet& possible_types() const { return possible_types_; } 394b6829f0d28990dd645e16386eb226d0f10c8731shiqian PhonePart phone_part() const { return phone_part_; } 404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 414b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Setters for the detected type and section for this field. 424b6829f0d28990dd645e16386eb226d0f10c8731shiqian void set_section(const std::string& section) { section_ = section; } 434b6829f0d28990dd645e16386eb226d0f10c8731shiqian void set_heuristic_type(ServerFieldType type); 444b6829f0d28990dd645e16386eb226d0f10c8731shiqian void set_server_type(ServerFieldType type); 454b6829f0d28990dd645e16386eb226d0f10c8731shiqian void set_possible_types(const ServerFieldTypeSet& possible_types) { 464b6829f0d28990dd645e16386eb226d0f10c8731shiqian possible_types_ = possible_types; 474b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 484b6829f0d28990dd645e16386eb226d0f10c8731shiqian void SetHtmlType(HtmlFieldType type, HtmlFieldMode mode); 494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 504b6829f0d28990dd645e16386eb226d0f10c8731shiqian // This function automatically chooses between server and heuristic autofill 514b6829f0d28990dd645e16386eb226d0f10c8731shiqian // type, depending on the data available. 524b6829f0d28990dd645e16386eb226d0f10c8731shiqian AutofillType Type() const; 534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 54e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian // Returns true if the value of this field is empty. 5593fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev bool IsEmpty() const; 5693d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan 5793d13a8bbcb70bfd80b0d7ae2bf9aedfc06bf0cczhanyong.wan // The unique signature of this field, composed of the field name and the html 582620c79810d4741922e9fa89050c0af564994f24zhanyong.wan // input type in a 32-bit hash. 592620c79810d4741922e9fa89050c0af564994f24zhanyong.wan std::string FieldSignature() const; 602620c79810d4741922e9fa89050c0af564994f24zhanyong.wan 612620c79810d4741922e9fa89050c0af564994f24zhanyong.wan // Returns true if the field type has been determined (without the text in the 622620c79810d4741922e9fa89050c0af564994f24zhanyong.wan // field). 632620c79810d4741922e9fa89050c0af564994f24zhanyong.wan bool IsFieldFillable() const; 642620c79810d4741922e9fa89050c0af564994f24zhanyong.wan 652620c79810d4741922e9fa89050c0af564994f24zhanyong.wan void set_default_value(const std::string& value) { default_value_ = value; } 662620c79810d4741922e9fa89050c0af564994f24zhanyong.wan const std::string& default_value() const { return default_value_; } 674b6829f0d28990dd645e16386eb226d0f10c8731shiqian 684b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Set |field_data|'s value to |value|. Uses |field| and |app_locale| as 6947ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan // hints when filling exceptional cases like phone number values and <select> 7047ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan // fields. Returns |true| if the field has been filled, |false| otherwise. 7147ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan static bool FillFormField(const AutofillField& field, 7247ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan const base::string16& value, 7347ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan const std::string& app_locale, 7447ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan FormFieldData* field_data); 7547ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan 764b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 774b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The unique name of this field, generated by Autofill. 7847ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan base::string16 unique_name_; 794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 8047ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan // The unique identifier for the section (e.g. billing vs. shipping address) 8147ff745210c71ba79033fb69a7f832aa18b87977zhanyong.wan // that this field belongs to. 824b6829f0d28990dd645e16386eb226d0f10c8731shiqian std::string section_; 834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 844b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The type of the field, as determined by the Autofill server. 850ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan ServerFieldType server_type_; 864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 870ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan // The type of the field, as determined by the local heuristics. 880ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan ServerFieldType heuristic_type_; 890ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 900ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan // The type of the field, as specified by the site author in HTML. 910ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan HtmlFieldType html_type_; 920ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 93b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan // The "mode" of the field, as specified by the site author in HTML. 94b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan // Currently this is used to distinguish between billing and shipping fields. 950ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan HtmlFieldMode html_mode_; 960ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 97b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan // The set of possible types for this field. 98b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan ServerFieldTypeSet possible_types_; 990ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 1000ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan // Used to track whether this field is a phone prefix or suffix. 1010ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan PhonePart phone_part_; 102b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan 1030ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan // The default value returned by the Autofill server. 1040ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan std::string default_value_; 1050ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 106b0fe69fcbfaa44ae05f6f2429d9c4bbb326b5ea5zhanyong.wan DISALLOW_COPY_AND_ASSIGN(AutofillField); 1070ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan}; 1080ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 1090ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan} // namespace autofill 1100ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan 1110ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_ 1120ebc16a68eea644a9f8a718fbdef95112a4a0ff2zhanyong.wan