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