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

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

Issue 4249002: AutoFill: Fix two heuristic issues with nrm.org. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/string16.h" 9 #include "base/string16.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 // The ECML standard uses 2 letter country codes. So we will 84 // The ECML standard uses 2 letter country codes. So we will
85 // have to remember that this is an ECML form, for when we fill 85 // have to remember that this is an ECML form, for when we fill
86 // it out. 86 // it out.
87 address_field->is_ecml_ = is_ecml; 87 address_field->is_ecml_ = is_ecml;
88 88
89 // Allow address fields to appear in any order. 89 // Allow address fields to appear in any order.
90 while (true) { 90 while (true) {
91 if (ParseCompany(&q, is_ecml, address_field.get()) || 91 if (ParseCompany(&q, is_ecml, address_field.get()) ||
92 ParseAddressLines(&q, is_ecml, address_field.get()) || 92 ParseAddressLines(&q, is_ecml, address_field.get()) ||
93 ParseCity(&q, is_ecml, address_field.get()) || 93 ParseCity(&q, is_ecml, address_field.get()) ||
94 ParseState(&q, is_ecml, address_field.get()) ||
94 ParseZipCode(&q, is_ecml, address_field.get()) || 95 ParseZipCode(&q, is_ecml, address_field.get()) ||
95 ParseCountry(&q, is_ecml, address_field.get())) { 96 ParseCountry(&q, is_ecml, address_field.get())) {
96 continue; 97 continue;
97 } else if ((!address_field->state_ || address_field->state_->IsEmpty()) &&
98 address_field->ParseState(&q, is_ecml, address_field.get())) {
99 continue;
100 } else if (ParseText(&q, ASCIIToUTF16("attention|attn.")) || 98 } else if (ParseText(&q, ASCIIToUTF16("attention|attn.")) ||
101 ParseText(&q, ASCIIToUTF16("province|region|other"))) { 99 ParseText(&q, ASCIIToUTF16("province|region|other"))) {
102 // We ignore the following: 100 // We ignore the following:
103 // * Attention. 101 // * Attention.
104 // * Province/Region/Other. 102 // * Province/Region/Other.
105 continue; 103 continue;
106 } else if (*q != **iter && ParseEmpty(&q)) { 104 } else if (*q != **iter && ParseEmpty(&q)) {
107 // Ignore non-labeled fields within an address; the page 105 // Ignore non-labeled fields within an address; the page
108 // MapQuest Driving Directions North America.html contains such a field. 106 // MapQuest Driving Directions North America.html contains such a field.
109 // We only ignore such fields after we've parsed at least one other field; 107 // We only ignore such fields after we've parsed at least one other field;
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 pattern = GetEcmlPattern(kEcmlShipToCity, kEcmlBillToCity, '|'); 330 pattern = GetEcmlPattern(kEcmlShipToCity, kEcmlBillToCity, '|');
333 else 331 else
334 pattern = ASCIIToUTF16("city|town"); 332 pattern = ASCIIToUTF16("city|town");
335 333
336 if (!ParseText(iter, pattern, &address_field->city_)) 334 if (!ParseText(iter, pattern, &address_field->city_))
337 return false; 335 return false;
338 336
339 return true; 337 return true;
340 } 338 }
341 339
340 // static
342 bool AddressField::ParseState( 341 bool AddressField::ParseState(
343 std::vector<AutoFillField*>::const_iterator* iter, 342 std::vector<AutoFillField*>::const_iterator* iter,
344 bool is_ecml, AddressField* address_field) { 343 bool is_ecml, AddressField* address_field) {
344 if (address_field->state_)
Ilya Sherman 2010/11/02 15:35:08 nit: Do we not want "&& !address_field->state_->Is
James Hawkins 2010/11/02 17:32:14 No. I don't know why it was written in the first p
345 return false;
346
345 string16 pattern; 347 string16 pattern;
346 if (is_ecml) 348 if (is_ecml)
347 pattern = GetEcmlPattern(kEcmlShipToStateProv, kEcmlBillToStateProv, '|'); 349 pattern = GetEcmlPattern(kEcmlShipToStateProv, kEcmlBillToStateProv, '|');
348 else 350 else
349 pattern = ASCIIToUTF16("state|county"); 351 pattern = ASCIIToUTF16("state|county");
350 352
351 if (!ParseText(iter, pattern, &address_field->state_)) 353 if (!ParseText(iter, pattern, &address_field->state_))
352 return false; 354 return false;
353 355
354 return true; 356 return true;
(...skipping 21 matching lines...) Expand all
376 return kBillingAddress; 378 return kBillingAddress;
377 379
378 if (bill == string16::npos && ship != string16::npos) 380 if (bill == string16::npos && ship != string16::npos)
379 return kShippingAddress; 381 return kShippingAddress;
380 382
381 if (bill > ship) 383 if (bill > ship)
382 return kBillingAddress; 384 return kBillingAddress;
383 385
384 return kShippingAddress; 386 return kShippingAddress;
385 } 387 }
OLDNEW
« no previous file with comments | « chrome/browser/autofill/address_field.h ('k') | chrome/browser/autofill/address_field_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698