1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_field.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/sha1.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic std::string Hash32Bit(const std::string& str) { 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string hash_bin = base::SHA1HashString(str); 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK_EQ(20U, hash_bin.length()); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint32 hash32 = ((hash_bin[0] & 0xFF) << 24) | 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ((hash_bin[1] & 0xFF) << 16) | 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ((hash_bin[2] & 0xFF) << 8) | 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (hash_bin[3] & 0xFF); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return base::UintToString(hash32); 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenAutofillField::AutofillField() 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : server_type_(NO_SERVER_DATA), 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch heuristic_type_(UNKNOWN_TYPE) { 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenAutofillField::AutofillField(const webkit_glue::FormField& field, 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& unique_name) 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : webkit_glue::FormField(field), 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch unique_name_(unique_name), 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch server_type_(NO_SERVER_DATA), 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch heuristic_type_(UNKNOWN_TYPE) { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenAutofillField::~AutofillField() {} 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid AutofillField::set_heuristic_type(AutofillFieldType type) { 4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (type >= 0 && type < MAX_VALID_FIELD_TYPE) { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch heuristic_type_ = type; 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } else { 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NOTREACHED(); 4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // This case should not be reachable; but since this has potential 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // implications on data uploaded to the server, better safe than sorry. 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch heuristic_type_ = UNKNOWN_TYPE; 5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenAutofillFieldType AutofillField::type() const { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (server_type_ != NO_SERVER_DATA) 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return server_type_; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return heuristic_type_; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool AutofillField::IsEmpty() const { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return value.empty(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstd::string AutofillField::FieldSignature() const { 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string field_name = UTF16ToUTF8(name); 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string type = UTF16ToUTF8(form_control_type); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string field_string = field_name + "&" + type; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return Hash32Bit(field_string); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenbool AutofillField::IsFieldFillable() const { 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return type() != UNKNOWN_TYPE; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 75