Index: webkit/forms/password_form_dom_manager.cc |
=================================================================== |
--- webkit/forms/password_form_dom_manager.cc (revision 127673) |
+++ webkit/forms/password_form_dom_manager.cc (working copy) |
@@ -22,6 +22,55 @@ |
PasswordFormFillData::~PasswordFormFillData() { |
} |
+const FormField& PasswordFormFillData::GetUsernameField() const { |
+ switch (GetDataType()) { |
+ case kUsernameAndPassword: |
+ return basic_data.fields[0]; |
+ break; |
+ case kOnlyPassword: |
+ default: |
+ NOTREACHED(); |
+ } |
+ NOTREACHED(); |
+ // This return expression is to make this function returns a value |
+ // in all paths. |
+ // If there is a path which doesn't return any values, |
+ // most of compiler output a warning or error. |
+ // (ex. Visual C++ compiler outputs C4715 warning.) |
+ return basic_data.fields[0]; |
+} |
+ |
+const FormField& PasswordFormFillData::GetPasswordField() const { |
+ switch (GetDataType()) { |
+ case kUsernameAndPassword: |
+ return basic_data.fields[1]; |
+ break; |
+ case kOnlyPassword: |
+ return basic_data.fields[0]; |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ NOTREACHED(); |
+ // This return expression is to make this function returns a value |
+ // in all paths. |
+ // If there is a path which doesn't return any values, |
+ // most of compiler output a warning or error. |
+ // (ex. Visual C++ compiler outputs C4715 warning.) |
+ return basic_data.fields[0]; |
+} |
+ |
+PasswordFormFillData::DataType PasswordFormFillData::GetDataType() const { |
+ if (basic_data.fields.size() == 2) { |
+ return kUsernameAndPassword; |
+ } else if (basic_data.fields.size() == 1) { |
+ return kOnlyPassword; |
+ } else { |
+ NOTREACHED(); |
+ } |
+ return kError; |
+} |
+ |
PasswordForm* PasswordFormDomManager::CreatePasswordForm( |
const WebFormElement& webform) { |
WebPasswordFormData web_password_form(webform); |
@@ -37,20 +86,28 @@ |
const PasswordForm* const preferred_match, |
bool wait_for_username_before_autofill, |
PasswordFormFillData* result) { |
+ |
+ // Fill basic form data. |
+ result->basic_data.origin = form_on_page.origin; |
+ result->basic_data.action = form_on_page.action; |
+ |
// Note that many of the |FormField| members are not initialized for |
// |username_field| and |password_field| because they are currently not used |
// by the password autocomplete code. |
- FormField username_field; |
- username_field.name = form_on_page.username_element; |
- username_field.value = preferred_match->username_value; |
+ |
+ // If username_element and preferred_match->username_value are empty string, |
+ // we suppose that there isn't any username field and don't set the username. |
+ string16 none_username; |
+ if (form_on_page.username_element != none_username |
+ && preferred_match->username_value != none_username) { |
+ FormField username_field; |
+ username_field.name = form_on_page.username_element; |
+ username_field.value = preferred_match->username_value; |
+ result->basic_data.fields.push_back(username_field); |
+ } |
FormField password_field; |
password_field.name = form_on_page.password_element; |
password_field.value = preferred_match->password_value; |
- |
- // Fill basic form data. |
- result->basic_data.origin = form_on_page.origin; |
- result->basic_data.action = form_on_page.action; |
- result->basic_data.fields.push_back(username_field); |
result->basic_data.fields.push_back(password_field); |
result->wait_for_username = wait_for_username_before_autofill; |