Chromium Code Reviews| 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..c8f547504f5d9ee460b28d7fac6a03a7f614df5a 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 { |
| @@ -88,50 +78,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)) { |
|
Garrett Casto
2015/01/06 20:01:09
Was the old code incorrect when the page was zoome
please use gerrit instead
2015/01/13 02:14:55
Added a test. The old code was incorrect when the
|
| + return; |
| } |
| -} |
| -void PageClickTracker::SetWasFocused() { |
| - was_focused_before_now_ = true; |
| + clicked_node_ = focused_element; |
| } |
| } // namespace autofill |