| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/autofill/content/renderer/password_autofill_agent.h" | 5 #include "components/autofill/content/renderer/password_autofill_agent.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 } | 496 } |
| 497 } | 497 } |
| 498 return NULL; | 498 return NULL; |
| 499 } | 499 } |
| 500 | 500 |
| 501 void PasswordAutofillAgent::DidStartProvisionalLoad(blink::WebFrame* frame) { | 501 void PasswordAutofillAgent::DidStartProvisionalLoad(blink::WebFrame* frame) { |
| 502 if (!frame->parent()) { | 502 if (!frame->parent()) { |
| 503 // If the navigation is not triggered by a user gesture, e.g. by some ajax | 503 // If the navigation is not triggered by a user gesture, e.g. by some ajax |
| 504 // callback, then inherit the submitted password form from the previous | 504 // callback, then inherit the submitted password form from the previous |
| 505 // state. This fixes the no password save issue for ajax login, tracked in | 505 // state. This fixes the no password save issue for ajax login, tracked in |
| 506 // [http://crbug/43219]. Note that there are still some sites that this | 506 // [http://crbug/43219]. Note that this still fails for sites that use |
| 507 // fails for because they use some element other than a submit button to | 507 // synchonous XHR as isProcessingUserGesture() will return true. |
| 508 // trigger submission (which means WillSendSubmitEvent will not be called). | |
| 509 blink::WebFrame* form_frame = CurrentOrChildFrameWithSavedForms(frame); | 508 blink::WebFrame* form_frame = CurrentOrChildFrameWithSavedForms(frame); |
| 510 if (!blink::WebUserGestureIndicator::isProcessingUserGesture() && | 509 if (!blink::WebUserGestureIndicator::isProcessingUserGesture()) { |
| 511 provisionally_saved_forms_[form_frame].get()) { | 510 // If onsubmit has been called, try and save that form. |
| 512 Send(new AutofillHostMsg_PasswordFormSubmitted( | 511 if (provisionally_saved_forms_[form_frame].get()) { |
| 513 routing_id(), | 512 Send(new AutofillHostMsg_PasswordFormSubmitted( |
| 514 *provisionally_saved_forms_[form_frame])); | 513 routing_id(), |
| 515 provisionally_saved_forms_.erase(form_frame); | 514 *provisionally_saved_forms_[form_frame])); |
| 515 provisionally_saved_forms_.erase(form_frame); |
| 516 } else { |
| 517 // Loop through the forms on the page looking for one that has been |
| 518 // filled out. If one exists, try and save the credentials. |
| 519 blink::WebVector<blink::WebFormElement> forms; |
| 520 frame->document().forms(forms); |
| 521 |
| 522 for (size_t i = 0; i < forms.size(); ++i) { |
| 523 blink::WebFormElement fe = forms[i]; |
| 524 scoped_ptr<PasswordForm> password_form(CreatePasswordForm(fe)); |
| 525 if (password_form.get() && |
| 526 !password_form->username_value.empty() && |
| 527 !password_form->password_value.empty()) { |
| 528 Send(new AutofillHostMsg_PasswordFormSubmitted( |
| 529 routing_id(), *password_form)); |
| 530 } |
| 531 } |
| 532 } |
| 516 } | 533 } |
| 517 // Clear the whole map during main frame navigation. | 534 // Clear the whole map during main frame navigation. |
| 518 provisionally_saved_forms_.clear(); | 535 provisionally_saved_forms_.clear(); |
| 519 | 536 |
| 520 // We are navigating, se we need to wait for a new user gesture before | 537 // We are navigating, se we need to wait for a new user gesture before |
| 521 // filling in passwords. | 538 // filling in passwords. |
| 522 user_gesture_occurred_ = false; | 539 user_gesture_occurred_ = false; |
| 523 gesture_handler_->clearElements(); | 540 gesture_handler_->clearElements(); |
| 524 } | 541 } |
| 525 } | 542 } |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 } | 870 } |
| 854 | 871 |
| 855 PasswordAutofillAgent::AutofillWebUserGestureHandler:: | 872 PasswordAutofillAgent::AutofillWebUserGestureHandler:: |
| 856 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent) | 873 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent) |
| 857 : agent_(agent) {} | 874 : agent_(agent) {} |
| 858 | 875 |
| 859 PasswordAutofillAgent::AutofillWebUserGestureHandler:: | 876 PasswordAutofillAgent::AutofillWebUserGestureHandler:: |
| 860 ~AutofillWebUserGestureHandler() {} | 877 ~AutofillWebUserGestureHandler() {} |
| 861 | 878 |
| 862 } // namespace autofill | 879 } // namespace autofill |
| OLD | NEW |