Home | History | Annotate | Download | only in common
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H_
      6 #define COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H_
      7 
      8 #include <map>
      9 
     10 #include "base/memory/scoped_ptr.h"
     11 #include "components/autofill/core/common/form_data.h"
     12 #include "content/public/common/password_form.h"
     13 
     14 namespace autofill {
     15 
     16 // Helper struct for PasswordFormFillData
     17 struct UsernamesCollectionKey {
     18   UsernamesCollectionKey();
     19   ~UsernamesCollectionKey();
     20 
     21   // Defined so that this struct can be used as a key in a std::map.
     22   bool operator<(const UsernamesCollectionKey& other) const;
     23 
     24   base::string16 username;
     25   base::string16 password;
     26   std::string realm;
     27 };
     28 
     29 struct PasswordAndRealm {
     30   base::string16 password;
     31   std::string realm;
     32 };
     33 
     34 // Structure used for autofilling password forms. Note that the realms in this
     35 // struct are only set when the password's realm differs from the realm of the
     36 // form that we are filling.
     37 struct PasswordFormFillData {
     38   typedef std::map<base::string16, PasswordAndRealm> LoginCollection;
     39   typedef std::map<UsernamesCollectionKey,
     40                    std::vector<base::string16> > UsernamesCollection;
     41 
     42   // Identifies the HTML form on the page and preferred username/password for
     43   // login.
     44   FormData basic_data;
     45 
     46   // The signon realm of the preferred user/pass pair.
     47   std::string preferred_realm;
     48 
     49   // A list of other matching username->PasswordAndRealm pairs for the form.
     50   LoginCollection additional_logins;
     51 
     52   // A list of possible usernames in the case where we aren't completely sure
     53   // that the original saved username is correct. This data is keyed by the
     54   // saved username/password to ensure uniqueness, though the username is not
     55   // used.
     56   UsernamesCollection other_possible_usernames;
     57 
     58   // Tells us whether we need to wait for the user to enter a valid username
     59   // before we autofill the password. By default, this is off unless the
     60   // PasswordManager determined there is an additional risk associated with this
     61   // form. This can happen, for example, if action URI's of the observed form
     62   // and our saved representation don't match up.
     63   bool wait_for_username;
     64 
     65   PasswordFormFillData();
     66   ~PasswordFormFillData();
     67 };
     68 
     69 // Create a FillData structure in preparation for autofilling a form,
     70 // from basic_data identifying which form to fill, and a collection of
     71 // matching stored logins to use as username/password values.
     72 // |preferred_match| should equal (address) one of matches.
     73 // |wait_for_username_before_autofill| is true if we should not autofill
     74 // anything until the user typed in a valid username and blurred the field.
     75 // If |enable_possible_usernames| is true, we will populate possible_usernames
     76 // in |result|.
     77 void InitPasswordFormFillData(
     78     const content::PasswordForm& form_on_page,
     79     const content::PasswordFormMap& matches,
     80     const content::PasswordForm* const preferred_match,
     81     bool wait_for_username_before_autofill,
     82     bool enable_other_possible_usernames,
     83     PasswordFormFillData* result);
     84 
     85 }  // namespace autofill
     86 
     87 #endif  // COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_FILL_DATA_H__
     88