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 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 // label.firstChild().nodeValue() of the label element. | 920 // label.firstChild().nodeValue() of the label element. |
921 void MatchLabelsAndFields( | 921 void MatchLabelsAndFields( |
922 const WebElementCollection& labels, | 922 const WebElementCollection& labels, |
923 std::map<WebFormControlElement, FormFieldData*>* element_map) { | 923 std::map<WebFormControlElement, FormFieldData*>* element_map) { |
924 CR_DEFINE_STATIC_LOCAL(WebString, kFor, ("for")); | 924 CR_DEFINE_STATIC_LOCAL(WebString, kFor, ("for")); |
925 CR_DEFINE_STATIC_LOCAL(WebString, kHidden, ("hidden")); | 925 CR_DEFINE_STATIC_LOCAL(WebString, kHidden, ("hidden")); |
926 | 926 |
927 for (WebElement item = labels.firstItem(); !item.isNull(); | 927 for (WebElement item = labels.firstItem(); !item.isNull(); |
928 item = labels.nextItem()) { | 928 item = labels.nextItem()) { |
929 WebLabelElement label = item.to<WebLabelElement>(); | 929 WebLabelElement label = item.to<WebLabelElement>(); |
930 WebFormControlElement field_element = | 930 WebElement control = label.correspondingControl(); |
931 label.correspondingControl().to<WebFormControlElement>(); | |
932 FormFieldData* field_data = nullptr; | 931 FormFieldData* field_data = nullptr; |
933 | 932 |
934 if (field_element.isNull()) { | 933 if (control.isNull()) { |
935 // Sometimes site authors will incorrectly specify the corresponding | 934 // Sometimes site authors will incorrectly specify the corresponding |
936 // field element's name rather than its id, so we compensate here. | 935 // field element's name rather than its id, so we compensate here. |
937 base::string16 element_name = label.getAttribute(kFor); | 936 base::string16 element_name = label.getAttribute(kFor); |
938 if (element_name.empty()) | 937 if (element_name.empty()) |
939 continue; | 938 continue; |
940 // Look through the list for elements with this name. There can actually | 939 // Look through the list for elements with this name. There can actually |
941 // be more than one. In this case, the label may not be particularly | 940 // be more than one. In this case, the label may not be particularly |
942 // useful, so just discard it. | 941 // useful, so just discard it. |
943 for (const auto& iter : *element_map) { | 942 for (const auto& iter : *element_map) { |
944 if (iter.second->name == element_name) { | 943 if (iter.second->name == element_name) { |
945 if (field_data) { | 944 if (field_data) { |
946 field_data = nullptr; | 945 field_data = nullptr; |
947 break; | 946 break; |
948 } else { | 947 } else { |
949 field_data = iter.second; | 948 field_data = iter.second; |
950 } | 949 } |
951 } | 950 } |
952 } | 951 } |
953 } else if (!field_element.isFormControlElement() || | 952 } else if (control.isFormControlElement()) { |
954 field_element.formControlType() == kHidden) { | 953 WebFormControlElement form_control = control.to<WebFormControlElement>(); |
955 continue; | 954 if (form_control.formControlType() == kHidden) |
956 } else { | 955 continue; |
957 // Typical case: look up |field_data| in |element_map|. | 956 // Typical case: look up |field_data| in |element_map|. |
958 auto iter = element_map->find(field_element); | 957 auto iter = element_map->find(form_control); |
959 if (iter == element_map->end()) | 958 if (iter == element_map->end()) |
960 continue; | 959 continue; |
961 field_data = iter->second; | 960 field_data = iter->second; |
962 } | 961 } |
963 | 962 |
964 if (!field_data) | 963 if (!field_data) |
965 continue; | 964 continue; |
966 | 965 |
967 base::string16 label_text = FindChildText(label); | 966 base::string16 label_text = FindChildText(label); |
968 | 967 |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1531 size_t offset = GetTextSelectionStart(suggestion, user_input, false); | 1530 size_t offset = GetTextSelectionStart(suggestion, user_input, false); |
1532 // Zero selection start is for password manager, which can show usernames | 1531 // Zero selection start is for password manager, which can show usernames |
1533 // that do not begin with the user input value. | 1532 // that do not begin with the user input value. |
1534 selection_start = (offset == base::string16::npos) ? 0 : offset; | 1533 selection_start = (offset == base::string16::npos) ? 0 : offset; |
1535 } | 1534 } |
1536 | 1535 |
1537 input_element->setSelectionRange(selection_start, suggestion.length()); | 1536 input_element->setSelectionRange(selection_start, suggestion.length()); |
1538 } | 1537 } |
1539 | 1538 |
1540 } // namespace autofill | 1539 } // namespace autofill |
OLD | NEW |