// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H_ #define COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H_ #include <map> #include "base/memory/scoped_ptr.h" #include "components/autofill/core/common/form_data.h" #include "components/autofill/core/common/password_form.h" namespace autofill { // Helper struct for PasswordFormFillData struct UsernamesCollectionKey { UsernamesCollectionKey(); ~UsernamesCollectionKey(); // Defined so that this struct can be used as a key in a std::map. bool operator<(const UsernamesCollectionKey& other) const; base::string16 username; base::string16 password; std::string realm; }; struct PasswordAndRealm { base::string16 password; std::string realm; }; // Structure used for autofilling password forms. Note that the realms in this // struct are only set when the password's realm differs from the realm of the // form that we are filling. struct PasswordFormFillData { typedef std::map<base::string16, PasswordAndRealm> LoginCollection; typedef std::map<UsernamesCollectionKey, std::vector<base::string16> > UsernamesCollection; // Identifies the HTML form on the page and preferred username/password for // login. FormData basic_data; // The signon realm of the preferred user/pass pair. std::string preferred_realm; // A list of other matching username->PasswordAndRealm pairs for the form. LoginCollection additional_logins; // A list of possible usernames in the case where we aren't completely sure // that the original saved username is correct. This data is keyed by the // saved username/password to ensure uniqueness, though the username is not // used. UsernamesCollection other_possible_usernames; // Tells us whether we need to wait for the user to enter a valid username // before we autofill the password. By default, this is off unless the // PasswordManager determined there is an additional risk associated with this // form. This can happen, for example, if action URI's of the observed form // and our saved representation don't match up. bool wait_for_username; PasswordFormFillData(); ~PasswordFormFillData(); }; // Create a FillData structure in preparation for autofilling a form, // from basic_data identifying which form to fill, and a collection of // matching stored logins to use as username/password values. // |preferred_match| should equal (address) one of matches. // |wait_for_username_before_autofill| is true if we should not autofill // anything until the user typed in a valid username and blurred the field. // If |enable_possible_usernames| is true, we will populate possible_usernames // in |result|. void InitPasswordFormFillData( const PasswordForm& form_on_page, const PasswordFormMap& matches, const PasswordForm* const preferred_match, bool wait_for_username_before_autofill, bool enable_other_possible_usernames, PasswordFormFillData* result); } // namespace autofill #endif // COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H__