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/form_autofill_util.h" | 5 #include "components/autofill/content/renderer/form_autofill_util.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 input_element->setChecked(data.is_checked, true); | 886 input_element->setChecked(data.is_checked, true); |
887 } else { | 887 } else { |
888 base::string16 value = data.value; | 888 base::string16 value = data.value; |
889 if (IsTextInput(input_element) || IsMonthInput(input_element)) { | 889 if (IsTextInput(input_element) || IsMonthInput(input_element)) { |
890 // If the maxlength attribute contains a negative value, maxLength() | 890 // If the maxlength attribute contains a negative value, maxLength() |
891 // returns the default maxlength value. | 891 // returns the default maxlength value. |
892 TruncateString(&value, input_element->maxLength()); | 892 TruncateString(&value, input_element->maxLength()); |
893 } | 893 } |
894 field->setValue(value, true); | 894 field->setValue(value, true); |
895 } | 895 } |
| 896 // Setting the form might trigger JavaScript, which is capable of |
| 897 // destroying the frame. |
| 898 if (!field->document().frame()) |
| 899 return; |
896 | 900 |
897 field->setAutofilled(true); | 901 field->setAutofilled(true); |
898 | 902 |
899 if (is_initiating_node && | 903 if (is_initiating_node && |
900 ((IsTextInput(input_element) || IsMonthInput(input_element)) || | 904 ((IsTextInput(input_element) || IsMonthInput(input_element)) || |
901 IsTextAreaElement(*field))) { | 905 IsTextAreaElement(*field))) { |
902 int length = field->value().length(); | 906 int length = field->value().length(); |
903 field->setSelectionRange(length, length); | 907 field->setSelectionRange(length, length); |
904 // Clear the current IME composition (the underline), if there is one. | 908 // Clear the current IME composition (the underline), if there is one. |
905 field->document().frame()->unmarkText(); | 909 field->document().frame()->unmarkText(); |
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1763 // Zero selection start is for password manager, which can show usernames | 1767 // Zero selection start is for password manager, which can show usernames |
1764 // that do not begin with the user input value. | 1768 // that do not begin with the user input value. |
1765 selection_start = (offset == base::string16::npos) ? 0 : offset; | 1769 selection_start = (offset == base::string16::npos) ? 0 : offset; |
1766 } | 1770 } |
1767 | 1771 |
1768 input_element->setSelectionRange(selection_start, suggestion.length()); | 1772 input_element->setSelectionRange(selection_start, suggestion.length()); |
1769 } | 1773 } |
1770 | 1774 |
1771 } // namespace form_util | 1775 } // namespace form_util |
1772 } // namespace autofill | 1776 } // namespace autofill |
OLD | NEW |