| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 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 "chrome/renderer/autofill/autofill_agent.h" |    5 #include "chrome/renderer/autofill/autofill_agent.h" | 
|    6  |    6  | 
|    7 #include "base/bind.h" |    7 #include "base/bind.h" | 
|    8 #include "base/message_loop.h" |    8 #include "base/message_loop.h" | 
|    9 #include "base/string_split.h" |    9 #include "base/string_split.h" | 
|   10 #include "base/string_util.h" |   10 #include "base/string_util.h" | 
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  153     IPC_MESSAGE_HANDLER(AutofillMsg_SetAutofillActionPreview, |  153     IPC_MESSAGE_HANDLER(AutofillMsg_SetAutofillActionPreview, | 
|  154                         OnSetAutofillActionPreview) |  154                         OnSetAutofillActionPreview) | 
|  155     IPC_MESSAGE_HANDLER(AutofillMsg_ClearPreviewedForm, |  155     IPC_MESSAGE_HANDLER(AutofillMsg_ClearPreviewedForm, | 
|  156                         OnClearPreviewedForm) |  156                         OnClearPreviewedForm) | 
|  157     IPC_MESSAGE_HANDLER(AutofillMsg_SetNodeText, |  157     IPC_MESSAGE_HANDLER(AutofillMsg_SetNodeText, | 
|  158                         OnSetNodeText) |  158                         OnSetNodeText) | 
|  159     IPC_MESSAGE_HANDLER(AutofillMsg_AcceptDataListSuggestion, |  159     IPC_MESSAGE_HANDLER(AutofillMsg_AcceptDataListSuggestion, | 
|  160                         OnAcceptDataListSuggestion) |  160                         OnAcceptDataListSuggestion) | 
|  161     IPC_MESSAGE_HANDLER(AutofillMsg_AcceptPasswordAutofillSuggestion, |  161     IPC_MESSAGE_HANDLER(AutofillMsg_AcceptPasswordAutofillSuggestion, | 
|  162                         OnAcceptPasswordAutofillSuggestion) |  162                         OnAcceptPasswordAutofillSuggestion) | 
|  163     IPC_MESSAGE_HANDLER(AutofillMsg_RequestAutocompleteSuccess, |  163     IPC_MESSAGE_HANDLER(AutofillMsg_RequestAutocompleteResult, | 
|  164                         OnRequestAutocompleteSuccess) |  164                         OnRequestAutocompleteResult) | 
|  165     IPC_MESSAGE_HANDLER(AutofillMsg_RequestAutocompleteError, |  | 
|  166                         OnRequestAutocompleteError) |  | 
|  167     IPC_MESSAGE_UNHANDLED(handled = false) |  165     IPC_MESSAGE_UNHANDLED(handled = false) | 
|  168   IPC_END_MESSAGE_MAP() |  166   IPC_END_MESSAGE_MAP() | 
|  169   return handled; |  167   return handled; | 
|  170 } |  168 } | 
|  171  |  169  | 
|  172 void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) { |  170 void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) { | 
|  173   // The document has now been fully loaded.  Scan for forms to be sent up to |  171   // The document has now been fully loaded.  Scan for forms to be sent up to | 
|  174   // the browser. |  172   // the browser. | 
|  175   std::vector<FormData> forms; |  173   std::vector<FormData> forms; | 
|  176   form_cache_.ExtractForms(*frame, &forms); |  174   form_cache_.ExtractForms(*frame, &forms); | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  219                                            const WebFormElement& form) { |  217                                            const WebFormElement& form) { | 
|  220   FormData form_data; |  218   FormData form_data; | 
|  221   if (!in_flight_request_form_.isNull() || |  219   if (!in_flight_request_form_.isNull() || | 
|  222       !WebFormElementToFormData(form, |  220       !WebFormElementToFormData(form, | 
|  223                                 WebFormControlElement(), |  221                                 WebFormControlElement(), | 
|  224                                 REQUIRE_AUTOCOMPLETE, |  222                                 REQUIRE_AUTOCOMPLETE, | 
|  225                                 EXTRACT_OPTIONS, |  223                                 EXTRACT_OPTIONS, | 
|  226                                 &form_data, |  224                                 &form_data, | 
|  227                                 NULL)) { |  225                                 NULL)) { | 
|  228     WebFormElement(form).finishRequestAutocomplete( |  226     WebFormElement(form).finishRequestAutocomplete( | 
|  229         WebFormElement::AutocompleteResultError); |  227         WebFormElement::AutocompleteResultErrorDisabled); | 
|  230     return; |  228     return; | 
|  231   } |  229   } | 
|  232  |  230  | 
|  233   // Cancel any pending Autofill requests and hide any currently showing popups. |  231   // Cancel any pending Autofill requests and hide any currently showing popups. | 
|  234   ++autofill_query_id_; |  232   ++autofill_query_id_; | 
|  235   HidePopups(); |  233   HidePopups(); | 
|  236  |  234  | 
|  237   in_flight_request_form_ = form; |  235   in_flight_request_form_ = form; | 
|  238   Send(new AutofillHostMsg_RequestAutocomplete( |  236   Send(new AutofillHostMsg_RequestAutocomplete( | 
|  239       routing_id(), |  237       routing_id(), | 
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  595 void AutofillAgent::OnAcceptPasswordAutofillSuggestion(const string16& value) { |  593 void AutofillAgent::OnAcceptPasswordAutofillSuggestion(const string16& value) { | 
|  596   // We need to make sure this is handled here because the browser process |  594   // We need to make sure this is handled here because the browser process | 
|  597   // skipped it handling because it believed it would be handled here. If it |  595   // skipped it handling because it believed it would be handled here. If it | 
|  598   // isn't handled here then the browser logic needs to be updated. |  596   // isn't handled here then the browser logic needs to be updated. | 
|  599   bool handled = password_autofill_manager_->DidAcceptAutofillSuggestion( |  597   bool handled = password_autofill_manager_->DidAcceptAutofillSuggestion( | 
|  600       element_, |  598       element_, | 
|  601       value); |  599       value); | 
|  602   DCHECK(handled); |  600   DCHECK(handled); | 
|  603 } |  601 } | 
|  604  |  602  | 
|  605 void AutofillAgent::FinishAutocompleteRequest( |  603 void AutofillAgent::OnRequestAutocompleteResult( | 
|  606     WebFormElement::AutocompleteResult result) { |  604     WebFormElement::AutocompleteResult result, const FormData& form_data) { | 
|  607   DCHECK(!in_flight_request_form_.isNull()); |  605   DCHECK(!in_flight_request_form_.isNull()); | 
 |  606   if (result == WebFormElement::AutocompleteResultSuccess) | 
 |  607     FillFormIncludingNonFocusableElements(form_data, in_flight_request_form_); | 
|  608   in_flight_request_form_.finishRequestAutocomplete(result); |  608   in_flight_request_form_.finishRequestAutocomplete(result); | 
|  609   in_flight_request_form_.reset(); |  609   in_flight_request_form_.reset(); | 
|  610 } |  610 } | 
|  611  |  611  | 
|  612 void AutofillAgent::OnRequestAutocompleteSuccess(const FormData& form_data) { |  | 
|  613   FillFormIncludingNonFocusableElements(form_data, in_flight_request_form_); |  | 
|  614   FinishAutocompleteRequest(WebFormElement::AutocompleteResultSuccess); |  | 
|  615 } |  | 
|  616  |  | 
|  617 void AutofillAgent::OnRequestAutocompleteError() { |  | 
|  618   FinishAutocompleteRequest(WebFormElement::AutocompleteResultError); |  | 
|  619 } |  | 
|  620  |  | 
|  621 void AutofillAgent::ShowSuggestions(const WebInputElement& element, |  612 void AutofillAgent::ShowSuggestions(const WebInputElement& element, | 
|  622                                     bool autofill_on_empty_values, |  613                                     bool autofill_on_empty_values, | 
|  623                                     bool requires_caret_at_end, |  614                                     bool requires_caret_at_end, | 
|  624                                     bool display_warning_if_disabled) { |  615                                     bool display_warning_if_disabled) { | 
|  625   if (!element.isEnabled() || element.isReadOnly() || !element.isTextField() || |  616   if (!element.isEnabled() || element.isReadOnly() || !element.isTextField() || | 
|  626       element.isPasswordField() || !element.suggestedValue().isEmpty()) |  617       element.isPasswordField() || !element.suggestedValue().isEmpty()) | 
|  627     return; |  618     return; | 
|  628  |  619  | 
|  629   // Don't attempt to autofill with values that are too large or if filling |  620   // Don't attempt to autofill with values that are too large or if filling | 
|  630   // criteria are not met. |  621   // criteria are not met. | 
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  754     web_view->hidePopups(); |  745     web_view->hidePopups(); | 
|  755  |  746  | 
|  756   HideHostPopups(); |  747   HideHostPopups(); | 
|  757 } |  748 } | 
|  758  |  749  | 
|  759 void AutofillAgent::HideHostPopups() { |  750 void AutofillAgent::HideHostPopups() { | 
|  760   Send(new AutofillHostMsg_HideAutofillPopup(routing_id())); |  751   Send(new AutofillHostMsg_HideAutofillPopup(routing_id())); | 
|  761 } |  752 } | 
|  762  |  753  | 
|  763 }  // namespace autofill |  754 }  // namespace autofill | 
| OLD | NEW |