Index: webkit/forms/password_form_dom_manager.cc |
=================================================================== |
--- webkit/forms/password_form_dom_manager.cc (revision 127980) |
+++ webkit/forms/password_form_dom_manager.cc (working copy) |
@@ -22,6 +22,53 @@ |
PasswordFormFillData::~PasswordFormFillData() { |
} |
+const FormField& PasswordFormFillData::GetUsernameField() const { |
+ switch (GetDataType()) { |
+ case kUsernameAndPassword: |
+ return basic_data.fields[1]; |
+ 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: |
+ 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,23 +84,31 @@ |
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; |
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; |
Ilya Sherman
2012/03/22 16:57:44
nit: Please move this to be immediately after line
Yumikiyo Osanai
2012/03/26 21:23:43
Done.
I've moved it immediately after line 90.
|
+ // 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. |
Ilya Sherman
2012/03/22 16:57:44
Do we really need to check both the username_eleme
Yumikiyo Osanai
2012/03/26 21:23:43
As you said, It doesn't need to check both of thos
|
+ 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); |
+ } |
+ |
// Copy additional username/value pairs. |
PasswordFormMap::const_iterator iter; |
for (iter = matches.begin(); iter != matches.end(); iter++) { |