password_form_fill_data.h revision a36e5920737c6adbddd3e43b760e5de8431db6e0
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
14namespace autofill {
15
16// Helper struct for PasswordFormFillData
17struct 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
29struct 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.
37struct 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|.
77void 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