| 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 14ceda82fd5420864ff561f546dbe7aeb7f84229..4e54f9e638668a2b09a994b45e0a31e4fb37fc8c 100644
 | 
| --- a/components/autofill/content/renderer/page_click_tracker.cc
 | 
| +++ b/components/autofill/content/renderer/page_click_tracker.cc
 | 
| @@ -4,13 +4,9 @@
 | 
|  
 | 
|  #include "components/autofill/content/renderer/page_click_tracker.h"
 | 
|  
 | 
| -#include "base/bind.h"
 | 
| -#include "base/message_loop/message_loop.h"
 | 
|  #include "components/autofill/content/renderer/form_autofill_util.h"
 | 
|  #include "components/autofill/content/renderer/page_click_listener.h"
 | 
|  #include "content/public/renderer/render_view.h"
 | 
| -#include "third_party/WebKit/public/platform/WebString.h"
 | 
| -#include "third_party/WebKit/public/web/WebDOMMouseEvent.h"
 | 
|  #include "third_party/WebKit/public/web/WebDocument.h"
 | 
|  #include "third_party/WebKit/public/web/WebInputElement.h"
 | 
|  #include "third_party/WebKit/public/web/WebInputEvent.h"
 | 
| @@ -18,19 +14,13 @@
 | 
|  #include "third_party/WebKit/public/web/WebTextAreaElement.h"
 | 
|  #include "third_party/WebKit/public/web/WebView.h"
 | 
|  
 | 
| -using blink::WebDOMEvent;
 | 
| -using blink::WebDOMMouseEvent;
 | 
|  using blink::WebElement;
 | 
| -using blink::WebFormControlElement;
 | 
| -using blink::WebFrame;
 | 
|  using blink::WebGestureEvent;
 | 
|  using blink::WebInputElement;
 | 
|  using blink::WebInputEvent;
 | 
|  using blink::WebMouseEvent;
 | 
|  using blink::WebNode;
 | 
| -using blink::WebString;
 | 
|  using blink::WebTextAreaElement;
 | 
| -using blink::WebView;
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| @@ -68,8 +58,7 @@ PageClickTracker::PageClickTracker(content::RenderView* render_view,
 | 
|                                     PageClickListener* listener)
 | 
|      : content::RenderViewObserver(render_view),
 | 
|        was_focused_before_now_(false),
 | 
| -      listener_(listener),
 | 
| -      weak_ptr_factory_(this) {
 | 
| +      listener_(listener) {
 | 
|  }
 | 
|  
 | 
|  PageClickTracker::~PageClickTracker() {
 | 
| @@ -88,50 +77,48 @@ void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) {
 | 
|    PotentialActivationAt(event.x, event.y);
 | 
|  }
 | 
|  
 | 
| -void PageClickTracker::DidHandleGestureEvent(
 | 
| -    const blink::WebGestureEvent& event) {
 | 
| -  if (event.type != blink::WebGestureEvent::GestureTap)
 | 
| +void PageClickTracker::DidHandleGestureEvent(const WebGestureEvent& event) {
 | 
| +  if (event.type != WebGestureEvent::GestureTap)
 | 
|      return;
 | 
|  
 | 
|    PotentialActivationAt(event.x, event.y);
 | 
|  }
 | 
|  
 | 
| -void PageClickTracker::FocusedNodeChanged(const blink::WebNode& node) {
 | 
| +void PageClickTracker::FocusedNodeChanged(const WebNode& node) {
 | 
|    was_focused_before_now_ = false;
 | 
| -  // If the focus change was a result of handling a click or tap, we'll soon get
 | 
| -  // an associated event. Reset |was_focused_before_now_| to true only after the
 | 
| -  // message loop unwinds.
 | 
| -  base::MessageLoop::current()->PostTask(
 | 
| -      FROM_HERE,
 | 
| -      base::Bind(&PageClickTracker::SetWasFocused,
 | 
| -                 weak_ptr_factory_.GetWeakPtr()));
 | 
|  }
 | 
|  
 | 
| -void PageClickTracker::PotentialActivationAt(int x, int y) {
 | 
| -  blink::WebNode focused_node = render_view()->GetFocusedElement();
 | 
| -  if (focused_node.isNull())
 | 
| -    return;
 | 
| +void PageClickTracker::FocusChangeComplete() {
 | 
| +  if (!clicked_node_.isNull()) {
 | 
| +    const WebInputElement input_element = GetTextWebInputElement(clicked_node_);
 | 
| +    if (!input_element.isNull()) {
 | 
| +      listener_->FormControlElementClicked(input_element,
 | 
| +                                           was_focused_before_now_);
 | 
| +    } else {
 | 
| +      const WebTextAreaElement textarea_element =
 | 
| +          GetWebTextAreaElement(clicked_node_);
 | 
| +      if (!textarea_element.isNull()) {
 | 
| +        listener_->FormControlElementClicked(textarea_element,
 | 
| +                                             was_focused_before_now_);
 | 
| +      }
 | 
| +    }
 | 
| +  }
 | 
|  
 | 
| -  if (!render_view()->NodeContainsPoint(focused_node, gfx::Point(x, y)))
 | 
| -    return;
 | 
| +  clicked_node_.reset();
 | 
| +  was_focused_before_now_ = true;
 | 
| +}
 | 
|  
 | 
| -  const WebInputElement input_element = GetTextWebInputElement(focused_node);
 | 
| -  if (!input_element.isNull()) {
 | 
| -    listener_->FormControlElementClicked(input_element,
 | 
| -                                         was_focused_before_now_);
 | 
| +void PageClickTracker::PotentialActivationAt(int x, int y) {
 | 
| +  WebElement focused_element = render_view()->GetFocusedElement();
 | 
| +  if (focused_element.isNull())
 | 
|      return;
 | 
| -  }
 | 
|  
 | 
| -  const WebTextAreaElement textarea_element =
 | 
| -      GetWebTextAreaElement(focused_node);
 | 
| -  if (!textarea_element.isNull()) {
 | 
| -    listener_->FormControlElementClicked(textarea_element,
 | 
| -                                         was_focused_before_now_);
 | 
| +  if (!GetScaledBoundingBox(render_view()->GetWebView()->pageScaleFactor(),
 | 
| +                            &focused_element).Contains(x, y)) {
 | 
| +    return;
 | 
|    }
 | 
| -}
 | 
|  
 | 
| -void PageClickTracker::SetWasFocused() {
 | 
| -  was_focused_before_now_ = true;
 | 
| +  clicked_node_ = focused_element;
 | 
|  }
 | 
|  
 | 
|  }  // namespace autofill
 | 
| 
 |