Index: components/payments/core/address_normalizer.cc |
diff --git a/components/payments/core/address_normalizer.cc b/components/payments/core/address_normalizer.cc |
deleted file mode 100644 |
index d432ff11e15db4ef13718c99c3fec1cf22d97269..0000000000000000000000000000000000000000 |
--- a/components/payments/core/address_normalizer.cc |
+++ /dev/null |
@@ -1,189 +0,0 @@ |
-// Copyright 2017 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/payments/core/address_normalizer.h" |
- |
-#include <stddef.h> |
-#include <utility> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/cancelable_callback.h" |
-#include "base/location.h" |
-#include "base/logging.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/threading/sequenced_task_runner_handle.h" |
-#include "base/time/time.h" |
-#include "components/autofill/core/browser/address_i18n.h" |
-#include "components/autofill/core/browser/autofill_profile.h" |
-#include "components/payments/core/payment_request_data_util.h" |
-#include "third_party/libaddressinput/chromium/chrome_address_validator.h" |
-#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_data.h" |
-#include "third_party/libaddressinput/src/cpp/include/libaddressinput/source.h" |
-#include "third_party/libaddressinput/src/cpp/include/libaddressinput/storage.h" |
- |
-namespace payments { |
-namespace { |
- |
-using ::autofill::AutofillProfile; |
-using ::i18n::addressinput::Source; |
-using ::i18n::addressinput::Storage; |
- |
-class AddressNormalizationRequest : public AddressNormalizer::Request { |
- public: |
- // The |delegate| and |address_validator| need to outlive this Request. |
- AddressNormalizationRequest(const AutofillProfile& profile, |
- const std::string& region_code, |
- int timeout_seconds, |
- AddressNormalizer::Delegate* delegate, |
- autofill::AddressValidator* address_validator) |
- : profile_(profile), |
- region_code_(region_code), |
- delegate_(delegate), |
- address_validator_(address_validator), |
- has_responded_(false), |
- on_timeout_( |
- base::Bind(&::payments::AddressNormalizationRequest::OnRulesLoaded, |
- base::Unretained(this), |
- false)) { |
- base::SequencedTaskRunnerHandle::Get()->PostDelayedTask( |
- FROM_HERE, on_timeout_.callback(), |
- base::TimeDelta::FromSeconds(timeout_seconds)); |
- } |
- |
- ~AddressNormalizationRequest() override {} |
- |
- void OnRulesLoaded(bool success) override { |
- on_timeout_.Cancel(); |
- |
- // Check if the timeout happened before the rules were loaded. |
- if (has_responded_) |
- return; |
- has_responded_ = true; |
- |
- // In either case, format the phone number. |
- FormatPhoneNumberForResponse(); |
- |
- if (!success) { |
- delegate_->OnCouldNotNormalize(profile_); |
- return; |
- } |
- |
- // The rules should be loaded. |
- DCHECK(address_validator_->AreRulesLoadedForRegion(region_code_)); |
- |
- // Create the AddressData from the profile. |
- ::i18n::addressinput::AddressData address_data = |
- *autofill::i18n::CreateAddressDataFromAutofillProfile(profile_, |
- region_code_); |
- |
- // Normalize the address. |
- if (address_validator_ && |
- address_validator_->NormalizeAddress(&address_data)) { |
- profile_.SetRawInfo(autofill::ADDRESS_HOME_STATE, |
- base::UTF8ToUTF16(address_data.administrative_area)); |
- profile_.SetRawInfo(autofill::ADDRESS_HOME_CITY, |
- base::UTF8ToUTF16(address_data.locality)); |
- profile_.SetRawInfo(autofill::ADDRESS_HOME_DEPENDENT_LOCALITY, |
- base::UTF8ToUTF16(address_data.dependent_locality)); |
- } |
- |
- delegate_->OnAddressNormalized(profile_); |
- } |
- |
- private: |
- // Tries to format the phone number to the E.164 format to send in the Payment |
- // Response, as defined in the Payment Request spec. Keeps the original |
- // if it cannot be formatted. More info at: |
- // https://w3c.github.io/browser-payment-api/#paymentrequest-updated-algorithm |
- void FormatPhoneNumberForResponse() { |
- const std::string original_number = base::UTF16ToUTF8(profile_.GetInfo( |
- autofill::AutofillType(autofill::PHONE_HOME_WHOLE_NUMBER), |
- region_code_)); |
- |
- std::string formatted_number = |
- data_util::FormatPhoneForResponse(original_number, region_code_); |
- |
- profile_.SetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER, |
- base::UTF8ToUTF16(formatted_number)); |
- } |
- |
- AutofillProfile profile_; |
- std::string region_code_; |
- AddressNormalizer::Delegate* delegate_; |
- autofill::AddressValidator* address_validator_; |
- |
- bool has_responded_; |
- base::CancelableCallback<void()> on_timeout_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AddressNormalizationRequest); |
-}; |
- |
-} // namespace |
- |
-AddressNormalizer::AddressNormalizer(std::unique_ptr<Source> source, |
- std::unique_ptr<Storage> storage) |
- : address_validator_(std::move(source), std::move(storage), this) {} |
- |
-AddressNormalizer::~AddressNormalizer() {} |
- |
-void AddressNormalizer::LoadRulesForRegion(const std::string& region_code) { |
- address_validator_.LoadRules(region_code); |
-} |
- |
-bool AddressNormalizer::AreRulesLoadedForRegion( |
- const std::string& region_code) { |
- return address_validator_.AreRulesLoadedForRegion(region_code); |
-} |
- |
-void AddressNormalizer::StartAddressNormalization( |
- const AutofillProfile& profile, |
- const std::string& region_code, |
- int timeout_seconds, |
- AddressNormalizer::Delegate* requester) { |
- DCHECK(timeout_seconds >= 0); |
- |
- std::unique_ptr<AddressNormalizationRequest> request( |
- base::MakeUnique<AddressNormalizationRequest>(profile, region_code, |
- timeout_seconds, requester, |
- &address_validator_)); |
- |
- // Check if the rules are already loaded. |
- if (AreRulesLoadedForRegion(region_code)) { |
- request->OnRulesLoaded(true); |
- } else { |
- // Setup the variables so the profile gets normalized when the rules have |
- // finished loading. |
- auto it = pending_normalization_.find(region_code); |
- if (it == pending_normalization_.end()) { |
- // If no entry exists yet, create the entry and assign it to |it|. |
- it = pending_normalization_ |
- .insert(std::make_pair(region_code, |
- std::vector<std::unique_ptr<Request>>())) |
- .first; |
- } |
- |
- it->second.push_back(std::move(request)); |
- |
- // Start loading the rules for that region. If the rules were already in the |
- // process of being loaded, this call will do nothing. |
- LoadRulesForRegion(region_code); |
- } |
-} |
- |
-void AddressNormalizer::OnAddressValidationRulesLoaded( |
- const std::string& region_code, |
- bool success) { |
- // Check if an address normalization is pending. |
- auto it = pending_normalization_.find(region_code); |
- if (it != pending_normalization_.end()) { |
- for (size_t i = 0; i < it->second.size(); ++i) { |
- it->second[i]->OnRulesLoaded(success); |
- } |
- pending_normalization_.erase(it); |
- } |
-} |
- |
-} // namespace payments |