| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/address_field.h" | 5 #include "chrome/browser/autofill/address_field.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 if (is_ecml) { | 188 if (is_ecml) { |
| 189 pattern = GetEcmlPattern(kEcmlShipToAddress1, kEcmlBillToAddress1, '|'); | 189 pattern = GetEcmlPattern(kEcmlShipToAddress1, kEcmlBillToAddress1, '|'); |
| 190 if (!ParseField(scanner, pattern, &address_field->address1_)) | 190 if (!ParseField(scanner, pattern, &address_field->address1_)) |
| 191 return false; | 191 return false; |
| 192 } else { | 192 } else { |
| 193 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_RE); | 193 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_RE); |
| 194 string16 label_pattern = | 194 string16 label_pattern = |
| 195 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE); | 195 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE); |
| 196 | 196 |
| 197 if (!ParseField(scanner, pattern, &address_field->address1_) && | 197 if (!ParseField(scanner, pattern, &address_field->address1_) && |
| 198 !ParseFieldSpecifics(scanner, label_pattern, MATCH_LABEL, | 198 !ParseFieldSpecifics(scanner, label_pattern, MATCH_LABEL | MATCH_TEXT, |
| 199 &address_field->address1_)) { | 199 &address_field->address1_)) { |
| 200 return false; | 200 return false; |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 // Optionally parse more address lines, which may have empty labels. | 204 // Optionally parse more address lines, which may have empty labels. |
| 205 // Some pages have 3 address lines (eg SharperImageModifyAccount.html) | 205 // Some pages have 3 address lines (eg SharperImageModifyAccount.html) |
| 206 // Some pages even have 4 address lines (e.g. uk/ShoesDirect2.html)! | 206 // Some pages even have 4 address lines (e.g. uk/ShoesDirect2.html)! |
| 207 if (is_ecml) { | 207 if (is_ecml) { |
| 208 pattern = GetEcmlPattern(kEcmlShipToAddress2, kEcmlBillToAddress2, '|'); | 208 pattern = GetEcmlPattern(kEcmlShipToAddress2, kEcmlBillToAddress2, '|'); |
| 209 if (!ParseEmptyLabel(scanner, &address_field->address2_)) | 209 if (!ParseEmptyLabel(scanner, &address_field->address2_)) |
| 210 ParseField(scanner, pattern, &address_field->address2_); | 210 ParseField(scanner, pattern, &address_field->address2_); |
| 211 } else { | 211 } else { |
| 212 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_2_RE); | 212 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_2_RE); |
| 213 string16 label_pattern = | 213 string16 label_pattern = |
| 214 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE); | 214 l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_LINE_1_LABEL_RE); |
| 215 if (!ParseEmptyLabel(scanner, &address_field->address2_) && | 215 if (!ParseEmptyLabel(scanner, &address_field->address2_) && |
| 216 !ParseField(scanner, pattern, &address_field->address2_)) { | 216 !ParseField(scanner, pattern, &address_field->address2_)) { |
| 217 ParseFieldSpecifics(scanner, label_pattern, MATCH_LABEL, | 217 ParseFieldSpecifics(scanner, label_pattern, MATCH_LABEL | MATCH_TEXT, |
| 218 &address_field->address2_); | 218 &address_field->address2_); |
| 219 } | 219 } |
| 220 } | 220 } |
| 221 | 221 |
| 222 // Try for a third line, which we will promptly discard. | 222 // Try for a third line, which we will promptly discard. |
| 223 if (address_field->address2_ != NULL) { | 223 if (address_field->address2_ != NULL) { |
| 224 if (is_ecml) { | 224 if (is_ecml) { |
| 225 pattern = GetEcmlPattern(kEcmlShipToAddress3, kEcmlBillToAddress3, '|'); | 225 pattern = GetEcmlPattern(kEcmlShipToAddress3, kEcmlBillToAddress3, '|'); |
| 226 ParseField(scanner, pattern, NULL); | 226 ParseField(scanner, pattern, NULL); |
| 227 } else { | 227 } else { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 243 // Note: ECML standard uses 2 letter country code (ISO 3166) | 243 // Note: ECML standard uses 2 letter country code (ISO 3166) |
| 244 if (address_field->country_ && !address_field->country_->IsEmpty()) | 244 if (address_field->country_ && !address_field->country_->IsEmpty()) |
| 245 return false; | 245 return false; |
| 246 | 246 |
| 247 string16 pattern; | 247 string16 pattern; |
| 248 if (is_ecml) | 248 if (is_ecml) |
| 249 pattern = GetEcmlPattern(kEcmlShipToCountry, kEcmlBillToCountry, '|'); | 249 pattern = GetEcmlPattern(kEcmlShipToCountry, kEcmlBillToCountry, '|'); |
| 250 else | 250 else |
| 251 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_COUNTRY_RE); | 251 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_COUNTRY_RE); |
| 252 | 252 |
| 253 return ParseField(scanner, pattern, &address_field->country_); | 253 return ParseFieldSpecifics(scanner, pattern, MATCH_DEFAULT | MATCH_SELECT, |
| 254 &address_field->country_); |
| 254 } | 255 } |
| 255 | 256 |
| 256 // static | 257 // static |
| 257 bool AddressField::ParseZipCode(AutofillScanner* scanner, | 258 bool AddressField::ParseZipCode(AutofillScanner* scanner, |
| 258 bool is_ecml, | 259 bool is_ecml, |
| 259 AddressField* address_field) { | 260 AddressField* address_field) { |
| 260 // Parse a zip code. On some UK pages (e.g. The China Shop2.html) this | 261 // Parse a zip code. On some UK pages (e.g. The China Shop2.html) this |
| 261 // is called a "post code". | 262 // is called a "post code". |
| 262 // | 263 // |
| 263 // HACK: Just for the MapQuest driving directions page we match the | 264 // HACK: Just for the MapQuest driving directions page we match the |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 AddressField* address_field) { | 328 AddressField* address_field) { |
| 328 if (address_field->state_) | 329 if (address_field->state_) |
| 329 return false; | 330 return false; |
| 330 | 331 |
| 331 string16 pattern; | 332 string16 pattern; |
| 332 if (is_ecml) | 333 if (is_ecml) |
| 333 pattern = GetEcmlPattern(kEcmlShipToStateProv, kEcmlBillToStateProv, '|'); | 334 pattern = GetEcmlPattern(kEcmlShipToStateProv, kEcmlBillToStateProv, '|'); |
| 334 else | 335 else |
| 335 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_STATE_RE); | 336 pattern = l10n_util::GetStringUTF16(IDS_AUTOFILL_STATE_RE); |
| 336 | 337 |
| 337 return ParseField(scanner, pattern, &address_field->state_); | 338 return ParseFieldSpecifics(scanner, pattern, MATCH_DEFAULT | MATCH_SELECT, |
| 339 &address_field->state_); |
| 338 } | 340 } |
| 339 | 341 |
| 340 AddressType AddressField::AddressTypeFromText(const string16 &text) { | 342 AddressType AddressField::AddressTypeFromText(const string16 &text) { |
| 341 if (text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_SAME_AS_RE)) | 343 if (text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_SAME_AS_RE)) |
| 342 != string16::npos || | 344 != string16::npos || |
| 343 text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_USE_MY_RE)) | 345 text.find(l10n_util::GetStringUTF16(IDS_AUTOFILL_ADDRESS_TYPE_USE_MY_RE)) |
| 344 != string16::npos) | 346 != string16::npos) |
| 345 // This text could be a checkbox label such as "same as my billing | 347 // This text could be a checkbox label such as "same as my billing |
| 346 // address" or "use my shipping address". | 348 // address" or "use my shipping address". |
| 347 // ++ It would help if we generally skipped all text that appears | 349 // ++ It would help if we generally skipped all text that appears |
| (...skipping 15 matching lines...) Expand all Loading... |
| 363 return kBillingAddress; | 365 return kBillingAddress; |
| 364 | 366 |
| 365 if (bill == string16::npos && ship != string16::npos) | 367 if (bill == string16::npos && ship != string16::npos) |
| 366 return kShippingAddress; | 368 return kShippingAddress; |
| 367 | 369 |
| 368 if (bill > ship) | 370 if (bill > ship) |
| 369 return kBillingAddress; | 371 return kBillingAddress; |
| 370 | 372 |
| 371 return kShippingAddress; | 373 return kShippingAddress; |
| 372 } | 374 } |
| OLD | NEW |