Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4141)

Unified Diff: chrome/browser/autofill/credit_card_field.cc

Issue 6033010: Support autocompletion for HTMl5 tags:"email", "month" and "tel". (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Add more tests, fix some format errors and change parsing. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autofill/credit_card_field.cc
diff --git a/chrome/browser/autofill/credit_card_field.cc b/chrome/browser/autofill/credit_card_field.cc
index f8b4c5e210a81fae47c0ab965321bdccd0ff1c4b..af125cad19a0442ee7420604c0c094269ecfba36 100644
--- a/chrome/browser/autofill/credit_card_field.cc
+++ b/chrome/browser/autofill/credit_card_field.cc
@@ -115,35 +115,42 @@ CreditCardField* CreditCardField::Parse(
&credit_card_field->number_))
continue;
- // "Expiration date" is the most common label here, but some pages have
- // "Expires", "exp. date" or "exp. month" and "exp. year". We also look for
- // the field names ccmonth and ccyear, which appear on at least 4 of our
- // test pages.
- //
- // -> On at least one page (The China Shop2.html) we find only the labels
- // "month" and "year". So for now we match these words directly; we'll
- // see if this turns out to be too general.
- //
- // Toolbar Bug 51451: indeed, simply matching "month" is too general for
- // https://rps.fidelity.com/ftgw/rps/RtlCust/CreatePIN/Init.
- // Instead, we match only words beginning with "month".
- if (is_ecml)
- pattern = GetEcmlPattern(kEcmlCardExpireMonth);
- else
- pattern = ASCIIToUTF16("expir|exp.*month|exp date|ccmonth");
-
- if ((!credit_card_field->expiration_month_ ||
- credit_card_field->expiration_month_->IsEmpty()) &&
- ParseText(&q, pattern, &credit_card_field->expiration_month_)) {
+ if ((*q) && LowerCaseEqualsASCII((*q)->form_control_type(), "month")) {
dhollowa 2011/01/07 03:47:15 This is looking good. However, I tried it against
honten.org 2011/01/07 04:05:59 I can't see your full example. Did you put your ex
+ credit_card_field->expiration_month_ = *q++;
+ } else {
+ // "Expiration date" is the most common label here, but some pages have
+ // "Expires", "exp. date" or "exp. month" and "exp. year". We also look
+ // for the field names ccmonth and ccyear, which appear on at least 4 of
+ // our test pages.
+ //
+ // -> On at least one page (The China Shop2.html) we find only the labels
+ // "month" and "year". So for now we match these words directly; we'll
+ // see if this turns out to be too general.
+ //
+ // Toolbar Bug 51451: indeed, simply matching "month" is too general for
+ // https://rps.fidelity.com/ftgw/rps/RtlCust/CreatePIN/Init.
+ // Instead, we match only words beginning with "month".
if (is_ecml)
- pattern = GetEcmlPattern(kEcmlCardExpireYear);
+ pattern = GetEcmlPattern(kEcmlCardExpireMonth);
else
- pattern = ASCIIToUTF16("|exp|^/|ccyear|year");
+ pattern = ASCIIToUTF16("expir|exp.*month|exp date|ccmonth");
- if (!ParseText(&q, pattern, &credit_card_field->expiration_year_))
- return NULL;
+ if ((!credit_card_field->expiration_month_ ||
+ credit_card_field->expiration_month_->IsEmpty()) &&
+ ParseText(&q, pattern, &credit_card_field->expiration_month_)) {
- continue;
+ // If type="month", year is included into the expiration_month_.
dhollowa 2011/01/07 03:47:15 This comment can be removed now.
+ // So we don't need another year input field.
+ if (is_ecml)
+ pattern = GetEcmlPattern(kEcmlCardExpireYear);
+ else
+ pattern = ASCIIToUTF16("|exp|^/|ccyear|year");
+
+ if (!ParseText(&q, pattern, &credit_card_field->expiration_year_)) {
+ return NULL;
+ }
Ilya Sherman 2011/01/07 07:28:28 nit: This is a one-line if-stmt, so no need for br
+ continue;
+ }
}
if (ParseText(&q, GetEcmlPattern(kEcmlCardExpireDay)))
@@ -177,7 +184,10 @@ CreditCardField* CreditCardField::Parse(
// the cvc and date were found independently they are returned.
if ((credit_card_field->number_ || credit_card_field->verification_) &&
credit_card_field->expiration_month_ &&
- credit_card_field->expiration_year_) {
+ (credit_card_field->expiration_year_ ||
+ (LowerCaseEqualsASCII(
+ credit_card_field->expiration_month_->form_control_type(),
+ "month")))) {
*iter = q;
return credit_card_field.release();
}

Powered by Google App Engine
This is Rietveld 408576698