password_form.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// found in the LICENSE file.
4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#ifndef COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_H__
6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#define COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_H__
7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <map>
9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <string>
10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include <vector>
11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/time/time.h"
13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "components/autofill/core/common/form_data.h"
14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "url/gurl.h"
15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace autofill {
17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The PasswordForm struct encapsulates information about a login form,
19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// which can be an HTML form or a dialog with username/password text fields.
20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch//
21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The Web Data database stores saved username/passwords and associated form
22ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// metdata using a PasswordForm struct, typically one that was created from
23ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// a parsed HTMLFormElement or LoginDialog, but the saved entries could have
24ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// also been created by imported data from another browser.
25ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch//
26ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The PasswordManager implements a fuzzy-matching algorithm to compare saved
27ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// PasswordForm entries against PasswordForms that were created from a parsed
28ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// HTML or dialog form. As one might expect, the more data contained in one
29ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// of the saved PasswordForms, the better the job the PasswordManager can do
30ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// in matching it against the actual form it was saved on, and autofill
31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// accurately. But it is not always possible, especially when importing from
32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// other browsers with different data models, to copy over all the information
33ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// about a particular "saved password entry" to our PasswordForm
34ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// representation.
35ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch//
36ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// The field descriptions in the struct specification below are intended to
37ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// describe which fields are not strictly required when adding a saved password
38ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// entry to the database and how they can affect the matching process.
39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstruct PasswordForm {
41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Enum to differentiate between HTML form based authentication, and dialogs
42ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // using basic or digest schemes. Default is SCHEME_HTML. Only PasswordForms
43ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // of the same Scheme will be matched/autofilled against each other.
44ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  enum Scheme {
45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SCHEME_HTML,
46ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SCHEME_BASIC,
47ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SCHEME_DIGEST,
48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SCHEME_OTHER,
49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    SCHEME_LAST = SCHEME_OTHER
50ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  } scheme;
51ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The "Realm" for the sign-on (scheme, host, port for SCHEME_HTML, and
53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // contains the HTTP realm for dialog-based forms).
54ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The signon_realm is effectively the primary key used for retrieving
55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // data from the database, so it must not be empty.
56ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string signon_realm;
57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The original "Realm" for the sign-on (scheme, host, port for SCHEME_HTML,
59ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // and contains the HTTP realm for dialog-based forms). This realm is only set
60ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // when two PasswordForms are matched when trying to find a login/pass pair
61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // for a site. It is only set to a non-empty value during a match of the
62ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // original stored login/pass and the current observed form if all these
63ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // statements are true:
64ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 1) The full signon_realm is not the same.
65ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 2) The registry controlled domain is the same. For example; example.com,
66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // m.example.com, foo.login.example.com and www.example.com would all resolve
67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // to example.com since .com is the public suffix.
68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 3) The scheme is the same.
69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 4) The port is the same.
70ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // For example, if there exists a stored password for http://www.example.com
71ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // (where .com is the public suffix) and the observed form is
72ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // http://m.example.com, |original_signon_realm| must be set to
73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // http://www.example.com.
74ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::string original_signon_realm;
75ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The URL (minus query parameters) containing the form. This is the primary
77ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // data used by the PasswordManager to decide (in longest matching prefix
78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // fashion) whether or not a given PasswordForm result from the database is a
79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // good fit for a particular form on a page, so it must not be empty.
80ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  GURL origin;
81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The action target of the form. This is the primary data used by the
83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // PasswordManager for form autofill; that is, the action of the saved
84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // credentials must match the action of the form on the page to be autofilled.
85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // If this is empty / not available, it will result in a "restricted"
86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // IE-like autofill policy, where we wait for the user to type in his
87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // username before autofilling the password. In these cases, after successful
88ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // login the action URL will automatically be assigned by the
89ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // PasswordManager.
90ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
91ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this must always be set.
92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  GURL action;
93ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The name of the submit button used. Optional; only used in scoring
95ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // of PasswordForm results from the database to make matches as tight as
96ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // possible.
97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this must always be set.
99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 submit_element;
100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
101ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The name of the username input element. Optional (improves scoring).
102ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this must always be set.
104ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 username_element;
105ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
106ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The username. Optional.
107ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
108ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is typically empty unless the site
109ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // has implemented some form of autofill.
110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 username_value;
111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // This member is populated in cases where we there are multiple input
113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // elements that could possibly be the username. Used when our heuristics for
114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // determining the username are incorrect. Optional.
115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
116ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is typically empty.
117ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  std::vector<base::string16> other_possible_usernames;
118ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
119ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The name of the password input element, Optional (improves scoring).
120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this must always be set.
122ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 password_element;
123ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
124ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The password. Required.
125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
126ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is typically empty.
127ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 password_value;
128ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // False if autocomplete is set to "off" for the password input element;
130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // True otherwise.
131ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool password_autocomplete_set;
132ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
133ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // If the form was a change password form, the name of the
134ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // 'old password' input element. Optional.
135ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 old_password_element;
136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The old password. Optional.
138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::string16 old_password_value;
139ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Whether or not this login was saved under an HTTPS session with a valid
141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // SSL cert. We will never match or autofill a PasswordForm where
142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // ssl_valid == true with a PasswordForm where ssl_valid == false. This means
143ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // passwords saved under HTTPS will never get autofilled onto an HTTP page.
144ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When importing, this should be set to true if the page URL is HTTPS, thus
145ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // giving it "the benefit of the doubt" that the SSL cert was valid when it
146ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // was saved. Default to false.
147ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool ssl_valid;
148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // True if this PasswordForm represents the last username/password login the
150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // user selected to log in to the site. If there is only one saved entry for
151ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // the site, this will always be true, but when there are multiple entries
152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // the PasswordManager ensures that only one of them has a preferred bit set
153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // to true. Default to false.
154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is not used.
156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool preferred;
157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When the login was saved (by chrome).
159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is not used.
161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::Time date_created;
162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When the login was downloaded from the sync server. For local passwords is
164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // not used.
165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is not used.
167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  base::Time date_synced;
168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Tracks if the user opted to never remember passwords for this form. Default
170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // to false.
171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is not used.
173ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool blacklisted_by_user;
174ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
175ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Enum to differentiate between manually filled forms and forms with auto
176ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // generated passwords.
177ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  enum Type {
178ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    TYPE_MANUAL,
179ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    TYPE_GENERATED,
180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    TYPE_LAST = TYPE_GENERATED
181ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  };
182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The form type. Not used yet. Please see http://crbug.com/152422
184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  Type type;
185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // The number of times that this username/password has been used to
187ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // authenticate the user.
188ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
189ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is not used.
190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  int times_used;
191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // True if additional system level authentication should be used
193ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // (if available) before using this password for autofill.
194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Default to false.
196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool use_additional_authentication;
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Autofill representation of this form. Used to communicate with the
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Autofill servers if necessary. Currently this is only used to help
200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // determine forms where we can trigger password generation.
201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  //
202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // When parsing an HTML form, this is normally set.
2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  FormData form_data;
204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Returns true if this match was found using public suffix matching.
206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool IsPublicSuffixMatch() const;
207ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
208ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Equality operators for testing.
209ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool operator==(const PasswordForm& form) const;
210ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  bool operator!=(const PasswordForm& form) const;
211ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  PasswordForm();
213ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  ~PasswordForm();
214ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch};
215ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Map username to PasswordForm* for convenience. See password_form_manager.h.
217ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochtypedef std::map<base::string16, PasswordForm*> PasswordFormMap;
218ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
219ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// For testing.
220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochstd::ostream& operator<<(std::ostream& os,
221ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch                         const autofill::PasswordForm& form);
222ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
223ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}  // namespace autofill
224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
225ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#endif  // COMPONENTS_AUTOFILL_CORE_COMMON_PASSWORD_FORM_H__
226ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch