| 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/autofill/form_structure.h" | 5 #include "chrome/browser/autofill/form_structure.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/sha1.h" | 9 #include "base/sha1.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 // Obtain the XML structure as a string. | 187 // Obtain the XML structure as a string. |
| 188 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; | 188 *encoded_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; |
| 189 *encoded_xml += autofil_request_xml.Str().c_str(); | 189 *encoded_xml += autofil_request_xml.Str().c_str(); |
| 190 | 190 |
| 191 return true; | 191 return true; |
| 192 } | 192 } |
| 193 | 193 |
| 194 // static | 194 // static |
| 195 void FormStructure::ParseQueryResponse(const std::string& response_xml, | 195 void FormStructure::ParseQueryResponse(const std::string& response_xml, |
| 196 const std::vector<FormStructure*>& forms, | 196 const std::vector<FormStructure*>& forms, |
| 197 UploadRequired* upload_required) { | 197 UploadRequired* upload_required, |
| 198 autofill_metrics::LogServerQueryMetric( | 198 const AutoFillMetrics& metric_logger) { |
| 199 autofill_metrics::QUERY_RESPONSE_RECEIVED); | 199 metric_logger.Log(AutoFillMetrics::QUERY_RESPONSE_RECEIVED); |
| 200 | 200 |
| 201 // Parse the field types from the server response to the query. | 201 // Parse the field types from the server response to the query. |
| 202 std::vector<AutoFillFieldType> field_types; | 202 std::vector<AutoFillFieldType> field_types; |
| 203 AutoFillQueryXmlParser parse_handler(&field_types, upload_required); | 203 AutoFillQueryXmlParser parse_handler(&field_types, upload_required); |
| 204 buzz::XmlParser parser(&parse_handler); | 204 buzz::XmlParser parser(&parse_handler); |
| 205 parser.Parse(response_xml.c_str(), response_xml.length(), true); | 205 parser.Parse(response_xml.c_str(), response_xml.length(), true); |
| 206 if (!parse_handler.succeeded()) | 206 if (!parse_handler.succeeded()) |
| 207 return; | 207 return; |
| 208 | 208 |
| 209 autofill_metrics::LogServerQueryMetric( | 209 metric_logger.Log(AutoFillMetrics::QUERY_RESPONSE_PARSED); |
| 210 autofill_metrics::QUERY_RESPONSE_PARSED); | |
| 211 | 210 |
| 212 bool heuristics_detected_fillable_field = false; | 211 bool heuristics_detected_fillable_field = false; |
| 213 bool query_response_overrode_heuristics = false; | 212 bool query_response_overrode_heuristics = false; |
| 214 | 213 |
| 215 // Copy the field types into the actual form. | 214 // Copy the field types into the actual form. |
| 216 std::vector<AutoFillFieldType>::iterator current_type = field_types.begin(); | 215 std::vector<AutoFillFieldType>::iterator current_type = field_types.begin(); |
| 217 for (std::vector<FormStructure*>::const_iterator iter = forms.begin(); | 216 for (std::vector<FormStructure*>::const_iterator iter = forms.begin(); |
| 218 iter != forms.end(); ++iter) { | 217 iter != forms.end(); ++iter) { |
| 219 FormStructure* form = *iter; | 218 FormStructure* form = *iter; |
| 220 | 219 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 243 AutoFillType autofill_type((*field)->type()); | 242 AutoFillType autofill_type((*field)->type()); |
| 244 if (autofill_type.group() == AutoFillType::CREDIT_CARD) | 243 if (autofill_type.group() == AutoFillType::CREDIT_CARD) |
| 245 form->has_credit_card_field_ = true; | 244 form->has_credit_card_field_ = true; |
| 246 if (autofill_type.field_type() != UNKNOWN_TYPE) | 245 if (autofill_type.field_type() != UNKNOWN_TYPE) |
| 247 form->has_autofillable_field_ = true; | 246 form->has_autofillable_field_ = true; |
| 248 } | 247 } |
| 249 | 248 |
| 250 form->UpdateAutoFillCount(); | 249 form->UpdateAutoFillCount(); |
| 251 } | 250 } |
| 252 | 251 |
| 253 autofill_metrics::ServerQueryMetricType metric_type; | 252 AutoFillMetrics::ServerQueryMetric metric; |
| 254 if (query_response_overrode_heuristics) { | 253 if (query_response_overrode_heuristics) { |
| 255 if (heuristics_detected_fillable_field) { | 254 if (heuristics_detected_fillable_field) { |
| 256 metric_type = autofill_metrics::QUERY_RESPONSE_OVERRODE_LOCAL_HEURISTICS; | 255 metric = AutoFillMetrics::QUERY_RESPONSE_OVERRODE_LOCAL_HEURISTICS; |
| 257 } else { | 256 } else { |
| 258 metric_type = autofill_metrics::QUERY_RESPONSE_WITH_NO_LOCAL_HEURISTICS; | 257 metric = AutoFillMetrics::QUERY_RESPONSE_WITH_NO_LOCAL_HEURISTICS; |
| 259 } | 258 } |
| 260 } else { | 259 } else { |
| 261 metric_type = autofill_metrics::QUERY_RESPONSE_MATCHED_LOCAL_HEURISTICS; | 260 metric = AutoFillMetrics::QUERY_RESPONSE_MATCHED_LOCAL_HEURISTICS; |
| 262 } | 261 } |
| 263 autofill_metrics::LogServerQueryMetric(metric_type); | 262 metric_logger.Log(metric); |
| 264 } | 263 } |
| 265 | 264 |
| 266 std::string FormStructure::FormSignature() const { | 265 std::string FormStructure::FormSignature() const { |
| 267 std::string form_string = target_url_.scheme() + | 266 std::string form_string = target_url_.scheme() + |
| 268 "://" + | 267 "://" + |
| 269 target_url_.host() + | 268 target_url_.host() + |
| 270 "&" + | 269 "&" + |
| 271 UTF16ToUTF8(form_name_) + | 270 UTF16ToUTF8(form_name_) + |
| 272 form_signature_field_names_; | 271 form_signature_field_names_; |
| 273 | 272 |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 } else { | 424 } else { |
| 426 buzz::XmlElement *field_element = new buzz::XmlElement( | 425 buzz::XmlElement *field_element = new buzz::XmlElement( |
| 427 buzz::QName(kXMLElementField)); | 426 buzz::QName(kXMLElementField)); |
| 428 field_element->SetAttr(buzz::QName(kAttributeSignature), | 427 field_element->SetAttr(buzz::QName(kAttributeSignature), |
| 429 field->FieldSignature()); | 428 field->FieldSignature()); |
| 430 encompassing_xml_element->AddElement(field_element); | 429 encompassing_xml_element->AddElement(field_element); |
| 431 } | 430 } |
| 432 } | 431 } |
| 433 return true; | 432 return true; |
| 434 } | 433 } |
| OLD | NEW |