1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_AUTOFILL_ADDRESS_FIELD_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_AUTOFILL_ADDRESS_FIELD_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string16.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_type.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/field_types.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/form_field.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass AutofillField;
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AddressField : public FormField {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool GetFieldInfo(FieldTypeMap* field_type_map) const;
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual FormFieldType GetFormFieldType() const;
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static AddressField* Parse(std::vector<AutofillField*>::const_iterator* iter,
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             bool is_ecml);
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tries to determine the billing/shipping type of this address.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddressType FindType() const;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetType(AddressType address_type) { type_ = address_type; }
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if this is a full address as opposed to an address fragment
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // such as a stand-alone ZIP code.
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool IsFullAddress();
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddressField();
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool ParseCompany(std::vector<AutofillField*>::const_iterator* iter,
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           bool is_ecml, AddressField* address_field);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool ParseAddressLines(
42dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      std::vector<AutofillField*>::const_iterator* iter,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool is_ecml, AddressField* address_field);
44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool ParseCountry(std::vector<AutofillField*>::const_iterator* iter,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           bool is_ecml, AddressField* address_field);
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool ParseZipCode(std::vector<AutofillField*>::const_iterator* iter,
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           bool is_ecml, AddressField* address_field);
48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool ParseCity(std::vector<AutofillField*>::const_iterator* iter,
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        bool is_ecml, AddressField* address_field);
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  static bool ParseState(std::vector<AutofillField*>::const_iterator* iter,
51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                         bool is_ecml, AddressField* address_field);
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Looks for an address type in the given text, which the caller must
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // convert to lowercase.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static AddressType AddressTypeFromText(const string16& text);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* company_;   // optional
58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* address1_;
59dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* address2_;  // optional
60dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* city_;
61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* state_;     // optional
62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* zip_;
63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* zip4_;      // optional ZIP+4; we don't fill this yet
64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  AutofillField* country_;   // optional
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddressType type_;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_ecml_;
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(AddressField);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_AUTOFILL_ADDRESS_FIELD_H_
73