| // Copyright 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 "chrome/browser/ui/autofill/autofill_dialog_models.h" | 
 |  | 
 | #include "base/strings/string16.h" | 
 | #include "base/strings/stringprintf.h" | 
 | #include "base/strings/utf_string_conversions.h" | 
 | #include "base/time/time.h" | 
 | #include "chrome/grit/generated_resources.h" | 
 | #include "components/autofill/core/common/autofill_clock.h" | 
 | #include "ui/base/l10n/l10n_util.h" | 
 |  | 
 | namespace autofill { | 
 |  | 
 | namespace { | 
 |  | 
 | // Number of years to be shown in the year combobox, including the current year. | 
 | // YearComboboxModel has the option of passing an additional year if not | 
 | // contained within the initial range. | 
 | const int kNumberOfExpirationYears = 10; | 
 |  | 
 | // Returns the items that are in the expiration year dropdown. If | 
 | // |additional_year| is not 0 and not within the normal range, it will be added | 
 | // accordingly. | 
 | std::vector<base::string16> GetExpirationYearItems(int additional_year) { | 
 |   std::vector<base::string16> years; | 
 |   // Add the "Year" placeholder item. | 
 |   years.push_back( | 
 |       l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_YEAR)); | 
 |  | 
 |   base::Time::Exploded now_exploded; | 
 |   AutofillClock::Now().LocalExplode(&now_exploded); | 
 |  | 
 |   if (additional_year != 0 && additional_year < now_exploded.year) | 
 |     years.push_back(base::UTF8ToUTF16(std::to_string(additional_year))); | 
 |  | 
 |   for (int i = 0; i < kNumberOfExpirationYears; i++) | 
 |     years.push_back(base::UTF8ToUTF16(std::to_string(now_exploded.year + i))); | 
 |  | 
 |   if (additional_year != 0 && | 
 |       additional_year >= now_exploded.year + kNumberOfExpirationYears) { | 
 |     years.push_back(base::UTF8ToUTF16(std::to_string(additional_year))); | 
 |   } | 
 |  | 
 |   return years; | 
 | } | 
 |  | 
 | // Formats a month, zero-padded (e.g. "02"). | 
 | base::string16 FormatMonth(int month) { | 
 |   return base::ASCIIToUTF16(base::StringPrintf("%.2d", month)); | 
 | } | 
 |  | 
 | }  // namespace | 
 |  | 
 | // MonthComboboxModel ---------------------------------------------------------- | 
 |  | 
 | MonthComboboxModel::MonthComboboxModel() {} | 
 |  | 
 | MonthComboboxModel::~MonthComboboxModel() {} | 
 |  | 
 | int MonthComboboxModel::GetItemCount() const { | 
 |   // 12 months plus the empty entry. | 
 |   return 13; | 
 | } | 
 |  | 
 | base::string16 MonthComboboxModel::GetItemAt(int index) { | 
 |   return index == 0 ? | 
 |       l10n_util::GetStringUTF16(IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_MONTH) : | 
 |       FormatMonth(index); | 
 | } | 
 |  | 
 | // YearComboboxModel ----------------------------------------------------------- | 
 |  | 
 | YearComboboxModel::YearComboboxModel(int additional_year) | 
 |     : ui::SimpleComboboxModel(GetExpirationYearItems(additional_year)) {} | 
 |  | 
 | YearComboboxModel::~YearComboboxModel() {} | 
 |  | 
 | }  // namespace autofill |