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

Unified Diff: chrome/renderer/page_click_tracker.cc

Issue 6151011: Introduce RenderView::Observer interface so that RenderView doesn't have to k... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/page_click_tracker.h ('k') | chrome/renderer/page_click_tracker_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/page_click_tracker.cc
===================================================================
--- chrome/renderer/page_click_tracker.cc (revision 71253)
+++ chrome/renderer/page_click_tracker.cc (working copy)
@@ -26,12 +26,12 @@
using WebKit::WebView;
PageClickTracker::PageClickTracker(RenderView* render_view)
- : render_view_(render_view),
+ : RenderViewObserver(render_view),
was_focused_(false) {
}
PageClickTracker::~PageClickTracker() {
- // Note that even though RenderView calls StopTrackingFrame when notified that
+ // Note that even though RenderView calls FrameDetached when notified that
// a frame was closed, it might not always get that notification from WebKit
// for all frames.
// By the time we get here, the frame could have been destroyed so we cannot
@@ -39,27 +39,6 @@
// be invalid.
}
-void PageClickTracker::StartTrackingFrame(WebFrame* frame) {
- tracked_frames_.push_back(frame);
- frame->document().addEventListener("mousedown", this, false);
-}
-
-void PageClickTracker::StopTrackingFrame(WebFrame* frame, bool frame_detached) {
- FrameList::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
- // them. Calling removeEventListener() on them would trigger an assert, so
- // we need to keep track of which frames we are listening to.
- return;
- }
- tracked_frames_.erase(iter);
- // If the frame has been detached, all event listeners have already been
- // removed.
- if (!frame_detached)
- frame->document().removeEventListener("mousedown", this, false);
-}
-
void PageClickTracker::DidHandleMouseEvent(const WebMouseEvent& event) {
if (event.type != WebInputEvent::MouseDown ||
last_node_clicked_.isNull()) {
@@ -98,6 +77,38 @@
listeners_.RemoveObserver(listener);
}
+bool PageClickTracker::OnMessageReceived(const IPC::Message& message) {
+ if (message.type() == ViewMsg_HandleInputEvent::ID) {
+ void* iter = NULL;
+ const char* data;
+ int data_length;
+ if (message.ReadData(&iter, &data, &data_length)) {
+ const WebInputEvent* input_event =
+ reinterpret_cast<const WebInputEvent*>(data);
+ if (WebInputEvent::isMouseEventType(input_event->type))
+ DidHandleMouseEvent(*(static_cast<const WebMouseEvent*>(input_event)));
+ }
+ }
+ return false;
+}
+
+void PageClickTracker::DidFinishDocumentLoad(WebKit::WebFrame* frame) {
+ tracked_frames_.push_back(frame);
+ frame->document().addEventListener("mousedown", this, false);
+}
+
+void PageClickTracker::FrameDetached(WebKit::WebFrame* frame) {
+ FrameList::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
+ // them. Calling removeEventListener() on them would trigger an assert, so
+ // we need to keep track of which frames we are listening to.
+ return;
+ }
+ tracked_frames_.erase(iter);
+}
+
void PageClickTracker::handleEvent(const WebDOMEvent& event) {
last_node_clicked_.reset();
@@ -117,7 +128,7 @@
}
WebNode PageClickTracker::GetFocusedNode() {
- WebView* web_view = render_view_->webview();
+ WebView* web_view = render_view()->webview();
if (!web_view)
return WebNode();
« no previous file with comments | « chrome/renderer/page_click_tracker.h ('k') | chrome/renderer/page_click_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698