| Index: chrome/browser/renderer_host/render_widget_host.cc
|
| diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc
|
| index da18bd86582d1f681ca00718f76babb285236043..464e3639c325c96cce0a109b71e218e877d61a06 100644
|
| --- a/chrome/browser/renderer_host/render_widget_host.cc
|
| +++ b/chrome/browser/renderer_host/render_widget_host.cc
|
| @@ -331,6 +331,13 @@ void RenderWidgetHost::ForwardMouseEvent(const WebMouseEvent& mouse_event) {
|
| OnUserGesture();
|
| }
|
|
|
| + if (mouse_event.type == WebInputEvent::MouseUp ||
|
| + mouse_event.type == WebInputEvent::MouseDown) {
|
| + // We keep track of these events in case the renderer doesn't handle them.
|
| + // In that case we can then implement some default behaviour.
|
| + mouse_button_queue_.push(new WebMouseEvent(mouse_event));
|
| + }
|
| +
|
| ForwardInputEvent(mouse_event, sizeof(WebMouseEvent));
|
| }
|
|
|
| @@ -669,6 +676,10 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
|
| bool r = message.ReadInt(&iter, &type);
|
| DCHECK(r);
|
|
|
| + bool processed = false;
|
| + r = message.ReadBool(&iter, &processed);
|
| + DCHECK(r);
|
| +
|
| if (type == WebInputEvent::MouseMove) {
|
| mouse_move_pending_ = false;
|
|
|
| @@ -677,9 +688,22 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
|
| DCHECK(next_mouse_move_->type == WebInputEvent::MouseMove);
|
| ForwardMouseEvent(*next_mouse_move_);
|
| }
|
| - }
|
| + } else if (type == WebInputEvent::MouseDown ||
|
| + type == WebInputEvent::MouseUp) {
|
| + if (mouse_button_queue_.size() == 0 ||
|
| + mouse_button_queue_.front()->type != type) {
|
| + LOG(ERROR) << "We got a mouse event from the renderer, but we don't "
|
| + "remember sending it!";
|
| + } else {
|
| + const MouseButtonQueue::value_type front_item =
|
| + mouse_button_queue_.front();
|
| + mouse_button_queue_.pop();
|
|
|
| - if (WebInputEvent::isKeyboardEventType(type)) {
|
| + if (!processed)
|
| + UnhandledMouseButtonEvent(front_item);
|
| + delete front_item;
|
| + }
|
| + } else if (WebInputEvent::isKeyboardEventType(type)) {
|
| if (key_queue_.size() == 0) {
|
| LOG(ERROR) << "Got a KeyEvent back from the renderer but we "
|
| << "don't seem to have sent it to the renderer!";
|
| @@ -688,10 +712,6 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
|
| << "the renderer. (" << key_queue_.front().type << " vs. "
|
| << type << "). Ignoring event.";
|
| } else {
|
| - bool processed = false;
|
| - r = message.ReadBool(&iter, &processed);
|
| - DCHECK(r);
|
| -
|
| KeyQueue::value_type front_item = key_queue_.front();
|
| key_queue_.pop();
|
|
|
|
|