summaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-13 08:23:05 +0000
committerisherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-13 08:23:05 +0000
commit03f10dadd98fc09673da36afd57e2595b30be976 (patch)
tree97c55107d4963be793c026da700ed7cb0e4957bb /components
parent6619abc862f535996e4dff2f51d84d9389a8e41b (diff)
downloadchromium_src-03f10dadd98fc09673da36afd57e2595b30be976.zip
chromium_src-03f10dadd98fc09673da36afd57e2595b30be976.tar.gz
chromium_src-03f10dadd98fc09673da36afd57e2595b30be976.tar.bz2
[Autofill] Make AutofillAgent the only PageClickListener
In a follow-up CL, I will teach the AutofillAgent to forward click events to the PasswordAutofillAgent, as it does for keyboard events. BUG=178313 Review URL: https://chromiumcodereview.appspot.com/13591003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194091 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components')
-rw-r--r--components/autofill/renderer/autofill_agent.cc13
-rw-r--r--components/autofill/renderer/autofill_agent.h4
-rw-r--r--components/autofill/renderer/page_click_listener.h8
-rw-r--r--components/autofill/renderer/page_click_tracker.cc34
-rw-r--r--components/autofill/renderer/page_click_tracker.h19
-rw-r--r--components/autofill/renderer/password_autofill_agent.cc16
-rw-r--r--components/autofill/renderer/password_autofill_agent.h10
7 files changed, 26 insertions, 78 deletions
diff --git a/components/autofill/renderer/autofill_agent.cc b/components/autofill/renderer/autofill_agent.cc
index acf4973..4c975fd 100644
--- a/components/autofill/renderer/autofill_agent.cc
+++ b/components/autofill/renderer/autofill_agent.cc
@@ -20,6 +20,7 @@
#include "components/autofill/common/form_field_data.h"
#include "components/autofill/common/web_element_descriptor.h"
#include "components/autofill/renderer/form_autofill_util.h"
+#include "components/autofill/renderer/page_click_tracker.h"
#include "components/autofill/renderer/password_autofill_agent.h"
#include "content/public/common/password_form.h"
#include "content/public/common/ssl_status.h"
@@ -154,6 +155,10 @@ AutofillAgent::AutofillAgent(content::RenderView* render_view,
ignore_text_changes_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
render_view->GetWebView()->setAutofillClient(this);
+
+ // The PageClickTracker is a RenderViewObserver, and hence will be freed when
+ // the RenderView is destroyed.
+ new PageClickTracker(render_view, this);
}
AutofillAgent::~AutofillAgent() {}
@@ -347,19 +352,15 @@ void AutofillAgent::setIgnoreTextChanges(bool ignore) {
ignore_text_changes_ = ignore;
}
-bool AutofillAgent::InputElementClicked(const WebInputElement& element,
+void AutofillAgent::InputElementClicked(const WebInputElement& element,
bool was_focused,
bool is_focused) {
if (was_focused)
ShowSuggestions(element, true, false, true);
-
- return false;
}
-bool AutofillAgent::InputElementLostFocus() {
+void AutofillAgent::InputElementLostFocus() {
HideHostAutofillUi();
-
- return false;
}
void AutofillAgent::didAcceptAutofillSuggestion(const WebNode& node,
diff --git a/components/autofill/renderer/autofill_agent.h b/components/autofill/renderer/autofill_agent.h
index 0e93043..b6da184 100644
--- a/components/autofill/renderer/autofill_agent.h
+++ b/components/autofill/renderer/autofill_agent.h
@@ -73,10 +73,10 @@ class AutofillAgent : public content::RenderViewObserver,
virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE;
// PageClickListener:
- virtual bool InputElementClicked(const WebKit::WebInputElement& element,
+ virtual void InputElementClicked(const WebKit::WebInputElement& element,
bool was_focused,
bool is_focused) OVERRIDE;
- virtual bool InputElementLostFocus() OVERRIDE;
+ virtual void InputElementLostFocus() OVERRIDE;
// WebKit::WebAutofillClient:
virtual void didAcceptAutofillSuggestion(const WebKit::WebNode& node,
diff --git a/components/autofill/renderer/page_click_listener.h b/components/autofill/renderer/page_click_listener.h
index 6a29f1b..7101722 100644
--- a/components/autofill/renderer/page_click_listener.h
+++ b/components/autofill/renderer/page_click_listener.h
@@ -19,17 +19,13 @@ class PageClickListener {
// Notification that |element| was clicked.
// |was_focused| is true if |element| had focus BEFORE the click.
// |is_focused| is true if |element| has focus AFTER the click was processed.
- // If this method returns true, the notification will not be propagated to
- // other listeners.
- virtual bool InputElementClicked(const WebKit::WebInputElement& element,
+ virtual void InputElementClicked(const WebKit::WebInputElement& element,
bool was_focused,
bool is_focused) = 0;
// If the previously focused element was an input field, listeners are
// informed that the text field has lost its focus.
- // If this method returns true, the notification will not be propagated to
- // other listeners.
- virtual bool InputElementLostFocus() = 0;
+ virtual void InputElementLostFocus() = 0;
protected:
virtual ~PageClickListener() {}
diff --git a/components/autofill/renderer/page_click_tracker.cc b/components/autofill/renderer/page_click_tracker.cc
index 0561684..54c8f2f 100644
--- a/components/autofill/renderer/page_click_tracker.cc
+++ b/components/autofill/renderer/page_click_tracker.cc
@@ -58,9 +58,11 @@ bool DidSelectedTextFieldLoseFocus(const WebNode& newly_clicked_node) {
namespace autofill {
-PageClickTracker::PageClickTracker(content::RenderView* render_view)
+PageClickTracker::PageClickTracker(content::RenderView* render_view,
+ PageClickListener* listener)
: content::RenderViewObserver(render_view),
- was_focused_(false) {
+ was_focused_(false),
+ listener_(listener) {
}
PageClickTracker::~PageClickTracker() {
@@ -85,20 +87,7 @@ void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) {
return;
bool is_focused = (last_node_clicked_ == render_view()->GetFocusedNode());
- ObserverListBase<PageClickListener>::Iterator it(listeners_);
- PageClickListener* listener;
- while ((listener = it.GetNext()) != NULL) {
- if (listener->InputElementClicked(input_element, was_focused_, is_focused))
- break;
- }
-}
-
-void PageClickTracker::AddListener(PageClickListener* listener) {
- listeners_.AddObserver(listener);
-}
-
-void PageClickTracker::RemoveListener(PageClickListener* listener) {
- listeners_.RemoveObserver(listener);
+ listener_->InputElementClicked(input_element, was_focused_, is_focused);
}
void PageClickTracker::DidFinishDocumentLoad(WebKit::WebFrame* frame) {
@@ -107,7 +96,7 @@ void PageClickTracker::DidFinishDocumentLoad(WebKit::WebFrame* frame) {
}
void PageClickTracker::FrameDetached(WebKit::WebFrame* frame) {
- FrameList::iterator iter =
+ std::vector<WebKit::WebFrame*>::iterator iter =
std::find(tracked_frames_.begin(), tracked_frames_.end(), frame);
if (iter == tracked_frames_.end()) {
// Some frames might never load contents so we may not have a listener on
@@ -150,15 +139,8 @@ void PageClickTracker::handleEvent(const WebDOMEvent& event) {
void PageClickTracker::HandleTextFieldMaybeLosingFocus(
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;
- }
+ if (DidSelectedTextFieldLoseFocus(newly_clicked_node))
+ listener_->InputElementLostFocus();
}
} // namespace autofill
diff --git a/components/autofill/renderer/page_click_tracker.h b/components/autofill/renderer/page_click_tracker.h
index b95259a3..009ce9b 100644
--- a/components/autofill/renderer/page_click_tracker.h
+++ b/components/autofill/renderer/page_click_tracker.h
@@ -8,7 +8,6 @@
#include <vector>
#include "base/basictypes.h"
-#include "base/observer_list.h"
#include "content/public/renderer/render_view_observer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMEventListener.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebNode.h"
@@ -17,7 +16,6 @@ namespace autofill {
class PageClickListener;
-
// This class is responsible for tracking clicks on elements in web pages and
// notifiying the associated listener when a node is clicked.
// Compared to a simple WebDOMEventListener, it offers the added capability of
@@ -33,16 +31,12 @@ class PageClickListener;
class PageClickTracker : public content::RenderViewObserver,
public WebKit::WebDOMEventListener {
public:
- explicit PageClickTracker(content::RenderView* render_view);
+ // The |listener| will be notified when an element is clicked. It must
+ // outlive this class.
+ PageClickTracker(content::RenderView* render_view,
+ PageClickListener* listener);
virtual ~PageClickTracker();
- // Adds/removes a listener for getting notification when an element is
- // clicked. Note that the order of insertion is important as a listener when
- // notified can decide to stop the propagation of the event (so that listeners
- // inserted after don't get the notification).
- void AddListener(PageClickListener* listener);
- void RemoveListener(PageClickListener* listener);
-
private:
// RenderView::Observer implementation.
virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame) OVERRIDE;
@@ -64,11 +58,10 @@ class PageClickTracker : public content::RenderViewObserver,
bool was_focused_;
// The frames we are listening to for mouse events.
- typedef std::vector<WebKit::WebFrame*> FrameList;
- FrameList tracked_frames_;
+ std::vector<WebKit::WebFrame*> tracked_frames_;
// The listener getting the actual notifications.
- ObserverList<PageClickListener> listeners_;
+ PageClickListener* listener_;
DISALLOW_COPY_AND_ASSIGN(PageClickTracker);
};
diff --git a/components/autofill/renderer/password_autofill_agent.cc b/components/autofill/renderer/password_autofill_agent.cc
index 0fcd1b0..8372a73 100644
--- a/components/autofill/renderer/password_autofill_agent.cc
+++ b/components/autofill/renderer/password_autofill_agent.cc
@@ -415,22 +415,6 @@ void PasswordAutofillAgent::FrameWillClose(WebKit::WebFrame* frame) {
FrameClosing(frame);
}
-
-////////////////////////////////////////////////////////////////////////////////
-// PageClickListener implementation:
-
-bool PasswordAutofillAgent::InputElementClicked(
- const WebKit::WebInputElement& element,
- bool was_focused,
- bool is_focused) {
- // TODO(jcivelli): http://crbug.com/51644 Implement behavior.
- return false;
-}
-
-bool PasswordAutofillAgent::InputElementLostFocus() {
- return false;
-}
-
void PasswordAutofillAgent::OnFillPasswordForm(
const PasswordFormFillData& form_data,
bool disable_popup) {
diff --git a/components/autofill/renderer/password_autofill_agent.h b/components/autofill/renderer/password_autofill_agent.h
index 5f787d6..1816ccb 100644
--- a/components/autofill/renderer/password_autofill_agent.h
+++ b/components/autofill/renderer/password_autofill_agent.h
@@ -10,7 +10,6 @@
#include "base/memory/weak_ptr.h"
#include "components/autofill/common/password_form_fill_data.h"
-#include "components/autofill/renderer/page_click_listener.h"
#include "content/public/renderer/render_view_observer.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputElement.h"
@@ -24,8 +23,7 @@ namespace autofill {
// This class is responsible for filling password forms.
// There is one PasswordAutofillAgent per RenderView.
-class PasswordAutofillAgent : public content::RenderViewObserver,
- public PageClickListener {
+class PasswordAutofillAgent : public content::RenderViewObserver {
public:
explicit PasswordAutofillAgent(content::RenderView* render_view);
virtual ~PasswordAutofillAgent();
@@ -71,12 +69,6 @@ class PasswordAutofillAgent : public content::RenderViewObserver,
virtual void FrameDetached(WebKit::WebFrame* frame) OVERRIDE;
virtual void FrameWillClose(WebKit::WebFrame* frame) OVERRIDE;
- // PageClickListener:
- virtual bool InputElementClicked(const WebKit::WebInputElement& element,
- bool was_focused,
- bool is_focused) OVERRIDE;
- virtual bool InputElementLostFocus() OVERRIDE;
-
// RenderView IPC handlers:
void OnFillPasswordForm(const PasswordFormFillData& form_data,
bool disable_popup);