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