blob: 893567a921466e516510533dff233d56cef99a15 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_TYPE_H_
#define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_TYPE_H_
#include <string>
#include "components/autofill/core/browser/field_types.h"
namespace autofill {
// Help method that takes a |ServerFieldType| and returns it's corresponding
// |FieldTypeGroup| value.
FieldTypeGroup GroupTypeOfServerFieldType(ServerFieldType field_type);
// Help method that takes a |HtmlFieldType| and |HtmlFieldMode|, then returns
// their corresponding |FieldTypeGroup| value.
FieldTypeGroup GroupTypeOfHtmlFieldType(HtmlFieldType field_type,
HtmlFieldMode field_mode);
// The high-level description of Autofill types, used to categorize form fields
// and for associating form fields with form values in the Web Database.
class AutofillType {
public:
explicit AutofillType(ServerFieldType field_type);
AutofillType(HtmlFieldType field_type, HtmlFieldMode mode);
AutofillType(const AutofillType& autofill_type) = default;
AutofillType& operator=(const AutofillType& autofill_type) = default;
HtmlFieldType html_type() const { return html_type_; }
FieldTypeGroup group() const;
// Returns true if both the |server_type_| and the |html_type_| are set to
// their respective enum's unknown value.
bool IsUnknown() const;
// Maps |this| type to a field type that can be directly stored in an Autofill
// data model (in the sense that it makes sense to call
// |AutofillDataModel::SetRawInfo()| with the returned field type as the first
// parameter). Note that the returned type might not be exactly equivalent to
// |this| type. For example, the HTML types 'country' and 'country-name' both
// map to ADDRESS_HOME_COUNTRY.
ServerFieldType GetStorableType() const;
// Serializes |this| type to a string.
std::string ToString() const;
// Maps |field_type| to the corresponding billing field type if the field type
// is an address, name, or phone number type.
static ServerFieldType GetEquivalentBillingFieldType(
ServerFieldType field_type);
// Translates the ServerFieldType values into the corresponding strings.
static std::string ServerFieldTypeToString(ServerFieldType type);
private:
// The server-native field type, or UNKNOWN_TYPE if unset.
ServerFieldType server_type_;
// The HTML autocomplete field type and mode hints, or HTML_TYPE_UNKNOWN and
// HTML_MODE_NONE if unset.
HtmlFieldType html_type_;
HtmlFieldMode html_mode_;
};
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_TYPE_H_