| 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/form_structure.h" | 5 #include "components/autofill/core/browser/form_structure.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 std::ostream& operator<<( | 283 std::ostream& operator<<( |
| 284 std::ostream& out, | 284 std::ostream& out, |
| 285 const autofill::AutofillQueryResponseContents& response) { | 285 const autofill::AutofillQueryResponseContents& response) { |
| 286 out << "upload_required: " << response.upload_required(); | 286 out << "upload_required: " << response.upload_required(); |
| 287 for (const auto& field : response.field()) { | 287 for (const auto& field : response.field()) { |
| 288 out << "\nautofill_type: " << field.autofill_type(); | 288 out << "\nautofill_type: " << field.autofill_type(); |
| 289 } | 289 } |
| 290 return out; | 290 return out; |
| 291 } | 291 } |
| 292 | 292 |
| 293 bool IsCreditCardExpirationType(ServerFieldType type) { |
| 294 return type == CREDIT_CARD_EXP_MONTH || |
| 295 type == CREDIT_CARD_EXP_2_DIGIT_YEAR || |
| 296 type == CREDIT_CARD_EXP_4_DIGIT_YEAR || |
| 297 type == CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR || |
| 298 type == CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR; |
| 299 } |
| 300 |
| 293 } // namespace | 301 } // namespace |
| 294 | 302 |
| 295 FormStructure::FormStructure(const FormData& form) | 303 FormStructure::FormStructure(const FormData& form) |
| 296 : form_name_(form.name), | 304 : form_name_(form.name), |
| 297 source_url_(form.origin), | 305 source_url_(form.origin), |
| 298 target_url_(form.action), | 306 target_url_(form.action), |
| 299 autofill_count_(0), | 307 autofill_count_(0), |
| 300 active_field_count_(0), | 308 active_field_count_(0), |
| 301 upload_required_(USE_UPLOAD_RATES), | 309 upload_required_(USE_UPLOAD_RATES), |
| 302 has_author_specified_types_(false), | 310 has_author_specified_types_(false), |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 return base::Uint64ToString(FormSignature64Bit()); | 578 return base::Uint64ToString(FormSignature64Bit()); |
| 571 } | 579 } |
| 572 | 580 |
| 573 bool FormStructure::IsAutofillable() const { | 581 bool FormStructure::IsAutofillable() const { |
| 574 if (autofill_count() < kRequiredFieldsForPredictionRoutines) | 582 if (autofill_count() < kRequiredFieldsForPredictionRoutines) |
| 575 return false; | 583 return false; |
| 576 | 584 |
| 577 return ShouldBeParsed(); | 585 return ShouldBeParsed(); |
| 578 } | 586 } |
| 579 | 587 |
| 588 bool FormStructure::IsCompleteCreditCardForm() const { |
| 589 bool found_cc_number = false; |
| 590 bool found_cc_expiration = false; |
| 591 for (const AutofillField* field : fields_) { |
| 592 ServerFieldType type = field->Type().GetStorableType(); |
| 593 if (!found_cc_expiration && IsCreditCardExpirationType(type)) { |
| 594 found_cc_expiration = true; |
| 595 } else if (!found_cc_number && type == CREDIT_CARD_NUMBER) { |
| 596 found_cc_number = true; |
| 597 } |
| 598 if (found_cc_expiration && found_cc_number) |
| 599 return true; |
| 600 } |
| 601 return false; |
| 602 } |
| 603 |
| 580 void FormStructure::UpdateAutofillCount() { | 604 void FormStructure::UpdateAutofillCount() { |
| 581 autofill_count_ = 0; | 605 autofill_count_ = 0; |
| 582 for (const AutofillField* field : *this) { | 606 for (const AutofillField* field : *this) { |
| 583 if (field && field->IsFieldFillable()) | 607 if (field && field->IsFieldFillable()) |
| 584 ++autofill_count_; | 608 ++autofill_count_; |
| 585 } | 609 } |
| 586 } | 610 } |
| 587 | 611 |
| 588 bool FormStructure::ShouldBeParsed() const { | 612 bool FormStructure::ShouldBeParsed() const { |
| 589 if (active_field_count() < kRequiredFieldsForPredictionRoutines && | 613 if (active_field_count() < kRequiredFieldsForPredictionRoutines && |
| (...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1357 filtered_strings[0].at(prefix_len)) { | 1381 filtered_strings[0].at(prefix_len)) { |
| 1358 // Mismatch found. | 1382 // Mismatch found. |
| 1359 return filtered_strings[i].substr(0, prefix_len); | 1383 return filtered_strings[i].substr(0, prefix_len); |
| 1360 } | 1384 } |
| 1361 } | 1385 } |
| 1362 } | 1386 } |
| 1363 return filtered_strings[0]; | 1387 return filtered_strings[0]; |
| 1364 } | 1388 } |
| 1365 | 1389 |
| 1366 } // namespace autofill | 1390 } // namespace autofill |
| OLD | NEW |