Chromium Code Reviews| Index: chrome/renderer/page_click_tracker.cc |
| diff --git a/chrome/renderer/page_click_tracker.cc b/chrome/renderer/page_click_tracker.cc |
| index 2bbb6d0c4deff16e5dff5f0cef33ef336fae73c2..d59d9ef460ce58bf283cdba845968b72352be805 100644 |
| --- a/chrome/renderer/page_click_tracker.cc |
| +++ b/chrome/renderer/page_click_tracker.cc |
| @@ -44,6 +44,17 @@ const WebInputElement GetTextWebInputElement(const WebNode& node) { |
| return element.toConst<WebInputElement>(); |
| } |
| +// 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) { |
| + WebKit::WebNode focused_node = newly_clicked_node.document().focusedNode(); |
| + |
| + if (focused_node.isNull() || GetTextWebInputElement(focused_node).isNull()) |
| + return false; |
| + |
| + return focused_node != newly_clicked_node; |
| +} |
| + |
| } // namespace |
| PageClickTracker::PageClickTracker(content::RenderView* render_view) |
| @@ -79,8 +90,6 @@ void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) { |
| if (listener->InputElementClicked(input_element, was_focused_, is_focused)) |
| break; |
| } |
| - |
| - last_node_clicked_.reset(); |
| } |
| void PageClickTracker::AddListener(PageClickListener* listener) { |
| @@ -123,10 +132,29 @@ void PageClickTracker::handleEvent(const WebDOMEvent& event) { |
| // We'll get a notification once the mouse event has been processed |
| // (DidHandleMouseEvent), we'll notify the listener at that point. |
| WebNode node = mouse_event.target(); |
| + |
| + HandleTextFieldLosingFocus(node); |
| + |
| // We are only interested in text field clicks. |
| - if (GetTextWebInputElement(node).isNull()) |
| + if (GetTextWebInputElement(node).isNull()) { |
| + last_node_clicked_.reset(); |
|
Ilya Sherman
2011/10/31 21:23:12
nit: This is now redundant, since the |last_node_c
csharp
2011/11/01 14:49:01
Done.
|
| + |
| return; |
| + } |
| last_node_clicked_ = node; |
| - was_focused_ = (render_view()->GetFocusedNode() == last_node_clicked_); |
| + was_focused_ = (node.document().focusedNode() == last_node_clicked_); |
| +} |
| + |
| +void PageClickTracker::HandleTextFieldLosingFocus( |
| + const WebNode& newly_clicked_node) { |
| + if (!DidSelectedTextFieldLoseFocus(newly_clicked_node)) |
| + return; |
| + |
| + ObserverListBase<PageClickListener>::Iterator it(listeners_); |
| + PageClickListener* listener; |
| + while ((listener = it.GetNext()) != NULL) { |
| + if (listener->InputElementLostFocus()) |
| + break; |
| + } |
| } |