17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/password_form_fill_data.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/utf_string_conversions.h" 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)UsernamesCollectionKey::UsernamesCollectionKey() {} 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)UsernamesCollectionKey::~UsernamesCollectionKey() {} 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool UsernamesCollectionKey::operator<( 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const UsernamesCollectionKey& other) const { 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (username != other.username) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return username < other.username; 21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (password != other.password) 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return password < other.password; 23558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return realm < other.realm; 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PasswordFormFillData::PasswordFormFillData() : wait_for_username(false) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PasswordFormFillData::~PasswordFormFillData() { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InitPasswordFormFillData( 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PasswordForm& form_on_page, 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PasswordFormMap& matches, 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const PasswordForm* const preferred_match, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool wait_for_username_before_autofill, 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool enable_other_possible_usernames, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PasswordFormFillData* result) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that many of the |FormFieldData| members are not initialized for 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |username_field| and |password_field| because they are currently not used 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by the password autocomplete code. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData username_field; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) username_field.name = form_on_page.username_element; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) username_field.value = preferred_match->username_value; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData password_field; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_field.name = form_on_page.password_element; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_field.value = preferred_match->password_value; 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) password_field.form_control_type = "password"; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill basic form data. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->basic_data.origin = form_on_page.origin; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->basic_data.action = form_on_page.action; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->basic_data.fields.push_back(username_field); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->basic_data.fields.push_back(password_field); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result->wait_for_username = wait_for_username_before_autofill; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) result->preferred_realm = preferred_match->original_signon_realm; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy additional username/value pairs. 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) PasswordFormMap::const_iterator iter; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iter = matches.begin(); iter != matches.end(); iter++) { 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (iter->second != preferred_match) { 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PasswordAndRealm value; 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch value.password = iter->second->password_value; 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) value.realm = iter->second->original_signon_realm; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch result->additional_logins[iter->first] = value; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (enable_other_possible_usernames && 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !iter->second->other_possible_usernames.empty()) { 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Note that there may be overlap between other_possible_usernames and 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // other saved usernames or with other other_possible_usernames. For now 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // we will ignore this overlap as it should be a rare occurence. We may 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // want to revisit this in the future. 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UsernamesCollectionKey key; 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) key.username = iter->first; 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) key.password = iter->second->password_value; 77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) key.realm = iter->second->original_signon_realm; 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) result->other_possible_usernames[key] = 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) iter->second->other_possible_usernames; 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 85