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_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_AUTOFILL_ADDRESS_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/autofill_type.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/autofill/field_types.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/form_group.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A form group that stores address information.
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Address : public FormGroup {
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  Address();
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Address(const Address& address);
22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual ~Address();
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Address& operator=(const Address& address);
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // FormGroup:
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void GetPossibleFieldTypes(const string16& text,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                     FieldTypeSet* possible_types) const;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void GetAvailableFieldTypes(FieldTypeSet* available_types) const;
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual string16 GetInfo(AutofillFieldType type) const;
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetInfo(AutofillFieldType type, const string16& value);
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  const std::string& country_code() const { return country_code_; }
34dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void set_country_code(const std::string& country_code) {
35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    country_code_ = country_code;
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets all of the fields to the empty string.
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Clear();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Vector of tokens in an address line.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::vector<string16> LineTokens;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Returns the localized country name corresponding to |country_code_|.
46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  string16 Country() const;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_line1(const string16& line1);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_line2(const string16& line2);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Sets the |country_code_| based on |country|, which should be a localized
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // country name.
53dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void SetCountry(const string16& country);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The following functions match |text| against the various values of the
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // address, returning true on match.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsLine1(const string16& text) const;
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsLine2(const string16& text) const;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsCity(const string16& text) const;
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsState(const string16& text) const;
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsCountry(const string16& text) const;
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsZipCode(const string16& text) const;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if all of the tokens in |text| match the tokens in
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |line_tokens|.
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool IsLineMatch(const string16& text, const LineTokens& line_tokens) const;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if |word| is one of the tokens in |line_tokens|.
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool IsWordInLine(const string16& word, const LineTokens& line_tokens) const;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // List of tokens in each part of |line1_| and |line2_|.
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LineTokens line1_tokens_;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LineTokens line2_tokens_;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The address.
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 line1_;
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 line2_;
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 city_;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 state_;
80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  std::string country_code_;
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 zip_code_;
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_AUTOFILL_ADDRESS_H_
85