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