// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H_ #define WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H_ #include "webkit/glue/form_data.h" #include "webkit/glue/password_form.h" namespace WebKit { class WebForm; } class GURL; namespace webkit_glue { // Structure used for autofilling password forms. // basic_data identifies the HTML form on the page and preferred username/ // password for login, while // additional_logins is a list of other matching user/pass pairs for the form. // wait_for_username tells us whether we need to wait for the user to enter // a valid username before we autofill the password. By default, this is off // unless the PasswordManager determined there is an additional risk // associated with this form. This can happen, for example, if action URI's // of the observed form and our saved representation don't match up. struct PasswordFormFillData { typedef std::map<string16, string16> LoginCollection; FormData basic_data; LoginCollection additional_logins; bool wait_for_username; PasswordFormFillData(); ~PasswordFormFillData(); }; class PasswordFormDomManager { public: // Create a PasswordForm from DOM form. Webkit doesn't allow storing // custom metadata to DOM nodes, so we have to do this every time an event // happens with a given form and compare against previously Create'd forms // to identify..which sucks. static PasswordForm* CreatePasswordForm(const WebKit::WebFormElement& form); // Create a FillData structure in preparation for autofilling a form, // from basic_data identifying which form to fill, and a collection of // matching stored logins to use as username/password values. // preferred_match should equal (address) one of matches. // wait_for_username_before_autofill is true if we should not autofill // anything until the user typed in a valid username and blurred the field. static void InitFillData(const PasswordForm& form_on_page, const PasswordFormMap& matches, const PasswordForm* const preferred_match, bool wait_for_username_before_autofill, PasswordFormFillData* result); private: DISALLOW_IMPLICIT_CONSTRUCTORS(PasswordFormDomManager); }; } // namespace webkit_glue #endif // WEBKIT_GLUE_PASSWORD_FORM_DOM_MANAGER_H__