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

Side by Side Diff: chrome/browser/autofill/phone_field.cc

Issue 6026010: Autofill heuristics regular expressions should be stored in external data files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nits Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/autofill/name_field.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/autofill/phone_field.h" 5 #include "chrome/browser/autofill/phone_field.h"
6 6
7 #include "app/l10n_util.h"
7 #include "base/logging.h" 8 #include "base/logging.h"
8 #include "base/scoped_ptr.h" 9 #include "base/scoped_ptr.h"
9 #include "base/string16.h" 10 #include "base/string16.h"
10 #include "base/string_util.h" 11 #include "base/string_util.h"
11 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
12 #include "chrome/browser/autofill/autofill_field.h" 13 #include "chrome/browser/autofill/autofill_field.h"
14 #include "grit/autofill_resources.h"
13 15
14 // static 16 // static
15 PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter, 17 PhoneField* PhoneField::Parse(std::vector<AutoFillField*>::const_iterator* iter,
16 bool is_ecml) { 18 bool is_ecml) {
17 DCHECK(iter); 19 DCHECK(iter);
18 if (!iter) 20 if (!iter)
19 return NULL; 21 return NULL;
20 22
21 if (is_ecml) 23 if (is_ecml)
22 return ParseECML(iter); 24 return ParseECML(iter);
23 25
24 std::vector<AutoFillField*>::const_iterator q = *iter; 26 std::vector<AutoFillField*>::const_iterator q = *iter;
25 AutoFillField* phone = NULL; 27 AutoFillField* phone = NULL;
26 AutoFillField* phone2 = NULL; 28 AutoFillField* phone2 = NULL;
27 AutoFillField* phone3 = NULL; 29 AutoFillField* phone3 = NULL;
28 bool area_code; // true if we've parsed an area code field. 30 bool area_code; // true if we've parsed an area code field.
29 31
30 // Some pages, such as BloomingdalesShipping.html, have a field labeled 32 // Some pages, such as BloomingdalesShipping.html, have a field labeled
31 // "Area Code and Phone"; we want to parse this as a phone number field so 33 // "Area Code and Phone"; we want to parse this as a phone number field so
32 // we look for "phone" before we look for "area code". 34 // we look for "phone" before we look for "area code".
33 if (ParseText(&q, ASCIIToUTF16("phone"), &phone)) { 35 if (ParseText(&q, l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_RE), &phone)) {
34 area_code = false; 36 area_code = false;
35 } else { 37 } else {
36 if (!ParseText(&q, ASCIIToUTF16("area code"), &phone)) 38 if (!ParseText(&q,
39 l10n_util::GetStringUTF16(IDS_AUTOFILL_AREA_CODE_RE),
40 &phone))
37 return NULL; 41 return NULL;
38 area_code = true; 42 area_code = true;
39 ParseText(&q, ASCIIToUTF16("phone"), &phone2); 43 ParseText(&q, l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_RE), &phone2);
40 } 44 }
41 45
42 // Sometimes phone number fields are separated by "-" (e.g. test page 46 // Sometimes phone number fields are separated by "-" (e.g. test page
43 // Crate and Barrel Check Out.html). Also, area codes are sometimes 47 // Crate and Barrel Check Out.html). Also, area codes are sometimes
44 // surrounded by parentheses, so a ")" may appear after the area code field. 48 // surrounded by parentheses, so a ")" may appear after the area code field.
45 // 49 //
46 // We used to match "tel" here, which we've seen in field names (e.g. on 50 // We used to match "tel" here, which we've seen in field names (e.g. on
47 // Newegg2.html), but that's too general: some pages (e.g. 51 // Newegg2.html), but that's too general: some pages (e.g.
48 // uk/Furniture123-1.html) have several phone numbers in succession and we 52 // uk/Furniture123-1.html) have several phone numbers in succession and we
49 // don't want those to be parsed as components of a single phone number. 53 // don't want those to be parsed as components of a single phone number.
50 if (phone2 == NULL) 54 if (phone2 == NULL)
51 ParseText(&q, ASCIIToUTF16("^-$|\\)$|prefix"), &phone2); 55 ParseText(&q,
56 l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_PREFIX_RE),
57 &phone2);
52 58
53 // Look for a third text box. 59 // Look for a third text box.
54 if (phone2) 60 if (phone2)
55 ParseText(&q, ASCIIToUTF16("^-$|suffix"), &phone3); 61 ParseText(&q,
62 l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_SUFFIX_RE),
63 &phone3);
56 64
57 // Now we have one, two, or three phone number text fields. Package them 65 // Now we have one, two, or three phone number text fields. Package them
58 // up into a PhoneField object. 66 // up into a PhoneField object.
59 67
60 scoped_ptr<PhoneField> phone_field(new PhoneField); 68 scoped_ptr<PhoneField> phone_field(new PhoneField);
61 if (phone2 == NULL) { // only one field 69 if (phone2 == NULL) { // only one field
62 if (area_code) // it's an area code 70 if (area_code) // it's an area code
63 return NULL; // doesn't make sense 71 return NULL; // doesn't make sense
64 phone_field->phone_ = phone; 72 phone_field->phone_ = phone;
65 } else { 73 } else {
66 phone_field->area_code_ = phone; 74 phone_field->area_code_ = phone;
67 if (phone3 == NULL) { // two fields 75 if (phone3 == NULL) { // two fields
68 phone_field->phone_ = phone2; 76 phone_field->phone_ = phone2;
69 } else { // three boxes: area code, prefix and suffix 77 } else { // three boxes: area code, prefix and suffix
70 phone_field->prefix_ = phone2; 78 phone_field->prefix_ = phone2;
71 phone_field->phone_ = phone3; 79 phone_field->phone_ = phone3;
72 } 80 }
73 } 81 }
74 82
75 // Now look for an extension. 83 // Now look for an extension.
76 ParseText(&q, ASCIIToUTF16("ext"), &phone_field->extension_); 84 ParseText(&q,
85 l10n_util::GetStringUTF16(IDS_AUTOFILL_PHONE_EXTENSION_RE),
86 &phone_field->extension_);
77 87
78 *iter = q; 88 *iter = q;
79 return phone_field.release(); 89 return phone_field.release();
80 } 90 }
81 91
82 // static 92 // static
83 PhoneField* PhoneField::ParseECML( 93 PhoneField* PhoneField::ParseECML(
84 std::vector<AutoFillField*>::const_iterator* iter) { 94 std::vector<AutoFillField*>::const_iterator* iter) {
85 string16 pattern(GetEcmlPattern(kEcmlShipToPhone, kEcmlBillToPhone, '|')); 95 string16 pattern(GetEcmlPattern(kEcmlShipToPhone, kEcmlBillToPhone, '|'));
86 96
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 135
126 return ok; 136 return ok;
127 } 137 }
128 138
129 PhoneField::PhoneField() 139 PhoneField::PhoneField()
130 : phone_(NULL), 140 : phone_(NULL),
131 area_code_(NULL), 141 area_code_(NULL),
132 prefix_(NULL), 142 prefix_(NULL),
133 extension_(NULL) { 143 extension_(NULL) {
134 } 144 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/name_field.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698