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 |