Index: content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
index 1728da15397f81f3146534e1220b523969983213..2652afa065edfd4bfbfbdc56bf60c53d626f123b 100644 |
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc |
@@ -42,8 +42,6 @@ MouseWheelEventQueue::MouseWheelEventQueue(MouseWheelEventQueueClient* client, |
enable_scroll_latching_(enable_scroll_latching), |
scrolling_device_(blink::kWebGestureDeviceUninitialized) { |
DCHECK(client); |
- scroll_transaction_ms_ = |
- enable_scroll_latching_ ? kDefaultWheelScrollLatchingTransactionMs : 0; |
} |
MouseWheelEventQueue::~MouseWheelEventQueue() { |
@@ -175,51 +173,34 @@ void MouseWheelEventQueue::ProcessMouseWheelAck( |
bool needs_update = scroll_update.data.scroll_update.delta_x != 0 || |
scroll_update.data.scroll_update.delta_y != 0; |
- // If there is no update to send and the current phase is ended yet a GSB |
- // needs to be sent, this event sequence doesn't need to be generated |
- // because the events generated will be a GSB (non-synthetic) and GSE |
- // (non-synthetic). This situation arises when OSX generates double |
- // phase end information. |
- bool empty_sequence = |
- !needs_update && needs_scroll_begin_ && current_phase_ended; |
- |
if (enable_scroll_latching_) { |
- if (event_sent_for_gesture_ack_->event.momentum_phase == |
+ if (event_sent_for_gesture_ack_->event.phase == |
blink::WebMouseWheelEvent::kPhaseBegan) { |
- // Don't send the pending scrollEnd if a fling starts. |
- if (scroll_end_timer_.IsRunning()) |
- scroll_end_timer_.Stop(); |
+ SendScrollBegin(scroll_update, false); |
} |
- if (needs_update || !empty_sequence) { |
- if (needs_scroll_begin_) { |
- SendScrollBegin(scroll_update, false); |
- } |
- |
- if (needs_update) { |
- ui::LatencyInfo latency = ui::LatencyInfo(ui::SourceEventType::WHEEL); |
- latency.AddLatencyNumber( |
- ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL, |
- 0, 0); |
- client_->ForwardGestureEventWithLatencyInfo(scroll_update, latency); |
- } |
- |
- if (momentum_phase_ended) { |
- // Send GSE with if scroll latching is enabled and no fling is going |
- // to happen next. |
- SendScrollEnd(scroll_update, false); |
- } else if (scroll_phase_ended || !has_phase_info) { |
- // If scroll latching is enabled and a fling might happen next, or |
- // no phase info exists, start the scroll_end_timer_. |
- scroll_end_timer_.Start( |
- FROM_HERE, |
- base::TimeDelta::FromMilliseconds(scroll_transaction_ms_), |
- base::Bind(&MouseWheelEventQueue::SendScrollEnd, |
- base::Unretained(this), scroll_update, false)); |
- } |
+ if (needs_update) { |
+ ui::LatencyInfo latency = ui::LatencyInfo(ui::SourceEventType::WHEEL); |
+ latency.AddLatencyNumber( |
+ ui::INPUT_EVENT_LATENCY_GENERATE_SCROLL_UPDATE_FROM_MOUSE_WHEEL, 0, |
+ 0); |
+ client_->ForwardGestureEventWithLatencyInfo(scroll_update, latency); |
} |
+ if (current_phase_ended) { |
+ // Send GSE with if scroll latching is enabled and no fling is going |
+ // to happen next. |
+ SendScrollEnd(scroll_update, false); |
+ } |
} else { // !enable_scroll_latching_ |
+ |
+ // If there is no update to send and the current phase is ended yet a GSB |
+ // needs to be sent, this event sequence doesn't need to be generated |
+ // because the events generated will be a GSB (non-synthetic) and GSE |
+ // (non-synthetic). This situation arises when OSX generates double |
+ // phase end information. |
+ bool empty_sequence = |
+ !needs_update && needs_scroll_begin_ && current_phase_ended; |
if (needs_update || !empty_sequence) { |
if (needs_scroll_begin_) { |
// If no GSB has been sent, it will be a non-synthetic GSB. |
@@ -249,7 +230,6 @@ void MouseWheelEventQueue::ProcessMouseWheelAck( |
// crbug.com/526463 is fully implemented. |
SendScrollEnd(scroll_update, true); |
} else if (!has_phase_info) { |
- DCHECK_EQ(0, scroll_transaction_ms_); |
SendScrollEnd(scroll_update, false); |
} |
} |
@@ -264,14 +244,6 @@ void MouseWheelEventQueue::OnGestureScrollEvent( |
const GestureEventWithLatencyInfo& gesture_event) { |
if (gesture_event.event.GetType() == |
blink::WebInputEvent::kGestureScrollBegin) { |
- // If there is a current scroll going on and a new scroll that isn't |
- // wheel based cancel current one by sending a ScrollEnd. |
- if (scroll_end_timer_.IsRunning() && |
- gesture_event.event.source_device != blink::kWebGestureDeviceTouchpad) { |
- base::Closure task = scroll_end_timer_.user_task(); |
- scroll_end_timer_.Reset(); |
- task.Run(); |
- } |
scrolling_device_ = gesture_event.event.source_device; |
} else if (scrolling_device_ == gesture_event.event.source_device && |
(gesture_event.event.GetType() == |
@@ -279,16 +251,9 @@ void MouseWheelEventQueue::OnGestureScrollEvent( |
gesture_event.event.GetType() == |
blink::WebInputEvent::kGestureFlingStart)) { |
scrolling_device_ = blink::kWebGestureDeviceUninitialized; |
- if (scroll_end_timer_.IsRunning()) { |
- if (enable_scroll_latching_) { |
- // Don't send the pending ScrollEnd if a fling is happening. |
- // The next wheel event will still need a ScrollBegin. |
- scroll_end_timer_.Stop(); |
- needs_scroll_begin_ = true; |
- needs_scroll_end_ = false; |
- } else { |
- scroll_end_timer_.Reset(); |
- } |
+ if (enable_scroll_latching_) { |
+ needs_scroll_begin_ = true; |
+ needs_scroll_end_ = false; |
} |
} |
} |
@@ -323,9 +288,6 @@ void MouseWheelEventQueue::SendScrollEnd(WebGestureEvent update_event, |
if (!synthetic) { |
needs_scroll_begin_ = true; |
needs_scroll_end_ = false; |
- |
- if (scroll_end_timer_.IsRunning()) |
- scroll_end_timer_.Reset(); |
} |
client_->ForwardGestureEventWithLatencyInfo( |
scroll_end, ui::LatencyInfo(ui::SourceEventType::WHEEL)); |