| Index: content/browser/renderer_host/render_widget_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
|
| index 8f658171e611d39e3365897998c31bae22d588d7..3d44fc4bfa42b90b42563c67cd31ede38d71f9e5 100644
|
| --- a/content/browser/renderer_host/render_widget_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
| @@ -130,6 +130,7 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate,
|
| should_auto_resize_(false),
|
| mouse_move_pending_(false),
|
| mouse_wheel_pending_(false),
|
| + select_range_pending_(false),
|
| needs_repainting_on_restore_(false),
|
| is_unresponsive_(false),
|
| in_flight_event_count_(0),
|
| @@ -285,6 +286,7 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) {
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateIsDelayed, OnMsgUpdateIsDelayed)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_HandleInputEvent_ACK, OnMsgInputEventAck)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_BeginSmoothScroll, OnMsgBeginSmoothScroll)
|
| + IPC_MESSAGE_HANDLER(ViewHostMsg_SelectRange_ACK, OnMsgSelectRangeAck)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_Focus, OnMsgFocus)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_Blur, OnMsgBlur)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_HasTouchEventHandlers,
|
| @@ -1083,6 +1085,10 @@ void RenderWidgetHostImpl::RendererExited(base::TerminationStatus status,
|
| mouse_wheel_pending_ = false;
|
| coalesced_mouse_wheel_events_.clear();
|
|
|
| + // Must reset these to ensure that SelectRange works with a new renderer.
|
| + select_range_pending_ = false;
|
| + next_selection_range_.reset();
|
| +
|
| // Must reset these to ensure that gesture events work with a new renderer.
|
| gesture_event_filter_->Reset();
|
|
|
| @@ -1586,6 +1592,14 @@ void RenderWidgetHostImpl::TickActiveSmoothScrollGesture() {
|
| }
|
| }
|
|
|
| +void RenderWidgetHostImpl::OnMsgSelectRangeAck() {
|
| + select_range_pending_ = false;
|
| + if (next_selection_range_.get()) {
|
| + scoped_ptr<SelectionRange> next(next_selection_range_.Pass());
|
| + SelectRange(next->start, next->end);
|
| + }
|
| +}
|
| +
|
| void RenderWidgetHostImpl::ProcessWheelAck(bool processed) {
|
| mouse_wheel_pending_ = false;
|
|
|
| @@ -1878,6 +1892,16 @@ void RenderWidgetHostImpl::ScrollFocusedEditableNodeIntoRect(
|
|
|
| void RenderWidgetHostImpl::SelectRange(const gfx::Point& start,
|
| const gfx::Point& end) {
|
| + if (select_range_pending_) {
|
| + if (!next_selection_range_.get()) {
|
| + next_selection_range_.reset(new SelectionRange());
|
| + }
|
| + next_selection_range_->start = start;
|
| + next_selection_range_->end = end;
|
| + return;
|
| + }
|
| +
|
| + select_range_pending_ = true;
|
| Send(new ViewMsg_SelectRange(GetRoutingID(), start, end));
|
| }
|
|
|
|
|