OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/autofill/core/browser/address_field.h" | 5 #include "components/autofill/core/browser/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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 begin_trailing_non_labeled_fields = cursor; | 64 begin_trailing_non_labeled_fields = cursor; |
65 } | 65 } |
66 | 66 |
67 continue; | 67 continue; |
68 } else { | 68 } else { |
69 // No field found. | 69 // No field found. |
70 break; | 70 break; |
71 } | 71 } |
72 } | 72 } |
73 | 73 |
74 // If we have identified any address fields in this field then it should be | 74 // If we have identified any non-street address fields in this field then it |
75 // added to the list of fields. | 75 // should be added to the list of fields. We skip over the case of just having |
76 if (address_field->company_ || | 76 // the street address by itself, because it is way too easy to have a field |
77 address_field->address1_ || | 77 // with the word "address" in it getting parsed as a street address. |
78 address_field->address2_ || | 78 // See http://crbug.com/447332 |
79 address_field->address3_ || | 79 bool has_valid_non_street_address_field = (address_field->company_ || |
Evan Stade
2015/01/15 04:11:37
nit: I think we should require at least three reco
Evan Stade
2015/01/15 04:12:23
also, as this code is written, wouldn't the bug st
| |
80 address_field->street_address_ || | 80 address_field->city_ || |
81 address_field->city_ || | 81 address_field->state_ || |
82 address_field->state_ || | 82 address_field->zip_ || |
83 address_field->zip_ || | 83 address_field->zip4_ || |
84 address_field->zip4_ || | 84 address_field->country_); |
85 address_field->country_) { | 85 if (has_valid_non_street_address_field) { |
86 // Don't slurp non-labeled fields at the end into the address. | 86 // Don't slurp non-labeled fields at the end into the address. |
87 if (has_trailing_non_labeled_fields) | 87 if (has_trailing_non_labeled_fields) |
88 scanner->RewindTo(begin_trailing_non_labeled_fields); | 88 scanner->RewindTo(begin_trailing_non_labeled_fields); |
89 | 89 |
90 return address_field.Pass(); | 90 return address_field.Pass(); |
91 } | 91 } |
92 | 92 |
93 scanner->RewindTo(saved_cursor); | 93 scanner->RewindTo(saved_cursor); |
94 return NULL; | 94 return NULL; |
95 } | 95 } |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
247 if (state_) | 247 if (state_) |
248 return false; | 248 return false; |
249 | 249 |
250 return ParseFieldSpecifics(scanner, | 250 return ParseFieldSpecifics(scanner, |
251 UTF8ToUTF16(kStateRe), | 251 UTF8ToUTF16(kStateRe), |
252 MATCH_DEFAULT | MATCH_SELECT, | 252 MATCH_DEFAULT | MATCH_SELECT, |
253 &state_); | 253 &state_); |
254 } | 254 } |
255 | 255 |
256 } // namespace autofill | 256 } // namespace autofill |
OLD | NEW |