OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/render_widget_host_impl.h" | 5 #include "content/browser/renderer_host/render_widget_host_impl.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 using blink::WebGestureEvent; | 85 using blink::WebGestureEvent; |
86 using blink::WebInputEvent; | 86 using blink::WebInputEvent; |
87 using blink::WebKeyboardEvent; | 87 using blink::WebKeyboardEvent; |
88 using blink::WebMouseEvent; | 88 using blink::WebMouseEvent; |
89 using blink::WebMouseWheelEvent; | 89 using blink::WebMouseWheelEvent; |
90 using blink::WebTextDirection; | 90 using blink::WebTextDirection; |
91 | 91 |
92 namespace content { | 92 namespace content { |
93 namespace { | 93 namespace { |
94 | 94 |
| 95 // The amount of time after a mouse wheel event is sent to the delegate |
| 96 // OnUserInteraction method before another mouse wheel event will be sent. This |
| 97 // interval is used by the Blink EventHandler in its orthogonal heuristic for |
| 98 // detecting the end of a scroll event (if no event has been seen in 0.1 |
| 99 // seconds, send an end scroll). |
| 100 const double kMouseWheelCoalesceIntervalInSeconds = 0.1; |
| 101 |
95 bool g_check_for_pending_resize_ack = true; | 102 bool g_check_for_pending_resize_ack = true; |
96 | 103 |
97 // <process id, routing id> | 104 // <process id, routing id> |
98 using RenderWidgetHostID = std::pair<int32_t, int32_t>; | 105 using RenderWidgetHostID = std::pair<int32_t, int32_t>; |
99 using RoutingIDWidgetMap = | 106 using RoutingIDWidgetMap = |
100 base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>; | 107 base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>; |
101 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map = | 108 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map = |
102 LAZY_INSTANCE_INITIALIZER; | 109 LAZY_INSTANCE_INITIALIZER; |
103 | 110 |
104 // Implements the RenderWidgetHostIterator interface. It keeps a list of | 111 // Implements the RenderWidgetHostIterator interface. It keeps a list of |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 has_touch_handler_(false), | 204 has_touch_handler_(false), |
198 is_in_gesture_scroll_(false), | 205 is_in_gesture_scroll_(false), |
199 received_paint_after_load_(false), | 206 received_paint_after_load_(false), |
200 next_browser_snapshot_id_(1), | 207 next_browser_snapshot_id_(1), |
201 owned_by_render_frame_host_(false), | 208 owned_by_render_frame_host_(false), |
202 is_focused_(false), | 209 is_focused_(false), |
203 hung_renderer_delay_( | 210 hung_renderer_delay_( |
204 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), | 211 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), |
205 new_content_rendering_delay_( | 212 new_content_rendering_delay_( |
206 base::TimeDelta::FromMilliseconds(kNewContentRenderingDelayMs)), | 213 base::TimeDelta::FromMilliseconds(kNewContentRenderingDelayMs)), |
| 214 mouse_wheel_coalesce_timer_(new base::ElapsedTimer()), |
207 weak_factory_(this) { | 215 weak_factory_(this) { |
208 CHECK(delegate_); | 216 CHECK(delegate_); |
209 CHECK_NE(MSG_ROUTING_NONE, routing_id_); | 217 CHECK_NE(MSG_ROUTING_NONE, routing_id_); |
210 | 218 |
211 std::pair<RoutingIDWidgetMap::iterator, bool> result = | 219 std::pair<RoutingIDWidgetMap::iterator, bool> result = |
212 g_routing_id_widget_map.Get().insert(std::make_pair( | 220 g_routing_id_widget_map.Get().insert(std::make_pair( |
213 RenderWidgetHostID(process->GetID(), routing_id_), this)); | 221 RenderWidgetHostID(process->GetID(), routing_id_), this)); |
214 CHECK(result.second) << "Inserting a duplicate item!"; | 222 CHECK(result.second) << "Inserting a duplicate item!"; |
215 process_->AddRoute(routing_id_, this); | 223 process_->AddRoute(routing_id_, this); |
216 | 224 |
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1853 if (event.type == WebInputEvent::MouseDown || | 1861 if (event.type == WebInputEvent::MouseDown || |
1854 event.type == WebInputEvent::GestureTapDown) { | 1862 event.type == WebInputEvent::GestureTapDown) { |
1855 OnUserGesture(); | 1863 OnUserGesture(); |
1856 } | 1864 } |
1857 | 1865 |
1858 if (delegate_) { | 1866 if (delegate_) { |
1859 if (event.type == WebInputEvent::MouseDown || | 1867 if (event.type == WebInputEvent::MouseDown || |
1860 event.type == WebInputEvent::GestureTapDown || | 1868 event.type == WebInputEvent::GestureTapDown || |
1861 event.type == WebInputEvent::RawKeyDown) { | 1869 event.type == WebInputEvent::RawKeyDown) { |
1862 delegate_->OnUserInteraction(event.type); | 1870 delegate_->OnUserInteraction(event.type); |
| 1871 } else if (event.type == WebInputEvent::MouseWheel) { |
| 1872 if (mouse_wheel_coalesce_timer_->Elapsed().InSecondsF() > |
| 1873 kMouseWheelCoalesceIntervalInSeconds) { |
| 1874 delegate_->OnUserInteraction(event.type); |
| 1875 } |
| 1876 |
| 1877 mouse_wheel_coalesce_timer_.reset(new base::ElapsedTimer()); |
1863 } | 1878 } |
1864 } | 1879 } |
1865 | 1880 |
1866 return view_ ? view_->FilterInputEvent(event) | 1881 return view_ ? view_->FilterInputEvent(event) |
1867 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 1882 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
1868 } | 1883 } |
1869 | 1884 |
1870 void RenderWidgetHostImpl::IncrementInFlightEventCount() { | 1885 void RenderWidgetHostImpl::IncrementInFlightEventCount() { |
1871 increment_in_flight_event_count(); | 1886 increment_in_flight_event_count(); |
1872 if (!is_hidden_) | 1887 if (!is_hidden_) |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2191 } | 2206 } |
2192 | 2207 |
2193 #if defined(OS_WIN) | 2208 #if defined(OS_WIN) |
2194 gfx::NativeViewAccessible | 2209 gfx::NativeViewAccessible |
2195 RenderWidgetHostImpl::GetParentNativeViewAccessible() { | 2210 RenderWidgetHostImpl::GetParentNativeViewAccessible() { |
2196 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL; | 2211 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL; |
2197 } | 2212 } |
2198 #endif | 2213 #endif |
2199 | 2214 |
2200 } // namespace content | 2215 } // namespace content |
OLD | NEW |