• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 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 WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H_
6 #define WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H_
7 
8 #include "webkit/glue/form_data.h"
9 #include "webkit/glue/password_form.h"
10 
11 namespace WebKit {
12 class WebForm;
13 }
14 
15 class GURL;
16 
17 namespace webkit_glue {
18 
19 // Structure used for autofilling password forms.
20 // basic_data identifies the HTML form on the page and preferred username/
21 //            password for login, while
22 // additional_logins is a list of other matching user/pass pairs for the form.
23 // wait_for_username tells us whether we need to wait for the user to enter
24 // a valid username before we autofill the password. By default, this is off
25 // unless the PasswordManager determined there is an additional risk
26 // associated with this form. This can happen, for example, if action URI's
27 // of the observed form and our saved representation don't match up.
28 struct PasswordFormFillData {
29   typedef std::map<string16, string16> LoginCollection;
30 
31   FormData basic_data;
32   LoginCollection additional_logins;
33   bool wait_for_username;
34   PasswordFormFillData();
35   ~PasswordFormFillData();
36 };
37 
38 class PasswordFormDomManager {
39  public:
40   // Create a PasswordForm from DOM form. Webkit doesn't allow storing
41   // custom metadata to DOM nodes, so we have to do this every time an event
42   // happens with a given form and compare against previously Create'd forms
43   // to identify..which sucks.
44   static PasswordForm* CreatePasswordForm(const WebKit::WebFormElement& form);
45 
46   // Create a FillData structure in preparation for autofilling a form,
47   // from basic_data identifying which form to fill, and a collection of
48   // matching stored logins to use as username/password values.
49   // preferred_match should equal (address) one of matches.
50   // wait_for_username_before_autofill is true if we should not autofill
51   // anything until the user typed in a valid username and blurred the field.
52   static void InitFillData(const PasswordForm& form_on_page,
53                            const PasswordFormMap& matches,
54                            const PasswordForm* const preferred_match,
55                            bool wait_for_username_before_autofill,
56                            PasswordFormFillData* result);
57  private:
58   DISALLOW_IMPLICIT_CONSTRUCTORS(PasswordFormDomManager);
59 };
60 
61 }  // namespace webkit_glue
62 
63 #endif  // WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H__
64