1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/libaddressinput/chromium/addressinput_util.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <algorithm>
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/logging.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_metadata.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace autofill {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace addressinput {
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::i18n::addressinput::AddressData;
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::i18n::addressinput::AddressField;
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::i18n::addressinput::AddressProblem;
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::i18n::addressinput::IsFieldRequired;
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::i18n::addressinput::MISSING_REQUIRED_FIELD;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Returns true if the |problem| should not be reported for the |field| because
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// the |filter| excludes it.
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool FilterExcludes(const std::multimap<AddressField, AddressProblem>* filter,
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    AddressField field,
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                    AddressProblem problem) {
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return filter != NULL && !filter->empty() &&
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch         std::find(filter->begin(),
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   filter->end(),
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   std::multimap<AddressField, AddressProblem>::value_type(
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                       field, problem)) == filter->end();
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool HasAllRequiredFields(const AddressData& address_to_check) {
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::multimap<AddressField, AddressProblem> problems;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ValidateRequiredFields(address_to_check, NULL, &problems);
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return problems.empty();
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ValidateRequiredFields(
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const AddressData& address_to_check,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const std::multimap<AddressField, AddressProblem>* filter,
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    std::multimap<AddressField, AddressProblem>* problems) {
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(problems);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static const AddressField kFields[] = {
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::COUNTRY,
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::ADMIN_AREA,
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::LOCALITY,
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::DEPENDENT_LOCALITY,
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::SORTING_CODE,
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::POSTAL_CODE,
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ::i18n::addressinput::STREET_ADDRESS,
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      // ORGANIZATION is never required.
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ::i18n::addressinput::RECIPIENT
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  for (size_t i = 0; i < arraysize(kFields); ++i) {
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    AddressField field = kFields[i];
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (address_to_check.IsFieldEmpty(field) &&
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        IsFieldRequired(field, address_to_check.region_code) &&
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        !FilterExcludes(filter, field, MISSING_REQUIRED_FIELD)) {
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      problems->insert(std::make_pair(field, MISSING_REQUIRED_FIELD));
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace addressinput
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace autofill
76