Chromium Code Reviews| Index: chrome/renderer/autofill/form_autofill_util.cc |
| diff --git a/chrome/renderer/autofill/form_autofill_util.cc b/chrome/renderer/autofill/form_autofill_util.cc |
| index 9b5cd05aac90560a9732959c0777e0d44bbf2e44..b7c1443279d001b5bcf6e66e2d7735f671f9170d 100644 |
| --- a/chrome/renderer/autofill/form_autofill_util.cc |
| +++ b/chrome/renderer/autofill/form_autofill_util.cc |
| @@ -55,15 +55,18 @@ using autofill::IsTextInput; |
| const size_t kMaxDataLength = 1024; |
| bool IsOptionElement(const WebElement& element) { |
| - return element.hasTagName("option"); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kOption, ("option")); |
| + return element.hasTagName(kOption); |
| } |
| bool IsScriptElement(const WebElement& element) { |
| - return element.hasTagName("script"); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kScript, ("script")); |
| + return element.hasTagName(kScript); |
| } |
| bool IsNoScriptElement(const WebElement& element) { |
| - return element.hasTagName("noscript"); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kNoScript, ("noscript")); |
| + return element.hasTagName(kNoScript); |
| } |
| bool HasTagName(const WebNode& node, const WebKit::WebString& tag) { |
| @@ -182,6 +185,14 @@ string16 FindChildText(const WebNode& node) { |
| string16 InferLabelFromPrevious(const WebFormControlElement& element) { |
| string16 inferred_label; |
| WebNode previous = element; |
| + CR_DEFINE_STATIC_LOCAL(WebString, kBold, ("b")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kStrong, ("strong")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kSpan, ("span")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kFont, ("font")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kImage, ("img")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kBreak, ("br")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kPage, ("p")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kLabel, ("label")); |
|
Ilya Sherman
2013/02/11 05:50:30
nit: Please define these closer to where they're a
Albert Bodenhamer
2013/02/11 17:37:51
Done.
|
| while (true) { |
| previous = previous.previousSibling(); |
| if (previous.isNull()) |
| @@ -202,8 +213,8 @@ string16 InferLabelFromPrevious(const WebFormControlElement& element) { |
| // (a) plain text nodes or |
| // (b) inline HTML elements that are essentially equivalent to text nodes. |
| if (previous.isTextNode() || |
| - HasTagName(previous, "b") || HasTagName(previous, "strong") || |
| - HasTagName(previous, "span") || HasTagName(previous, "font")) { |
| + HasTagName(previous, kBold) || HasTagName(previous, kStrong) || |
| + HasTagName(previous, kSpan) || HasTagName(previous, kFont)) { |
| string16 value = FindChildText(previous); |
| // A text node's value will be empty if it is for a line break. |
| bool add_space = previous.isTextNode() && value.empty(); |
| @@ -221,11 +232,11 @@ string16 InferLabelFromPrevious(const WebFormControlElement& element) { |
| // <img> and <br> tags often appear between the input element and its |
| // label text, so skip over them. |
| - if (HasTagName(previous, "img") || HasTagName(previous, "br")) |
| + if (HasTagName(previous, kImage) || HasTagName(previous, kBreak)) |
| continue; |
| // We only expect <p> and <label> tags to contain the full label text. |
| - if (HasTagName(previous, "p") || HasTagName(previous, "label")) |
| + if (HasTagName(previous, kPage) || HasTagName(previous, kLabel)) |
| inferred_label = FindChildText(previous); |
| break; |
| @@ -240,12 +251,13 @@ string16 InferLabelFromPrevious(const WebFormControlElement& element) { |
| // e.g. <li>Some Text<input ...><input ...><input ...></tr> |
| string16 InferLabelFromListItem(const WebFormControlElement& element) { |
| WebNode parent = element.parentNode(); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kListItem, ("li")); |
| while (!parent.isNull() && parent.isElementNode() && |
| - !parent.to<WebElement>().hasTagName("li")) { |
| + !parent.to<WebElement>().hasTagName(kListItem)) { |
| parent = parent.parentNode(); |
| } |
| - if (!parent.isNull() && HasTagName(parent, "li")) |
| + if (!parent.isNull() && HasTagName(parent, kListItem)) |
| return FindChildText(parent); |
| return string16(); |
| @@ -258,9 +270,11 @@ string16 InferLabelFromListItem(const WebFormControlElement& element) { |
| // or <tr><td><b>Some Text</b></td><td><b><input ...></b></td></tr> |
| // or <tr><th><b>Some Text</b></th><td><b><input ...></b></td></tr> |
| string16 InferLabelFromTableColumn(const WebFormControlElement& element) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kTableCell, ("td")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kTableHeader, ("th")); |
| WebNode parent = element.parentNode(); |
| while (!parent.isNull() && parent.isElementNode() && |
| - !parent.to<WebElement>().hasTagName("td")) { |
| + !parent.to<WebElement>().hasTagName(kTableCell)) { |
| parent = parent.parentNode(); |
| } |
| @@ -272,7 +286,7 @@ string16 InferLabelFromTableColumn(const WebFormControlElement& element) { |
| string16 inferred_label; |
| WebNode previous = parent.previousSibling(); |
| while (inferred_label.empty() && !previous.isNull()) { |
| - if (HasTagName(previous, "td") || HasTagName(previous, "th")) |
| + if (HasTagName(previous, kTableCell) || HasTagName(previous, kTableHeader)) |
| inferred_label = FindChildText(previous); |
| previous = previous.previousSibling(); |
| @@ -285,9 +299,10 @@ string16 InferLabelFromTableColumn(const WebFormControlElement& element) { |
| // surrounding table structure, |
| // e.g. <tr><td>Some Text</td></tr><tr><td><input ...></td></tr> |
| string16 InferLabelFromTableRow(const WebFormControlElement& element) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kTableRow, ("tr")); |
| WebNode parent = element.parentNode(); |
| while (!parent.isNull() && parent.isElementNode() && |
| - !parent.to<WebElement>().hasTagName("tr")) { |
| + !parent.to<WebElement>().hasTagName(kTableRow)) { |
| parent = parent.parentNode(); |
| } |
| @@ -299,7 +314,7 @@ string16 InferLabelFromTableRow(const WebFormControlElement& element) { |
| string16 inferred_label; |
| WebNode previous = parent.previousSibling(); |
| while (inferred_label.empty() && !previous.isNull()) { |
| - if (HasTagName(previous, "tr")) |
| + if (HasTagName(previous, kTableRow)) |
| inferred_label = FindChildText(previous); |
| previous = previous.previousSibling(); |
| @@ -313,17 +328,20 @@ string16 InferLabelFromTableRow(const WebFormControlElement& element) { |
| // e.g. <div>Some Text<span><input ...></span></div> |
| // e.g. <div>Some Text</div><div><input ...></div> |
| string16 InferLabelFromDivTable(const WebFormControlElement& element) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kDiv, ("div")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kTable, ("table")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kFieldSet, ("fieldset")); |
| WebNode node = element.parentNode(); |
| bool looking_for_parent = true; |
| // Search the sibling and parent <div>s until we find a candidate label. |
| string16 inferred_label; |
| while (inferred_label.empty() && !node.isNull()) { |
| - if (HasTagName(node, "div")) { |
| + if (HasTagName(node, kDiv)) { |
| looking_for_parent = false; |
| inferred_label = FindChildText(node); |
| } else if (looking_for_parent && |
| - (HasTagName(node, "table") || HasTagName(node, "fieldset"))) { |
| + (HasTagName(node, kTable) || HasTagName(node, kFieldSet))) { |
| // If the element is in a table or fieldset, its label most likely is too. |
| break; |
| } |
| @@ -347,12 +365,14 @@ string16 InferLabelFromDivTable(const WebFormControlElement& element) { |
| // e.g. <dl><dt>Some Text</dt><dd><input ...></dd></dl> |
| // e.g. <dl><dt><b>Some Text</b></dt><dd><b><input ...></b></dd></dl> |
| string16 InferLabelFromDefinitionList(const WebFormControlElement& element) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kDefinitionData, ("dd")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kDefinitionTag, ("dt")); |
| WebNode parent = element.parentNode(); |
| while (!parent.isNull() && parent.isElementNode() && |
| - !parent.to<WebElement>().hasTagName("dd")) |
| + !parent.to<WebElement>().hasTagName(kDefinitionData)) |
| parent = parent.parentNode(); |
| - if (parent.isNull() || !HasTagName(parent, "dd")) |
| + if (parent.isNull() || !HasTagName(parent, kDefinitionData)) |
| return string16(); |
| // Skip by any intervening text nodes. |
| @@ -360,7 +380,7 @@ string16 InferLabelFromDefinitionList(const WebFormControlElement& element) { |
| while (!previous.isNull() && previous.isTextNode()) |
| previous = previous.previousSibling(); |
| - if (previous.isNull() || !HasTagName(previous, "dt")) |
| + if (previous.isNull() || !HasTagName(previous, kDefinitionTag)) |
| return string16(); |
| return FindChildText(previous); |
| @@ -593,8 +613,9 @@ bool IsAutofillableInputElement(const WebInputElement* element) { |
| const string16 GetFormIdentifier(const WebFormElement& form) { |
| string16 identifier = form.name(); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kId, ("id")); |
| if (identifier.empty()) |
| - identifier = form.getAttribute(WebString("id")); |
| + identifier = form.getAttribute(kId); |
| return identifier; |
| } |
| @@ -663,6 +684,7 @@ void WebFormControlElementToFormField(const WebFormControlElement& element, |
| FormFieldData* field) { |
| DCHECK(field); |
| DCHECK(!element.isNull()); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kAutocomplete, ("autocomplete")); |
| // The label is not officially part of a WebFormControlElement; however, the |
| // labels for all form control elements are scraped from the DOM and set in |
| @@ -670,7 +692,7 @@ void WebFormControlElementToFormField(const WebFormControlElement& element, |
| field->name = element.nameForAutofill(); |
| field->form_control_type = UTF16ToUTF8(element.formControlType()); |
| field->autocomplete_attribute = |
| - UTF16ToUTF8(element.getAttribute("autocomplete")); |
| + UTF16ToUTF8(element.getAttribute(kAutocomplete)); |
| if (field->autocomplete_attribute.size() > kMaxDataLength) { |
| // Discard overly long attribute values to avoid DOS-ing the browser |
| // process. However, send over a default string to indicate that the |
| @@ -741,6 +763,10 @@ bool WebFormElementToFormData( |
| ExtractMask extract_mask, |
| FormData* form, |
| FormFieldData* field) { |
| + CR_DEFINE_STATIC_LOCAL(WebString, kLabel, ("label")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kFor, ("for")); |
| + CR_DEFINE_STATIC_LOCAL(WebString, kHidden, ("hidden")); |
| + |
| const WebFrame* frame = form_element.document().frame(); |
| if (!frame) |
| return false; |
| @@ -806,7 +832,7 @@ bool WebFormElementToFormData( |
| // element's name as a key into the <name, FormFieldData> map to find the |
| // previously created FormFieldData and set the FormFieldData's label to the |
| // label.firstChild().nodeValue() of the label element. |
| - WebNodeList labels = form_element.getElementsByTagName("label"); |
| + WebNodeList labels = form_element.getElementsByTagName(kLabel); |
| for (unsigned i = 0; i < labels.length(); ++i) { |
| WebLabelElement label = labels.item(i).to<WebLabelElement>(); |
| WebFormControlElement field_element = |
| @@ -816,10 +842,10 @@ bool WebFormElementToFormData( |
| if (field_element.isNull()) { |
| // Sometimes site authors will incorrectly specify the corresponding |
| // field element's name rather than its id, so we compensate here. |
| - element_name = label.getAttribute("for"); |
| + element_name = label.getAttribute(kFor); |
| } else if ( |
| !field_element.isFormControlElement() || |
| - field_element.formControlType() == WebString::fromUTF8("hidden")) { |
| + field_element.formControlType() == kHidden) { |
| continue; |
| } else { |
| element_name = field_element.nameForAutofill(); |