diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-04-05 17:15:33 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-04-11 07:47:18 +0000 |
commit | 7324afb043a0b1e623d8e8eb906cdc53bdeb4685 (patch) | |
tree | a3fe2d74ea9c9e142c390dac4ca0e219382ace46 /chromium/components/autofill/core/browser/country_combobox_model.cc | |
parent | 6a4cabb866f66d4128a97cdc6d9d08ce074f1247 (diff) | |
download | qtwebengine-chromium-7324afb043a0b1e623d8e8eb906cdc53bdeb4685.tar.gz |
BASELINE: Update Chromium to 58.0.3029.54
Change-Id: I67f57065a7afdc8e4614adb5c0230281428df4d1
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'chromium/components/autofill/core/browser/country_combobox_model.cc')
-rw-r--r-- | chromium/components/autofill/core/browser/country_combobox_model.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/chromium/components/autofill/core/browser/country_combobox_model.cc b/chromium/components/autofill/core/browser/country_combobox_model.cc new file mode 100644 index 00000000000..c9f8a47a217 --- /dev/null +++ b/chromium/components/autofill/core/browser/country_combobox_model.cc @@ -0,0 +1,99 @@ +// Copyright (c) 2012 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/country_combobox_model.h" + +#include <algorithm> +#include <iterator> +#include <utility> + +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "base/strings/utf_string_conversions.h" +#include "components/autofill/core/browser/autofill_country.h" +#include "components/autofill/core/browser/country_data.h" +#include "components/autofill/core/browser/personal_data_manager.h" +#include "third_party/libaddressinput/src/cpp/include/libaddressinput/address_ui.h" +#include "ui/base/l10n/l10n_util_collator.h" +#include "ui/base/models/combobox_model_observer.h" + +namespace autofill { + +CountryComboboxModel::CountryComboboxModel() {} + +CountryComboboxModel::~CountryComboboxModel() {} + +void CountryComboboxModel::SetCountries( + const PersonalDataManager& manager, + const base::Callback<bool(const std::string&)>& filter, + const std::string& app_locale) { + countries_.clear(); + + // Insert the default country at the top as well as in the ordered list. + std::string default_country_code = + manager.GetDefaultCountryCodeForNewAddress(); + DCHECK(!default_country_code.empty()); + + if (filter.is_null() || filter.Run(default_country_code)) { + countries_.push_back( + base::MakeUnique<AutofillCountry>(default_country_code, app_locale)); +#if !defined(OS_ANDROID) + // The separator item. On Android, there are separators after all items, so + // this is unnecessary. + countries_.push_back(nullptr); +#endif + } + + // The sorted list of country codes. + const std::vector<std::string>* available_countries = + &CountryDataMap::GetInstance()->country_codes(); + + // Filter out the countries that do not have rules for address input and + // validation. + const std::vector<std::string>& addressinput_countries = + ::i18n::addressinput::GetRegionCodes(); + std::vector<std::string> filtered_countries; + filtered_countries.reserve(available_countries->size()); + std::set_intersection( + available_countries->begin(), available_countries->end(), + addressinput_countries.begin(), addressinput_countries.end(), + std::back_inserter(filtered_countries)); + available_countries = &filtered_countries; + + CountryVector sorted_countries; + for (const auto& country_code : *available_countries) { + if (filter.is_null() || filter.Run(country_code)) + sorted_countries.push_back( + base::MakeUnique<AutofillCountry>(country_code, app_locale)); + } + + l10n_util::SortStringsUsingMethod(app_locale, &sorted_countries, + &AutofillCountry::name); + std::move(sorted_countries.begin(), sorted_countries.end(), + std::back_inserter(countries_)); +} + +int CountryComboboxModel::GetItemCount() const { + return countries_.size(); +} + +base::string16 CountryComboboxModel::GetItemAt(int index) { + AutofillCountry* country = countries_[index].get(); + if (country) + return countries_[index]->name(); + + // The separator item. Implemented for platforms that don't yet support + // IsItemSeparatorAt(). + return base::ASCIIToUTF16("---"); +} + +bool CountryComboboxModel::IsItemSeparatorAt(int index) { + return !countries_[index].get(); +} + +std::string CountryComboboxModel::GetDefaultCountryCode() const { + return countries_[GetDefaultIndex()]->country_code(); +} + +} // namespace autofill |