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#include "webkit/glue/password_form_dom_manager.h"
6
7#include "base/logging.h"
8#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h"
9#include "third_party/WebKit/Source/WebKit/chromium/public/WebPasswordFormData.h"
10#include "webkit/glue/form_field.h"
11
12using WebKit::WebFormElement;
13using WebKit::WebInputElement;
14using WebKit::WebPasswordFormData;
15
16namespace webkit_glue {
17
18PasswordFormFillData::PasswordFormFillData() : wait_for_username(false) {
19}
20
21PasswordFormFillData::~PasswordFormFillData() {
22}
23
24PasswordForm* PasswordFormDomManager::CreatePasswordForm(
25    const WebFormElement& webform) {
26  WebPasswordFormData web_password_form(webform);
27  if (web_password_form.isValid())
28    return new PasswordForm(web_password_form);
29  return NULL;
30}
31
32// static
33void PasswordFormDomManager::InitFillData(
34    const PasswordForm& form_on_page,
35    const PasswordFormMap& matches,
36    const PasswordForm* const preferred_match,
37    bool wait_for_username_before_autofill,
38    PasswordFormFillData* result) {
39  DCHECK(preferred_match);
40  // Fill basic form data.
41  result->basic_data.origin = form_on_page.origin;
42  result->basic_data.action = form_on_page.action;
43  // Three of the parameters below are set to default values because they are
44  // currently not used by the password autocomplete code:
45  // * The form control type is initialized to an empty string.
46  // * The field |max_length| is initialized to 0.
47  // * The field autofilled state is initialized to false.
48  result->basic_data.fields.push_back(
49      FormField(string16(),
50                form_on_page.username_element,
51                preferred_match->username_value,
52                string16(),
53                0,
54                false));
55  result->basic_data.fields.push_back(
56      FormField(string16(),
57                form_on_page.password_element,
58                preferred_match->password_value,
59                string16(),
60                0,
61                false));
62  result->wait_for_username = wait_for_username_before_autofill;
63
64  // Copy additional username/value pairs.
65  PasswordFormMap::const_iterator iter;
66  for (iter = matches.begin(); iter != matches.end(); iter++) {
67    if (iter->second != preferred_match)
68      result->additional_logins[iter->first] = iter->second->password_value;
69  }
70}
71
72}  // namespace webkit_glue
73