| Index: components/autofill/content/renderer/page_click_tracker.cc | 
| diff --git a/components/autofill/content/renderer/page_click_tracker.cc b/components/autofill/content/renderer/page_click_tracker.cc | 
| index 9e2f649f023a15a00f2f7c6b42e5231b8242d565..56a40d88651710d9819efa0223d9199cd2cbed35 100644 | 
| --- a/components/autofill/content/renderer/page_click_tracker.cc | 
| +++ b/components/autofill/content/renderer/page_click_tracker.cc | 
| @@ -13,6 +13,7 @@ | 
| #include "third_party/WebKit/public/web/WebFrame.h" | 
| #include "third_party/WebKit/public/web/WebInputElement.h" | 
| #include "third_party/WebKit/public/web/WebInputEvent.h" | 
| +#include "third_party/WebKit/public/web/WebTextAreaElement.h" | 
| #include "third_party/WebKit/public/web/WebView.h" | 
|  | 
| using blink::WebDOMEvent; | 
| @@ -25,6 +26,7 @@ using blink::WebInputEvent; | 
| using blink::WebMouseEvent; | 
| using blink::WebNode; | 
| using blink::WebString; | 
| +using blink::WebTextAreaElement; | 
| using blink::WebView; | 
|  | 
| namespace { | 
| @@ -43,12 +45,32 @@ const WebInputElement GetTextWebInputElement(const WebNode& node) { | 
| return *input; | 
| } | 
|  | 
| +// Casts |node| to a WebTextAreaElement. | 
| +// Returns an empty (isNull()) WebTextAreaElement if |node| is not a | 
| +// textarea field. | 
| +const WebTextAreaElement GetTextWebTextAreaElement(const WebNode& node) { | 
| +  if (!node.isElementNode()) | 
| +    return WebTextAreaElement(); | 
| +  const WebElement element = node.toConst<WebElement>(); | 
| +  if (!element.hasTagName("textarea")) | 
| +    return WebTextAreaElement(); | 
| +  const WebFormControlElement& controlElement = | 
| +      element.toConst<WebFormControlElement>(); | 
| +  if (!autofill::IsTextAreaElement(controlElement)) | 
| +    return WebTextAreaElement(); | 
| +  const WebTextAreaElement text_area = | 
| +      controlElement.toConst<WebTextAreaElement>(); | 
| +  return text_area; | 
| +} | 
| + | 
| // Checks to see if a text field was the previously selected node and is now | 
| // losing its focus. | 
| bool DidSelectedTextFieldLoseFocus(const WebNode& newly_clicked_node) { | 
| blink::WebNode focused_node = newly_clicked_node.document().focusedNode(); | 
|  | 
| -  if (focused_node.isNull() || GetTextWebInputElement(focused_node).isNull()) | 
| +  if (focused_node.isNull() || | 
| +      (GetTextWebInputElement(focused_node).isNull() && | 
| +       GetTextWebTextAreaElement(focused_node).isNull())) | 
| return false; | 
|  | 
| return focused_node != newly_clicked_node; | 
| @@ -80,14 +102,20 @@ void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) { | 
| return; | 
| } | 
|  | 
| -  // We are only interested in text field clicks. | 
| +  // We are only interested in text field and textarea field clicks. | 
| const WebInputElement input_element = | 
| GetTextWebInputElement(last_node_clicked_); | 
| -  if (input_element.isNull()) | 
| +  const WebTextAreaElement textarea_element = | 
| +      GetTextWebTextAreaElement(last_node_clicked_); | 
| +  if (input_element.isNull() && textarea_element.isNull()) | 
| return; | 
|  | 
| bool is_focused = (last_node_clicked_ == render_view()->GetFocusedNode()); | 
| -  listener_->InputElementClicked(input_element, was_focused_, is_focused); | 
| +  if (!input_element.isNull()) | 
| +      listener_->InputElementClicked(input_element, was_focused_, is_focused); | 
| +  if (!textarea_element.isNull()) | 
| +      listener_->TextAreaElementClicked(textarea_element, | 
| +                                        was_focused_, is_focused); | 
| } | 
|  | 
| void PageClickTracker::DidFinishDocumentLoad(blink::WebFrame* frame) { | 
| @@ -130,7 +158,8 @@ void PageClickTracker::handleEvent(const WebDOMEvent& event) { | 
| HandleTextFieldMaybeLosingFocus(node); | 
|  | 
| // We are only interested in text field clicks. | 
| -  if (GetTextWebInputElement(node).isNull()) | 
| +  if (GetTextWebInputElement(node).isNull() && | 
| +      GetTextWebTextAreaElement(node).isNull()) | 
| return; | 
|  | 
| last_node_clicked_ = node; | 
| @@ -140,7 +169,7 @@ void PageClickTracker::handleEvent(const WebDOMEvent& event) { | 
| void PageClickTracker::HandleTextFieldMaybeLosingFocus( | 
| const WebNode& newly_clicked_node) { | 
| if (DidSelectedTextFieldLoseFocus(newly_clicked_node)) | 
| -    listener_->InputElementLostFocus(); | 
| +    listener_->FormControlElementLostFocus(); | 
| } | 
|  | 
| }  // namespace autofill | 
|  |