Chromium Code Reviews| 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 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 478 } | 478 } |
| 479 } | 479 } |
| 480 return NULL; | 480 return NULL; |
| 481 } | 481 } |
| 482 | 482 |
| 483 void PasswordAutofillAgent::DidStartProvisionalLoad(blink::WebFrame* frame) { | 483 void PasswordAutofillAgent::DidStartProvisionalLoad(blink::WebFrame* frame) { |
| 484 if (!frame->parent()) { | 484 if (!frame->parent()) { |
| 485 // If the navigation is not triggered by a user gesture, e.g. by some ajax | 485 // If the navigation is not triggered by a user gesture, e.g. by some ajax |
| 486 // callback, then inherit the submitted password form from the previous | 486 // callback, then inherit the submitted password form from the previous |
| 487 // state. This fixes the no password save issue for ajax login, tracked in | 487 // state. This fixes the no password save issue for ajax login, tracked in |
| 488 // [http://crbug/43219]. Note that there are still some sites that this | 488 // [http://crbug/43219]. Note that this still fails for sites that use |
| 489 // fails for because they use some element other than a submit button to | 489 // synchonous XHR as isProcessingUserGesture() will return true. |
| 490 // trigger submission (which means WillSendSubmitEvent will not be called). | |
| 491 blink::WebFrame* form_frame = CurrentOrChildFrameWithSavedForms(frame); | 490 blink::WebFrame* form_frame = CurrentOrChildFrameWithSavedForms(frame); |
| 492 if (!blink::WebUserGestureIndicator::isProcessingUserGesture() && | 491 if (!blink::WebUserGestureIndicator::isProcessingUserGesture()) { |
| 493 provisionally_saved_forms_[form_frame].get()) { | 492 // If onsubmit has been called, try and save that form. |
| 494 Send(new AutofillHostMsg_PasswordFormSubmitted( | 493 if (provisionally_saved_forms_[form_frame].get()) { |
| 495 routing_id(), | 494 Send(new AutofillHostMsg_PasswordFormSubmitted( |
| 496 *provisionally_saved_forms_[form_frame])); | 495 routing_id(), |
| 497 provisionally_saved_forms_.erase(form_frame); | 496 *provisionally_saved_forms_[form_frame])); |
| 497 provisionally_saved_forms_.erase(form_frame); | |
| 498 } else { | |
| 499 // Loop through the forms on the page looking for one that has been | |
| 500 // filled out. If one exists, try and save the credentials. | |
| 501 blink::WebVector<blink::WebFormElement> forms; | |
| 502 frame->document().forms(forms); | |
| 503 | |
| 504 for (size_t i = 0; i < forms.size(); ++i) { | |
|
vabr (Chromium)
2014/01/16 09:22:10
If your performance concerns were about this for c
Garrett Casto
2014/01/16 22:23:59
Yeah. From a performance standpoint the most optim
vabr (Chromium)
2014/01/17 09:28:01
Sure, let's wait if we need to optimise this at al
| |
| 505 blink::WebFormElement fe = forms[i]; | |
| 506 scoped_ptr<PasswordForm> password_form(CreatePasswordForm(fe)); | |
| 507 if (password_form.get() && | |
| 508 !password_form->username_value.empty() && | |
| 509 !password_form->password_value.empty()) { | |
| 510 Send(new AutofillHostMsg_PasswordFormSubmitted( | |
| 511 routing_id(), *password_form)); | |
| 512 } | |
| 513 } | |
| 514 } | |
| 498 } | 515 } |
| 499 // Clear the whole map during main frame navigation. | 516 // Clear the whole map during main frame navigation. |
| 500 provisionally_saved_forms_.clear(); | 517 provisionally_saved_forms_.clear(); |
| 501 | 518 |
| 502 // We are navigating, se we need to wait for a new user gesture before | 519 // We are navigating, se we need to wait for a new user gesture before |
| 503 // filling in passwords. | 520 // filling in passwords. |
| 504 user_gesture_occurred_ = false; | 521 user_gesture_occurred_ = false; |
| 505 gesture_handler_->clearElements(); | 522 gesture_handler_->clearElements(); |
| 506 } | 523 } |
| 507 } | 524 } |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 840 } | 857 } |
| 841 | 858 |
| 842 PasswordAutofillAgent::AutofillWebUserGestureHandler:: | 859 PasswordAutofillAgent::AutofillWebUserGestureHandler:: |
| 843 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent) | 860 AutofillWebUserGestureHandler(PasswordAutofillAgent* agent) |
| 844 : agent_(agent) {} | 861 : agent_(agent) {} |
| 845 | 862 |
| 846 PasswordAutofillAgent::AutofillWebUserGestureHandler:: | 863 PasswordAutofillAgent::AutofillWebUserGestureHandler:: |
| 847 ~AutofillWebUserGestureHandler() {} | 864 ~AutofillWebUserGestureHandler() {} |
| 848 | 865 |
| 849 } // namespace autofill | 866 } // namespace autofill |
| OLD | NEW |