- add sources.
[platform/framework/web/crosswalk.git] / src / components / autofill / core / common / password_form_fill_data.h
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 "components/autofill/core/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 PasswordForm& form_on_page,
79     const PasswordFormMap& matches,
80     const 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__