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 3 // found in the LICENSE file. 4 5 #include "base/string_util.h" 6 #include "base/utf_string_conversions.h" 7 #include "chrome/browser/password_manager/password_form_data.h" 8 9 using webkit_glue::PasswordForm; 10 11 PasswordForm* CreatePasswordFormFromData( 12 const PasswordFormData& form_data) { 13 PasswordForm* form = new PasswordForm(); 14 form->scheme = form_data.scheme; 15 form->preferred = form_data.preferred; 16 form->ssl_valid = form_data.ssl_valid; 17 form->date_created = base::Time::FromDoubleT(form_data.creation_time); 18 if (form_data.signon_realm) 19 form->signon_realm = std::string(form_data.signon_realm); 20 if (form_data.origin) 21 form->origin = GURL(form_data.origin); 22 if (form_data.action) 23 form->action = GURL(form_data.action); 24 if (form_data.submit_element) 25 form->submit_element = WideToUTF16(form_data.submit_element); 26 if (form_data.username_element) 27 form->username_element = WideToUTF16(form_data.username_element); 28 if (form_data.password_element) 29 form->password_element = WideToUTF16(form_data.password_element); 30 if (form_data.username_value) { 31 form->username_value = WideToUTF16(form_data.username_value); 32 if (form_data.password_value) 33 form->password_value = WideToUTF16(form_data.password_value); 34 } else { 35 form->blacklisted_by_user = true; 36 } 37 return form; 38 } 39 40 bool operator==(const PasswordForm& lhs, const PasswordForm& rhs) { 41 return (lhs.scheme == rhs.scheme && 42 lhs.signon_realm == rhs.signon_realm && 43 lhs.origin == rhs.origin && 44 lhs.action == rhs.action && 45 lhs.submit_element == rhs.submit_element && 46 lhs.username_element == rhs.username_element && 47 lhs.password_element == rhs.password_element && 48 lhs.username_value == rhs.username_value && 49 lhs.password_value == rhs.password_value && 50 lhs.blacklisted_by_user == rhs.blacklisted_by_user && 51 lhs.preferred == rhs.preferred && 52 lhs.ssl_valid == rhs.ssl_valid && 53 lhs.date_created == rhs.date_created); 54 } 55 56 std::ostream& operator<<(std::ostream& os, const PasswordForm& form) { 57 return os << "scheme: " << form.scheme << std::endl 58 << "signon_realm: " << form.signon_realm << std::endl 59 << "origin: " << form.origin << std::endl 60 << "action: " << form.action << std::endl 61 << "submit_element: " << form.submit_element << std::endl 62 << "username_elem: " << form.username_element << std::endl 63 << "password_elem: " << form.password_element << std::endl 64 << "username_value: " << form.username_value << std::endl 65 << "password_value: " << form.password_value << std::endl 66 << "blacklisted: " << form.blacklisted_by_user << std::endl 67 << "preferred: " << form.preferred << std::endl 68 << "ssl_valid: " << form.ssl_valid << std::endl 69 << "date_created: " << form.date_created.ToDoubleT(); 70 } 71 72 typedef std::set<const webkit_glue::PasswordForm*> SetOfForms; 73 74 bool ContainsSamePasswordFormsPtr( 75 const std::vector<PasswordForm*>& first, 76 const std::vector<PasswordForm*>& second) { 77 if (first.size() != second.size()) 78 return false; 79 SetOfForms expectations(first.begin(), first.end()); 80 for (unsigned int i = 0; i < second.size(); ++i) { 81 const PasswordForm* actual = second[i]; 82 bool found_match = false; 83 for (SetOfForms::iterator it = expectations.begin(); 84 it != expectations.end(); ++it) { 85 const PasswordForm* expected = *it; 86 if (*expected == *actual) { 87 found_match = true; 88 expectations.erase(it); 89 break; 90 } 91 } 92 if (!found_match) { 93 LOG(ERROR) << "No match for:" << std::endl << *actual; 94 return false; 95 } 96 } 97 return true; 98 } 99 100 bool ContainsSamePasswordForms( 101 std::vector<webkit_glue::PasswordForm>& first, 102 std::vector<webkit_glue::PasswordForm>& second) { 103 std::vector<PasswordForm*> first_ptr; 104 for (unsigned int i = 0; i < first.size(); ++i) { 105 first_ptr.push_back(&first[i]); 106 } 107 std::vector<PasswordForm*> second_ptr; 108 for (unsigned int i = 0; i < second.size(); ++i) { 109 second_ptr.push_back(&second[i]); 110 } 111 return ContainsSamePasswordFormsPtr(first_ptr, second_ptr); 112 } 113