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

Side by Side Diff: components/autofill/content/renderer/page_click_tracker.cc

Issue 715733002: [Android] Show autofill popup after animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hide popup when resizing the viewport resulted in movement of the focused element. Created 6 years 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/autofill/content/renderer/page_click_tracker.h" 5 #include "components/autofill/content/renderer/page_click_tracker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "components/autofill/content/renderer/form_autofill_util.h" 9 #include "components/autofill/content/renderer/form_autofill_util.h"
10 #include "components/autofill/content/renderer/page_click_listener.h" 10 #include "components/autofill/content/renderer/page_click_listener.h"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 void PageClickTracker::OnDestruct() { 78 void PageClickTracker::OnDestruct() {
79 // No-op. Don't delete |this|. 79 // No-op. Don't delete |this|.
80 } 80 }
81 81
82 void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) { 82 void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) {
83 if (event.type != WebInputEvent::MouseDown || 83 if (event.type != WebInputEvent::MouseDown ||
84 event.button != WebMouseEvent::ButtonLeft) { 84 event.button != WebMouseEvent::ButtonLeft) {
85 return; 85 return;
86 } 86 }
87 87
88 PotentialActivationAt(event.x, event.y); 88 activated_node_ = render_view()->GetFocusedElement();
89 } 89 }
90 90
91 void PageClickTracker::DidHandleGestureEvent( 91 void PageClickTracker::DidHandleGestureEvent(
92 const blink::WebGestureEvent& event) { 92 const blink::WebGestureEvent& event) {
93 if (event.type != blink::WebGestureEvent::GestureTap) 93 if (event.type != blink::WebGestureEvent::GestureTap)
94 return; 94 return;
95 95
96 PotentialActivationAt(event.x, event.y); 96 activated_node_ = render_view()->GetFocusedElement();
97 } 97 }
98 98
99 void PageClickTracker::FocusedNodeChanged(const blink::WebNode& node) { 99 void PageClickTracker::FocusedNodeChanged(const blink::WebNode& node) {
100 was_focused_before_now_ = false; 100 was_focused_before_now_ = false;
101 // If the focus change was a result of handling a click or tap, we'll soon get
102 // an associated event. Reset |was_focused_before_now_| to true only after the
103 // message loop unwinds.
104 base::MessageLoop::current()->PostTask(
105 FROM_HERE,
106 base::Bind(&PageClickTracker::SetWasFocused,
107 weak_ptr_factory_.GetWeakPtr()));
108 } 101 }
109 102
110 void PageClickTracker::PotentialActivationAt(int x, int y) { 103 void PageClickTracker::FocusChangeComplete() {
111 blink::WebNode focused_node = render_view()->GetFocusedElement(); 104 if (activated_node_.isNull())
112 if (focused_node.isNull())
113 return; 105 return;
114 106
115 if (!render_view()->NodeContainsPoint(focused_node, gfx::Point(x, y))) 107 NodeActivation(activated_node_);
116 return; 108 activated_node_.reset();
109 }
117 110
118 const WebInputElement input_element = GetTextWebInputElement(focused_node); 111 void PageClickTracker::NodeActivation(const blink::WebNode& node) {
112 const WebInputElement input_element = GetTextWebInputElement(node);
119 if (!input_element.isNull()) { 113 if (!input_element.isNull()) {
120 listener_->FormControlElementClicked(input_element, 114 listener_->FormControlElementClicked(input_element,
121 was_focused_before_now_); 115 was_focused_before_now_);
116 was_focused_before_now_ = true;
122 return; 117 return;
123 } 118 }
124 119
125 const WebTextAreaElement textarea_element = 120 const WebTextAreaElement textarea_element = GetWebTextAreaElement(node);
126 GetWebTextAreaElement(focused_node);
127 if (!textarea_element.isNull()) { 121 if (!textarea_element.isNull()) {
128 listener_->FormControlElementClicked(textarea_element, 122 listener_->FormControlElementClicked(textarea_element,
129 was_focused_before_now_); 123 was_focused_before_now_);
124 was_focused_before_now_ = true;
130 } 125 }
131 } 126 }
132 127
133 void PageClickTracker::SetWasFocused() {
134 was_focused_before_now_ = true;
135 }
136
137 } // namespace autofill 128 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698