1// Copyright (c) 2011 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 CHROME_BROWSER_AUTOFILL_CONTACT_INFO_H_
6#define CHROME_BROWSER_AUTOFILL_CONTACT_INFO_H_
7#pragma once
8
9#include <vector>
10
11#include "base/gtest_prod_util.h"
12#include "base/string16.h"
13#include "chrome/browser/autofill/field_types.h"
14#include "chrome/browser/autofill/form_group.h"
15
16// A form group that stores name information.
17class NameInfo : public FormGroup {
18 public:
19  NameInfo();
20  NameInfo(const NameInfo& info);
21  virtual ~NameInfo();
22
23  NameInfo& operator=(const NameInfo& info);
24
25  // FormGroup:
26  virtual void GetPossibleFieldTypes(const string16& text,
27                                     FieldTypeSet* possible_types) const;
28  virtual void GetAvailableFieldTypes(FieldTypeSet* available_types) const;
29  virtual string16 GetInfo(AutofillFieldType type) const;
30  virtual void SetInfo(AutofillFieldType type, const string16& value);
31
32 private:
33  FRIEND_TEST_ALL_PREFIXES(NameInfoTest, TestSetFullName);
34
35  // Returns the full name, which can include up to the first, middle, and last
36  // name.
37  string16 FullName() const;
38
39  // Returns the middle initial if |middle_| is non-empty.  Returns an empty
40  // string otherwise.
41  string16 MiddleInitial() const;
42
43  const string16& first() const { return first_; }
44  const string16& middle() const { return middle_; }
45  const string16& last() const { return last_; }
46
47  // Returns true if |text| is the first name.
48  bool IsFirstName(const string16& text) const;
49
50  // Returns true if |text| is the middle name.
51  bool IsMiddleName(const string16& text) const;
52
53  // Returns true if |text| is the last name.
54  bool IsLastName(const string16& text) const;
55
56  // Returns true if |text| is the middle initial.
57  bool IsMiddleInitial(const string16& text) const;
58
59  // Returns true if |text| is the last name.
60  bool IsFullName(const string16& text) const;
61
62  // Returns true if all of the tokens in |text| match the tokens in
63  // |name_tokens|.
64  bool IsNameMatch(const string16& text,
65                   const std::vector<string16>& name_tokens) const;
66
67  // Returns true if |word| is one of the tokens in |name_tokens|.
68  bool IsWordInName(const string16& word,
69                    const std::vector<string16>& name_tokens) const;
70
71  // Sets |first_| to |first| and |first_tokens_| to the set of tokens in
72  // |first|, made lowercase.
73  void SetFirst(const string16& first);
74
75  // Sets |middle_| to |middle| and |middle_tokens_| to the set of tokens in
76  // |middle|, made lowercase.
77  void SetMiddle(const string16& middle);
78
79  // Sets |last_| to |last| and |last_tokens_| to the set of tokens in |last|,
80  // made lowercase.
81  void SetLast(const string16& last);
82
83  // Sets |first_|, |middle_|, |last_| and |*_tokens_| to the tokenized
84  // |full|. It is tokenized on a space only.
85  void SetFullName(const string16& full);
86
87  // List of tokens in each part of the name.
88  std::vector<string16> first_tokens_;
89  std::vector<string16> middle_tokens_;
90  std::vector<string16> last_tokens_;
91
92  string16 first_;
93  string16 middle_;
94  string16 last_;
95};
96
97class EmailInfo : public FormGroup {
98 public:
99  EmailInfo();
100  EmailInfo(const EmailInfo& info);
101  virtual ~EmailInfo();
102
103  EmailInfo& operator=(const EmailInfo& info);
104
105  // FormGroup:
106  virtual void GetPossibleFieldTypes(const string16& text,
107                                     FieldTypeSet* possible_types) const;
108  virtual void GetAvailableFieldTypes(FieldTypeSet* available_types) const;
109  virtual string16 GetInfo(AutofillFieldType type) const;
110  virtual void SetInfo(AutofillFieldType type, const string16& value);
111
112 private:
113  string16 email_;
114};
115
116class CompanyInfo : public FormGroup {
117 public:
118  CompanyInfo();
119  CompanyInfo(const CompanyInfo& info);
120  virtual ~CompanyInfo();
121
122  CompanyInfo& operator=(const CompanyInfo& info);
123
124  // FormGroup:
125  virtual void GetPossibleFieldTypes(const string16& text,
126                                     FieldTypeSet* possible_types) const;
127  virtual void GetAvailableFieldTypes(FieldTypeSet* available_types) const;
128  virtual string16 GetInfo(AutofillFieldType type) const;
129  virtual void SetInfo(AutofillFieldType type, const string16& value);
130
131 private:
132  string16 company_name_;
133};
134
135#endif  // CHROME_BROWSER_AUTOFILL_CONTACT_INFO_H_
136