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/autofill_manager.h" | 5 #include "components/autofill/core/browser/autofill_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 #include <map> | 10 #include <map> |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 // The rate for positive/negative matches potentially could be different. | 60 // The rate for positive/negative matches potentially could be different. |
61 const double kAutofillPositiveUploadRateDefaultValue = 0.20; | 61 const double kAutofillPositiveUploadRateDefaultValue = 0.20; |
62 const double kAutofillNegativeUploadRateDefaultValue = 0.20; | 62 const double kAutofillNegativeUploadRateDefaultValue = 0.20; |
63 | 63 |
64 const size_t kMaxRecentFormSignaturesToRemember = 3; | 64 const size_t kMaxRecentFormSignaturesToRemember = 3; |
65 | 65 |
66 // Set a conservative upper bound on the number of forms we are willing to | 66 // Set a conservative upper bound on the number of forms we are willing to |
67 // cache, simply to prevent unbounded memory consumption. | 67 // cache, simply to prevent unbounded memory consumption. |
68 const size_t kMaxFormCacheSize = 100; | 68 const size_t kMaxFormCacheSize = 100; |
69 | 69 |
70 // Removes duplicate suggestions whilst preserving their original order. | |
71 void RemoveDuplicateSuggestions(std::vector<Suggestion>* suggestions) { | |
72 std::set<std::pair<base::string16, base::string16>> seen_suggestions; | |
73 | |
74 for (int i = 0; i < static_cast<int>(suggestions->size()); ++i) { | |
75 if (!seen_suggestions.insert(std::make_pair( | |
76 (*suggestions)[i].value, (*suggestions)[i].label)).second) { | |
77 // Duplicate found, delete it. | |
78 suggestions->erase(suggestions->begin() + i); | |
79 i--; | |
80 } | |
81 } | |
82 } | |
83 | |
84 // Precondition: |form_structure| and |form| should correspond to the same | 70 // Precondition: |form_structure| and |form| should correspond to the same |
85 // logical form. Returns true if any field in the given |section| within |form| | 71 // logical form. Returns true if any field in the given |section| within |form| |
86 // is auto-filled. | 72 // is auto-filled. |
87 bool SectionIsAutofilled(const FormStructure& form_structure, | 73 bool SectionIsAutofilled(const FormStructure& form_structure, |
88 const FormData& form, | 74 const FormData& form, |
89 const std::string& section) { | 75 const std::string& section) { |
90 DCHECK_EQ(form_structure.field_count(), form.fields.size()); | 76 DCHECK_EQ(form_structure.field_count(), form.fields.size()); |
91 for (size_t i = 0; i < form_structure.field_count(); ++i) { | 77 for (size_t i = 0; i < form_structure.field_count(); ++i) { |
92 if (form_structure.field(i)->section() == section && | 78 if (form_structure.field(i)->section() == section && |
93 form.fields[i].is_autofilled) { | 79 form.fields[i].is_autofilled) { |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 // If the relevant section is auto-filled and the renderer is querying | 513 // If the relevant section is auto-filled and the renderer is querying |
528 // for suggestions, then the user is editing the value of a field. | 514 // for suggestions, then the user is editing the value of a field. |
529 // In this case, mimic autocomplete: don't display labels or icons, | 515 // In this case, mimic autocomplete: don't display labels or icons, |
530 // as that information is redundant. | 516 // as that information is redundant. |
531 for (size_t i = 0; i < suggestions.size(); i++) { | 517 for (size_t i = 0; i < suggestions.size(); i++) { |
532 suggestions[i].label = base::string16(); | 518 suggestions[i].label = base::string16(); |
533 suggestions[i].icon = base::string16(); | 519 suggestions[i].icon = base::string16(); |
534 } | 520 } |
535 } | 521 } |
536 | 522 |
537 // When filling credit card suggestions, the values and labels are | |
538 // typically obfuscated, which makes detecting duplicates hard. Since | |
539 // duplicates only tend to be a problem when filling address forms | |
540 // anyway, only don't de-dup credit card suggestions. | |
541 if (!is_filling_credit_card) | |
542 RemoveDuplicateSuggestions(&suggestions); | |
543 | |
544 // The first time we show suggestions on this page, log the number of | 523 // The first time we show suggestions on this page, log the number of |
545 // suggestions available. | 524 // suggestions available. |
546 // TODO(mathp): Differentiate between number of suggestions available | 525 // TODO(mathp): Differentiate between number of suggestions available |
547 // (current metric) and number shown to the user. | 526 // (current metric) and number shown to the user. |
548 if (!has_logged_address_suggestions_count_ && !section_is_autofilled) { | 527 if (!has_logged_address_suggestions_count_ && !section_is_autofilled) { |
549 AutofillMetrics::LogAddressSuggestionsCount(suggestions.size()); | 528 AutofillMetrics::LogAddressSuggestionsCount(suggestions.size()); |
550 has_logged_address_suggestions_count_ = true; | 529 has_logged_address_suggestions_count_ = true; |
551 } | 530 } |
552 } | 531 } |
553 } | 532 } |
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1463 return false; | 1442 return false; |
1464 | 1443 |
1465 // Disregard forms that we wouldn't ever autofill in the first place. | 1444 // Disregard forms that we wouldn't ever autofill in the first place. |
1466 if (!form.ShouldBeParsed()) | 1445 if (!form.ShouldBeParsed()) |
1467 return false; | 1446 return false; |
1468 | 1447 |
1469 return true; | 1448 return true; |
1470 } | 1449 } |
1471 | 1450 |
1472 } // namespace autofill | 1451 } // namespace autofill |
OLD | NEW |