summaryrefslogtreecommitdiffstats
path: root/components/autofill/core/browser/contact_info.cc
diff options
context:
space:
mode:
Diffstat (limited to 'components/autofill/core/browser/contact_info.cc')
-rw-r--r--components/autofill/core/browser/contact_info.cc202
1 files changed, 202 insertions, 0 deletions
diff --git a/components/autofill/core/browser/contact_info.cc b/components/autofill/core/browser/contact_info.cc
new file mode 100644
index 0000000..d6d211b
--- /dev/null
+++ b/components/autofill/core/browser/contact_info.cc
@@ -0,0 +1,202 @@
+// 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.
+
+#include "components/autofill/core/browser/contact_info.h"
+
+#include <stddef.h>
+#include <ostream>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/logging.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/field_types.h"
+
+namespace autofill {
+
+static const AutofillFieldType kAutofillNameInfoTypes[] = {
+ NAME_FIRST,
+ NAME_MIDDLE,
+ NAME_LAST
+};
+
+static const size_t kAutofillNameInfoLength =
+ arraysize(kAutofillNameInfoTypes);
+
+NameInfo::NameInfo() {}
+
+NameInfo::NameInfo(const NameInfo& info) : FormGroup() {
+ *this = info;
+}
+
+NameInfo::~NameInfo() {}
+
+NameInfo& NameInfo::operator=(const NameInfo& info) {
+ if (this == &info)
+ return *this;
+
+ first_ = info.first_;
+ middle_ = info.middle_;
+ last_ = info.last_;
+ return *this;
+}
+
+void NameInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+ supported_types->insert(NAME_FIRST);
+ supported_types->insert(NAME_MIDDLE);
+ supported_types->insert(NAME_LAST);
+ supported_types->insert(NAME_MIDDLE_INITIAL);
+ supported_types->insert(NAME_FULL);
+}
+
+base::string16 NameInfo::GetRawInfo(AutofillFieldType type) const {
+ if (type == NAME_FIRST)
+ return first();
+
+ if (type == NAME_MIDDLE)
+ return middle();
+
+ if (type == NAME_LAST)
+ return last();
+
+ if (type == NAME_MIDDLE_INITIAL)
+ return MiddleInitial();
+
+ if (type == NAME_FULL)
+ return FullName();
+
+ return base::string16();
+}
+
+void NameInfo::SetRawInfo(AutofillFieldType type, const base::string16& value) {
+ DCHECK_EQ(AutofillType::NAME, AutofillType(type).group());
+ if (type == NAME_FIRST)
+ first_ = value;
+ else if (type == NAME_MIDDLE || type == NAME_MIDDLE_INITIAL)
+ middle_ = value;
+ else if (type == NAME_LAST)
+ last_ = value;
+ else if (type == NAME_FULL)
+ SetFullName(value);
+ else
+ NOTREACHED();
+}
+
+base::string16 NameInfo::FullName() const {
+ std::vector<base::string16> full_name;
+ if (!first_.empty())
+ full_name.push_back(first_);
+
+ if (!middle_.empty())
+ full_name.push_back(middle_);
+
+ if (!last_.empty())
+ full_name.push_back(last_);
+
+ return JoinString(full_name, ' ');
+}
+
+base::string16 NameInfo::MiddleInitial() const {
+ if (middle_.empty())
+ return base::string16();
+
+ base::string16 middle_name(middle());
+ base::string16 initial;
+ initial.push_back(middle_name[0]);
+ return initial;
+}
+
+void NameInfo::SetFullName(const base::string16& full) {
+ // Clear the names.
+ first_ = base::string16();
+ middle_ = base::string16();
+ last_ = base::string16();
+
+ std::vector<base::string16> full_name_tokens;
+ Tokenize(full, ASCIIToUTF16(" "), &full_name_tokens);
+
+ // There are four possibilities: empty; first name; first and last names;
+ // first, middle (possibly multiple strings) and then the last name.
+ if (full_name_tokens.size() > 0) {
+ first_ = full_name_tokens[0];
+ if (full_name_tokens.size() > 1) {
+ last_ = full_name_tokens.back();
+ if (full_name_tokens.size() > 2) {
+ full_name_tokens.erase(full_name_tokens.begin());
+ full_name_tokens.pop_back();
+ middle_ = JoinString(full_name_tokens, ' ');
+ }
+ }
+ }
+}
+
+EmailInfo::EmailInfo() {}
+
+EmailInfo::EmailInfo(const EmailInfo& info) : FormGroup() {
+ *this = info;
+}
+
+EmailInfo::~EmailInfo() {}
+
+EmailInfo& EmailInfo::operator=(const EmailInfo& info) {
+ if (this == &info)
+ return *this;
+
+ email_ = info.email_;
+ return *this;
+}
+
+void EmailInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+ supported_types->insert(EMAIL_ADDRESS);
+}
+
+base::string16 EmailInfo::GetRawInfo(AutofillFieldType type) const {
+ if (type == EMAIL_ADDRESS)
+ return email_;
+
+ return base::string16();
+}
+
+void EmailInfo::SetRawInfo(AutofillFieldType type,
+ const base::string16& value) {
+ DCHECK_EQ(EMAIL_ADDRESS, type);
+ email_ = value;
+}
+
+CompanyInfo::CompanyInfo() {}
+
+CompanyInfo::CompanyInfo(const CompanyInfo& info) : FormGroup() {
+ *this = info;
+}
+
+CompanyInfo::~CompanyInfo() {}
+
+CompanyInfo& CompanyInfo::operator=(const CompanyInfo& info) {
+ if (this == &info)
+ return *this;
+
+ company_name_ = info.company_name_;
+ return *this;
+}
+
+void CompanyInfo::GetSupportedTypes(FieldTypeSet* supported_types) const {
+ supported_types->insert(COMPANY_NAME);
+}
+
+base::string16 CompanyInfo::GetRawInfo(AutofillFieldType type) const {
+ if (type == COMPANY_NAME)
+ return company_name_;
+
+ return base::string16();
+}
+
+void CompanyInfo::SetRawInfo(AutofillFieldType type,
+ const base::string16& value) {
+ DCHECK_EQ(COMPANY_NAME, type);
+ company_name_ = value;
+}
+
+} // namespace autofill