| 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();
|
|
|
|
|