Home | History | Annotate | Download | only in browser
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_
      6 #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/strings/string16.h"
     12 #include "components/autofill/core/browser/field_types.h"
     13 #include "components/autofill/core/common/form_field_data.h"
     14 
     15 namespace autofill {
     16 
     17 class AutofillType;
     18 
     19 class AutofillField : public FormFieldData {
     20  public:
     21   enum PhonePart {
     22     IGNORED = 0,
     23     PHONE_PREFIX = 1,
     24     PHONE_SUFFIX = 2,
     25   };
     26 
     27   AutofillField();
     28   AutofillField(const FormFieldData& field, const base::string16& unique_name);
     29   virtual ~AutofillField();
     30 
     31   const base::string16& unique_name() const { return unique_name_; }
     32 
     33   const std::string& section() const { return section_; }
     34   ServerFieldType heuristic_type() const { return heuristic_type_; }
     35   ServerFieldType server_type() const { return server_type_; }
     36   HtmlFieldType html_type() const { return html_type_; }
     37   HtmlFieldMode html_mode() const { return html_mode_; }
     38   const ServerFieldTypeSet& possible_types() const { return possible_types_; }
     39   PhonePart phone_part() const { return phone_part_; }
     40 
     41   // Setters for the detected type and section for this field.
     42   void set_section(const std::string& section) { section_ = section; }
     43   void set_heuristic_type(ServerFieldType type);
     44   void set_server_type(ServerFieldType type);
     45   void set_possible_types(const ServerFieldTypeSet& possible_types) {
     46     possible_types_ = possible_types;
     47   }
     48   void SetHtmlType(HtmlFieldType type, HtmlFieldMode mode);
     49 
     50   // This function automatically chooses between server and heuristic autofill
     51   // type, depending on the data available.
     52   AutofillType Type() const;
     53 
     54   // Returns true if the value of this field is empty.
     55   bool IsEmpty() const;
     56 
     57   // The unique signature of this field, composed of the field name and the html
     58   // input type in a 32-bit hash.
     59   std::string FieldSignature() const;
     60 
     61   // Returns true if the field type has been determined (without the text in the
     62   // field).
     63   bool IsFieldFillable() const;
     64 
     65   void set_default_value(const std::string& value) { default_value_ = value; }
     66   const std::string& default_value() const { return default_value_; }
     67 
     68   // Set |field_data|'s value to |value|.  Uses |field| and |app_locale| as
     69   // hints when filling exceptional cases like phone number values and <select>
     70   // fields. Returns |true| if the field has been filled, |false| otherwise.
     71   static bool FillFormField(const AutofillField& field,
     72                             const base::string16& value,
     73                             const std::string& app_locale,
     74                             FormFieldData* field_data);
     75 
     76  private:
     77   // The unique name of this field, generated by Autofill.
     78   base::string16 unique_name_;
     79 
     80   // The unique identifier for the section (e.g. billing vs. shipping address)
     81   // that this field belongs to.
     82   std::string section_;
     83 
     84   // The type of the field, as determined by the Autofill server.
     85   ServerFieldType server_type_;
     86 
     87   // The type of the field, as determined by the local heuristics.
     88   ServerFieldType heuristic_type_;
     89 
     90   // The type of the field, as specified by the site author in HTML.
     91   HtmlFieldType html_type_;
     92 
     93   // The "mode" of the field, as specified by the site author in HTML.
     94   // Currently this is used to distinguish between billing and shipping fields.
     95   HtmlFieldMode html_mode_;
     96 
     97   // The set of possible types for this field.
     98   ServerFieldTypeSet possible_types_;
     99 
    100   // Used to track whether this field is a phone prefix or suffix.
    101   PhonePart phone_part_;
    102 
    103   // The default value returned by the Autofill server.
    104   std::string default_value_;
    105 
    106   DISALLOW_COPY_AND_ASSIGN(AutofillField);
    107 };
    108 
    109 }  // namespace autofill
    110 
    111 #endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_FIELD_H_
    112