| Index: third_party/libaddressinput/chromium/addressinput_util.cc
|
| diff --git a/third_party/libaddressinput/chromium/addressinput_util.cc b/third_party/libaddressinput/chromium/addressinput_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3af6137de46c2334f9550813b2e32eb996c3a3b4
|
| --- /dev/null
|
| +++ b/third_party/libaddressinput/chromium/addressinput_util.cc
|
| @@ -0,0 +1,75 @@
|
| +// Copyright 2014 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 "third_party/libaddressinput/chromium/addressinput_util.h"
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/macros.h"
|
| +#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_data.h"
|
| +#include "third_party/libaddressinput/chromium/cpp/include/libaddressinput/address_metadata.h"
|
| +
|
| +namespace autofill {
|
| +namespace addressinput {
|
| +
|
| +namespace {
|
| +
|
| +using ::i18n::addressinput::AddressData;
|
| +using ::i18n::addressinput::AddressField;
|
| +using ::i18n::addressinput::AddressProblem;
|
| +using ::i18n::addressinput::IsFieldRequired;
|
| +
|
| +// Returns true if the |problem| should not be reported for the |field| because
|
| +// the |filter| excludes it.
|
| +bool FilterExcludes(
|
| + const std::multimap<AddressField, AddressProblem::Type>* filter,
|
| + AddressField field,
|
| + AddressProblem::Type problem) {
|
| + return filter != NULL && !filter->empty() &&
|
| + std::find(
|
| + filter->begin(),
|
| + filter->end(),
|
| + std::multimap<AddressField, AddressProblem::Type>::value_type(
|
| + field, problem)) == filter->end();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +bool HasAllRequiredFields(const AddressData& address_to_check) {
|
| + std::multimap<AddressField, AddressProblem::Type> problems;
|
| + ValidateRequiredFields(address_to_check, NULL, &problems);
|
| + return problems.empty();
|
| +}
|
| +
|
| +void ValidateRequiredFields(
|
| + const AddressData& address_to_check,
|
| + const std::multimap<AddressField, AddressProblem::Type>* filter,
|
| + std::multimap<AddressField, AddressProblem::Type>* problems) {
|
| + DCHECK(problems);
|
| +
|
| + static const AddressField kFields[] = {
|
| + ::i18n::addressinput::COUNTRY,
|
| + ::i18n::addressinput::ADMIN_AREA,
|
| + ::i18n::addressinput::LOCALITY,
|
| + ::i18n::addressinput::DEPENDENT_LOCALITY,
|
| + ::i18n::addressinput::SORTING_CODE,
|
| + ::i18n::addressinput::POSTAL_CODE,
|
| + ::i18n::addressinput::STREET_ADDRESS,
|
| + ::i18n::addressinput::RECIPIENT};
|
| +
|
| + for (size_t i = 0; i < arraysize(kFields); ++i) {
|
| + AddressField field = kFields[i];
|
| + if (address_to_check.IsFieldEmpty(field) &&
|
| + IsFieldRequired(field, address_to_check.region_code) &&
|
| + !FilterExcludes(
|
| + filter, field, AddressProblem::MISSING_REQUIRED_FIELD)) {
|
| + problems->insert(
|
| + std::make_pair(field, AddressProblem::MISSING_REQUIRED_FIELD));
|
| + }
|
| + }
|
| +}
|
| +
|
| +} // namespace addressinput
|
| +} // namespace autofill
|
|
|