| OLD | NEW |
| 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/autocomplete_history_manager.h" | 5 #include "chrome/browser/autocomplete_history_manager.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/string16.h" | 9 #include "base/string16.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 // Limit on the number of suggestions to appear in the pop-up menu under an | 24 // Limit on the number of suggestions to appear in the pop-up menu under an |
| 25 // text input element in a form. | 25 // text input element in a form. |
| 26 const int kMaxAutocompleteMenuItems = 6; | 26 const int kMaxAutocompleteMenuItems = 6; |
| 27 | 27 |
| 28 // The separator characters for SSNs. | 28 // The separator characters for SSNs. |
| 29 const string16 kSSNSeparators = ASCIIToUTF16(" -"); | 29 const string16 kSSNSeparators = ASCIIToUTF16(" -"); |
| 30 | 30 |
| 31 bool IsSSN(const string16& text) { | 31 bool IsSSN(const string16& text) { |
| 32 string16 number_string; | 32 string16 number_string; |
| 33 RemoveChars(text, kSSNSeparators.c_str(), &number_string); | 33 RemoveChars(text, kSSNSeparators.c_str(), &number_string); |
| 34 if (number_string.length() != 9 || !IsStringASCII(number_string)) | |
| 35 return false; | |
| 36 | 34 |
| 37 // A SSN is of the form AAA-GG-SSSS (A = area number, G = group number, S = | 35 // A SSN is of the form AAA-GG-SSSS (A = area number, G = group number, S = |
| 38 // serial number). The validation we do here is simply checking if the area, | 36 // serial number). The validation we do here is simply checking if the area, |
| 39 // group, and serial numbers are valid. It is possible to check if the group | 37 // group, and serial numbers are valid. It is possible to check if the group |
| 40 // number is valid for the given area, but that data changes all the time. | 38 // number is valid for the given area, but that data changes all the time. |
| 41 // | 39 // |
| 42 // See: http://www.socialsecurity.gov/history/ssn/geocard.html | 40 // See: http://www.socialsecurity.gov/history/ssn/geocard.html |
| 43 // http://www.socialsecurity.gov/employer/stateweb.htm | 41 // http://www.socialsecurity.gov/employer/stateweb.htm |
| 44 // http://www.socialsecurity.gov/employer/ssnvhighgroup.htm | 42 // http://www.socialsecurity.gov/employer/ssnvhighgroup.htm |
| 45 | 43 if (number_string.length() != 9 || !IsStringASCII(number_string)) |
| 46 string16 area_string = number_string.substr(0, 3); | 44 return false; |
| 47 string16 group_string = number_string.substr(3, 2); | |
| 48 string16 serial_string = number_string.substr(5, 4); | |
| 49 | 45 |
| 50 int area; | 46 int area; |
| 51 if (!base::StringToInt(area_string, &area)) | 47 if (!base::StringToInt(number_string.begin(), |
| 48 number_string.begin() + 3, |
| 49 &area)) |
| 52 return false; | 50 return false; |
| 53 if (area < 1 || | 51 if (area < 1 || |
| 54 area == 666 || | 52 area == 666 || |
| 55 (area > 733 && area < 750) || | 53 (area > 733 && area < 750) || |
| 56 area > 772) | 54 area > 772) |
| 57 return false; | 55 return false; |
| 58 | 56 |
| 59 int group; | 57 int group; |
| 60 if (!base::StringToInt(group_string, &group) || group == 0) | 58 if (!base::StringToInt(number_string.begin() + 3, |
| 59 number_string.begin() + 5, |
| 60 &group) || group == 0) |
| 61 return false; | 61 return false; |
| 62 | 62 |
| 63 int serial; | 63 int serial; |
| 64 if (!base::StringToInt(serial_string, &serial) || serial == 0) | 64 if (!base::StringToInt(number_string.begin() + 5, |
| 65 number_string.begin() + 9, |
| 66 &serial) || serial == 0) |
| 65 return false; | 67 return false; |
| 66 | 68 |
| 67 return true; | 69 return true; |
| 68 } | 70 } |
| 69 | 71 |
| 70 } // namespace | 72 } // namespace |
| 71 | 73 |
| 72 AutocompleteHistoryManager::AutocompleteHistoryManager( | 74 AutocompleteHistoryManager::AutocompleteHistoryManager( |
| 73 TabContents* tab_contents) : tab_contents_(tab_contents), | 75 TabContents* tab_contents) : tab_contents_(tab_contents), |
| 74 pending_query_handle_(0), | 76 pending_query_handle_(0), |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 DCHECK(result->GetType() == AUTOFILL_VALUE_RESULT); | 187 DCHECK(result->GetType() == AUTOFILL_VALUE_RESULT); |
| 186 const WDResult<std::vector<string16> >* autofill_result = | 188 const WDResult<std::vector<string16> >* autofill_result = |
| 187 static_cast<const WDResult<std::vector<string16> >*>(result); | 189 static_cast<const WDResult<std::vector<string16> >*>(result); |
| 188 host->AutocompleteSuggestionsReturned( | 190 host->AutocompleteSuggestionsReturned( |
| 189 query_id_, autofill_result->GetValue()); | 191 query_id_, autofill_result->GetValue()); |
| 190 } else { | 192 } else { |
| 191 host->AutocompleteSuggestionsReturned( | 193 host->AutocompleteSuggestionsReturned( |
| 192 query_id_, std::vector<string16>()); | 194 query_id_, std::vector<string16>()); |
| 193 } | 195 } |
| 194 } | 196 } |
| OLD | NEW |