Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(381)

Side by Side Diff: chrome/renderer/form_manager.cc

Issue 4249002: AutoFill: Fix two heuristic issues with nrm.org. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/form_manager.h" 5 #include "chrome/renderer/form_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/scoped_vector.h" 8 #include "base/scoped_vector.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/stl_util-inl.h" 10 #include "base/stl_util-inl.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 return string16(); 101 return string16();
102 102
103 if (previous.isTextNode()) { 103 if (previous.isTextNode()) {
104 inferred_label = previous.nodeValue(); 104 inferred_label = previous.nodeValue();
105 TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label); 105 TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label);
106 } 106 }
107 107
108 // If we didn't find text, check for previous paragraph. 108 // If we didn't find text, check for previous paragraph.
109 // Eg. <p>Some Text</p><input ...> 109 // Eg. <p>Some Text</p><input ...>
110 // Note the lack of whitespace between <p> and <input> elements. 110 // Note the lack of whitespace between <p> and <input> elements.
111 if (inferred_label.empty()) { 111 if (inferred_label.empty() && previous.isElementNode()) {
112 if (previous.isElementNode()) { 112 WebElement element = previous.to<WebElement>();
113 WebElement element = previous.to<WebElement>(); 113 if (element.hasTagName("p")) {
114 if (element.hasTagName("p")) { 114 inferred_label = FindChildText(element);
115 inferred_label = FindChildText(element);
116 }
117 } 115 }
118 } 116 }
119 117
120 // If we didn't find paragraph, check for previous paragraph to this. 118 // If we didn't find paragraph, check for previous paragraph to this.
121 // Eg. <p>Some Text</p> <input ...> 119 // Eg. <p>Some Text</p> <input ...>
122 // Note the whitespace between <p> and <input> elements. 120 // Note the whitespace between <p> and <input> elements.
123 if (inferred_label.empty()) { 121 if (inferred_label.empty()) {
124 previous = previous.previousSibling(); 122 WebNode sibling = previous.previousSibling();
125 if (!previous.isNull() && previous.isElementNode()) { 123 if (!sibling.isNull() && sibling.isElementNode()) {
126 WebElement element = previous.to<WebElement>(); 124 WebElement element = sibling.to<WebElement>();
127 if (element.hasTagName("p")) { 125 if (element.hasTagName("p")) {
128 inferred_label = FindChildText(element); 126 inferred_label = FindChildText(element);
129 } 127 }
130 } 128 }
131 } 129 }
132 130
133 // Look for text node prior to <img> tag. 131 // Look for text node prior to <img> tag.
134 // Eg. Some Text<img/><input ...> 132 // Eg. Some Text<img/><input ...>
135 if (inferred_label.empty()) { 133 if (inferred_label.empty()) {
136 while (inferred_label.empty() && !previous.isNull()) { 134 while (inferred_label.empty() && !previous.isNull()) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 // Eg. <tr><td>Some Text</td><td><input ...></td></tr> 176 // Eg. <tr><td>Some Text</td><td><input ...></td></tr>
179 // Eg. <tr><td><b>Some Text</b></td><td><b><input ...></b></td></tr> 177 // Eg. <tr><td><b>Some Text</b></td><td><b><input ...></b></td></tr>
180 string16 InferLabelFromTable( 178 string16 InferLabelFromTable(
181 const WebFormControlElement& element) { 179 const WebFormControlElement& element) {
182 string16 inferred_label; 180 string16 inferred_label;
183 WebNode parent = element.parentNode(); 181 WebNode parent = element.parentNode();
184 while (!parent.isNull() && parent.isElementNode() && 182 while (!parent.isNull() && parent.isElementNode() &&
185 !parent.to<WebElement>().hasTagName("td")) 183 !parent.to<WebElement>().hasTagName("td"))
186 parent = parent.parentNode(); 184 parent = parent.parentNode();
187 185
188 if (parent.isNull() || !parent.isElementNode())
189 return string16();
190
191 WebElement e = parent.to<WebElement>();
192 if (e.isNull() || !e.hasTagName("td"))
193 return string16();
194
195 // Check all previous siblings, skipping non-element nodes, until we find a 186 // Check all previous siblings, skipping non-element nodes, until we find a
196 // non-empty text block. 187 // non-empty text block.
197 WebNode previous = parent.previousSibling(); 188 WebNode previous = parent;
198 while (!previous.isNull()) { 189 while (!previous.isNull()) {
199 if (previous.isElementNode()) { 190 if (previous.isElementNode()) {
200 e = previous.to<WebElement>(); 191 WebElement e = previous.to<WebElement>();
201 if (e.hasTagName("td")) { 192 if (e.hasTagName("td")) {
202 inferred_label = FindChildText(e); 193 inferred_label = FindChildText(e);
203 if (!inferred_label.empty()) 194 if (!inferred_label.empty())
204 break; 195 break;
205 } 196 }
206 } 197 }
207 198
208 previous = previous.previousSibling(); 199 previous = previous.previousSibling();
209 } 200 }
210 201
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 WebInputElement input_element = field->to<WebInputElement>(); 896 WebInputElement input_element = field->to<WebInputElement>();
906 897
907 // If the maxlength attribute contains a negative value, maxLength() 898 // If the maxlength attribute contains a negative value, maxLength()
908 // returns the default maxlength value. 899 // returns the default maxlength value.
909 input_element.setSuggestedValue( 900 input_element.setSuggestedValue(
910 data->value().substr(0, input_element.maxLength())); 901 data->value().substr(0, input_element.maxLength()));
911 input_element.setAutofilled(true); 902 input_element.setAutofilled(true);
912 if (is_initiating_node) 903 if (is_initiating_node)
913 input_element.setSelectionRange(0, input_element.suggestedValue().length()); 904 input_element.setSelectionRange(0, input_element.suggestedValue().length());
914 } 905 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698