Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(603)

Side by Side Diff: content/browser/renderer_host/render_widget_host_impl.cc

Issue 1407053010: Make mouse wheel events trigger WebContentsObserver::DidGetUserInteraction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More tests Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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. Equal
97 // to blink's EventHandler interval for detecting the end of a scroll event.
98 const base::TimeDelta g_wheel_coalesce_interval =
99 base::TimeDelta::FromMilliseconds(100);
100
95 bool g_check_for_pending_resize_ack = true; 101 bool g_check_for_pending_resize_ack = true;
96 102
97 // <process id, routing id> 103 // <process id, routing id>
98 using RenderWidgetHostID = std::pair<int32_t, int32_t>; 104 using RenderWidgetHostID = std::pair<int32_t, int32_t>;
99 using RoutingIDWidgetMap = 105 using RoutingIDWidgetMap =
100 base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>; 106 base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>;
101 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map = 107 base::LazyInstance<RoutingIDWidgetMap> g_routing_id_widget_map =
102 LAZY_INSTANCE_INITIALIZER; 108 LAZY_INSTANCE_INITIALIZER;
103 109
104 // Implements the RenderWidgetHostIterator interface. It keeps a list of 110 // Implements the RenderWidgetHostIterator interface. It keeps a list of
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 has_touch_handler_(false), 203 has_touch_handler_(false),
198 is_in_gesture_scroll_(false), 204 is_in_gesture_scroll_(false),
199 received_paint_after_load_(false), 205 received_paint_after_load_(false),
200 next_browser_snapshot_id_(1), 206 next_browser_snapshot_id_(1),
201 owned_by_render_frame_host_(false), 207 owned_by_render_frame_host_(false),
202 is_focused_(false), 208 is_focused_(false),
203 hung_renderer_delay_( 209 hung_renderer_delay_(
204 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)), 210 base::TimeDelta::FromMilliseconds(kHungRendererDelayMs)),
205 new_content_rendering_delay_( 211 new_content_rendering_delay_(
206 base::TimeDelta::FromMilliseconds(kNewContentRenderingDelayMs)), 212 base::TimeDelta::FromMilliseconds(kNewContentRenderingDelayMs)),
213 wheel_coalesce_timer_(nullptr),
207 weak_factory_(this) { 214 weak_factory_(this) {
208 CHECK(delegate_); 215 CHECK(delegate_);
209 CHECK_NE(MSG_ROUTING_NONE, routing_id_); 216 CHECK_NE(MSG_ROUTING_NONE, routing_id_);
210 217
211 std::pair<RoutingIDWidgetMap::iterator, bool> result = 218 std::pair<RoutingIDWidgetMap::iterator, bool> result =
212 g_routing_id_widget_map.Get().insert(std::make_pair( 219 g_routing_id_widget_map.Get().insert(std::make_pair(
213 RenderWidgetHostID(process->GetID(), routing_id_), this)); 220 RenderWidgetHostID(process->GetID(), routing_id_), this));
214 CHECK(result.second) << "Inserting a duplicate item!"; 221 CHECK(result.second) << "Inserting a duplicate item!";
215 process_->AddRoute(routing_id_, this); 222 process_->AddRoute(routing_id_, this);
216 223
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after
1853 if (event.type == WebInputEvent::MouseDown || 1860 if (event.type == WebInputEvent::MouseDown ||
1854 event.type == WebInputEvent::GestureTapDown) { 1861 event.type == WebInputEvent::GestureTapDown) {
1855 OnUserGesture(); 1862 OnUserGesture();
1856 } 1863 }
1857 1864
1858 if (delegate_) { 1865 if (delegate_) {
1859 if (event.type == WebInputEvent::MouseDown || 1866 if (event.type == WebInputEvent::MouseDown ||
1860 event.type == WebInputEvent::GestureTapDown || 1867 event.type == WebInputEvent::GestureTapDown ||
1861 event.type == WebInputEvent::RawKeyDown) { 1868 event.type == WebInputEvent::RawKeyDown) {
1862 delegate_->OnUserInteraction(event.type); 1869 delegate_->OnUserInteraction(event.type);
1870 } else if (event.type == WebInputEvent::MouseWheel) {
1871 if (!wheel_coalesce_timer_.get() ||
1872 wheel_coalesce_timer_->Elapsed() > g_wheel_coalesce_interval) {
1873 delegate_->OnUserInteraction(event.type);
1874 }
1875 wheel_coalesce_timer_.reset(new base::ElapsedTimer());
1863 } 1876 }
1864 } 1877 }
1865 1878
1866 return view_ ? view_->FilterInputEvent(event) 1879 return view_ ? view_->FilterInputEvent(event)
1867 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1880 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1868 } 1881 }
1869 1882
1870 void RenderWidgetHostImpl::IncrementInFlightEventCount() { 1883 void RenderWidgetHostImpl::IncrementInFlightEventCount() {
1871 increment_in_flight_event_count(); 1884 increment_in_flight_event_count();
1872 if (!is_hidden_) 1885 if (!is_hidden_)
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 } 2204 }
2192 2205
2193 #if defined(OS_WIN) 2206 #if defined(OS_WIN)
2194 gfx::NativeViewAccessible 2207 gfx::NativeViewAccessible
2195 RenderWidgetHostImpl::GetParentNativeViewAccessible() { 2208 RenderWidgetHostImpl::GetParentNativeViewAccessible() {
2196 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL; 2209 return delegate_ ? delegate_->GetParentNativeViewAccessible() : NULL;
2197 } 2210 }
2198 #endif 2211 #endif
2199 2212
2200 } // namespace content 2213 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698