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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 class MockRenderWidgetHost : public RenderWidgetHostImpl { | 145 class MockRenderWidgetHost : public RenderWidgetHostImpl { |
146 public: | 146 public: |
147 MockRenderWidgetHost(RenderWidgetHostDelegate* delegate, | 147 MockRenderWidgetHost(RenderWidgetHostDelegate* delegate, |
148 RenderProcessHost* process, | 148 RenderProcessHost* process, |
149 int routing_id) | 149 int routing_id) |
150 : RenderWidgetHostImpl( | 150 : RenderWidgetHostImpl( |
151 delegate, | 151 delegate, |
152 process, | 152 process, |
153 routing_id, | 153 routing_id, |
154 false), | 154 false), |
155 unresponsive_timer_fired_(false), | |
156 new_content_rendering_timeout_fired_(false) { | 155 new_content_rendering_timeout_fired_(false) { |
157 acked_touch_event_type_ = blink::WebInputEvent::Undefined; | 156 acked_touch_event_type_ = blink::WebInputEvent::Undefined; |
158 } | 157 } |
159 | 158 |
160 // Allow poking at a few private members. | 159 // Allow poking at a few private members. |
161 using RenderWidgetHostImpl::GetResizeParams; | 160 using RenderWidgetHostImpl::GetResizeParams; |
162 using RenderWidgetHostImpl::OnUpdateRect; | 161 using RenderWidgetHostImpl::OnUpdateRect; |
163 using RenderWidgetHostImpl::RendererExited; | 162 using RenderWidgetHostImpl::RendererExited; |
164 using RenderWidgetHostImpl::SetInitialRenderSizeParams; | 163 using RenderWidgetHostImpl::SetInitialRenderSizeParams; |
165 using RenderWidgetHostImpl::old_resize_params_; | 164 using RenderWidgetHostImpl::old_resize_params_; |
166 using RenderWidgetHostImpl::is_hidden_; | 165 using RenderWidgetHostImpl::is_hidden_; |
167 using RenderWidgetHostImpl::resize_ack_pending_; | 166 using RenderWidgetHostImpl::resize_ack_pending_; |
168 using RenderWidgetHostImpl::input_router_; | 167 using RenderWidgetHostImpl::input_router_; |
169 | 168 |
170 void OnTouchEventAck(const TouchEventWithLatencyInfo& event, | 169 void OnTouchEventAck(const TouchEventWithLatencyInfo& event, |
171 InputEventAckState ack_result) override { | 170 InputEventAckState ack_result) override { |
172 // Sniff touch acks. | 171 // Sniff touch acks. |
173 acked_touch_event_type_ = event.event.type; | 172 acked_touch_event_type_ = event.event.type; |
174 RenderWidgetHostImpl::OnTouchEventAck(event, ack_result); | 173 RenderWidgetHostImpl::OnTouchEventAck(event, ack_result); |
175 } | 174 } |
176 | 175 |
177 bool unresponsive_timer_fired() const { | |
178 return unresponsive_timer_fired_; | |
179 } | |
180 | |
181 bool new_content_rendering_timeout_fired() const { | 176 bool new_content_rendering_timeout_fired() const { |
182 return new_content_rendering_timeout_fired_; | 177 return new_content_rendering_timeout_fired_; |
183 } | 178 } |
184 | 179 |
185 void DisableGestureDebounce() { | 180 void DisableGestureDebounce() { |
186 input_router_.reset(new InputRouterImpl( | 181 input_router_.reset(new InputRouterImpl( |
187 process_, this, this, routing_id_, InputRouterImpl::Config())); | 182 process_, this, this, routing_id_, InputRouterImpl::Config())); |
188 } | 183 } |
189 | 184 |
190 WebInputEvent::Type acked_touch_event_type() const { | 185 WebInputEvent::Type acked_touch_event_type() const { |
191 return acked_touch_event_type_; | 186 return acked_touch_event_type_; |
192 } | 187 } |
193 | 188 |
194 void SetupForInputRouterTest() { | 189 void SetupForInputRouterTest() { |
195 input_router_.reset(new MockInputRouter(this)); | 190 input_router_.reset(new MockInputRouter(this)); |
196 } | 191 } |
197 | 192 |
198 MockInputRouter* mock_input_router() { | 193 MockInputRouter* mock_input_router() { |
199 return static_cast<MockInputRouter*>(input_router_.get()); | 194 return static_cast<MockInputRouter*>(input_router_.get()); |
200 } | 195 } |
201 | 196 |
202 protected: | 197 protected: |
203 void NotifyRendererUnresponsive() override { | |
204 unresponsive_timer_fired_ = true; | |
205 } | |
206 | |
207 void NotifyNewContentRenderingTimeoutForTesting() override { | 198 void NotifyNewContentRenderingTimeoutForTesting() override { |
208 new_content_rendering_timeout_fired_ = true; | 199 new_content_rendering_timeout_fired_ = true; |
209 } | 200 } |
210 | 201 |
211 bool unresponsive_timer_fired_; | |
212 bool new_content_rendering_timeout_fired_; | 202 bool new_content_rendering_timeout_fired_; |
213 WebInputEvent::Type acked_touch_event_type_; | 203 WebInputEvent::Type acked_touch_event_type_; |
214 | 204 |
215 private: | 205 private: |
216 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); | 206 DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHost); |
217 }; | 207 }; |
218 | 208 |
219 namespace { | 209 namespace { |
220 | 210 |
221 // RenderWidgetHostProcess ----------------------------------------------------- | 211 // RenderWidgetHostProcess ----------------------------------------------------- |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { | 332 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { |
343 public: | 333 public: |
344 MockRenderWidgetHostDelegate() | 334 MockRenderWidgetHostDelegate() |
345 : prehandle_keyboard_event_(false), | 335 : prehandle_keyboard_event_(false), |
346 prehandle_keyboard_event_is_shortcut_(false), | 336 prehandle_keyboard_event_is_shortcut_(false), |
347 prehandle_keyboard_event_called_(false), | 337 prehandle_keyboard_event_called_(false), |
348 prehandle_keyboard_event_type_(WebInputEvent::Undefined), | 338 prehandle_keyboard_event_type_(WebInputEvent::Undefined), |
349 unhandled_keyboard_event_called_(false), | 339 unhandled_keyboard_event_called_(false), |
350 unhandled_keyboard_event_type_(WebInputEvent::Undefined), | 340 unhandled_keyboard_event_type_(WebInputEvent::Undefined), |
351 handle_wheel_event_(false), | 341 handle_wheel_event_(false), |
352 handle_wheel_event_called_(false) {} | 342 handle_wheel_event_called_(false), |
| 343 unresponsive_timer_fired_(false) {} |
353 ~MockRenderWidgetHostDelegate() override {} | 344 ~MockRenderWidgetHostDelegate() override {} |
354 | 345 |
355 // Tests that make sure we ignore keyboard event acknowledgments to events we | 346 // Tests that make sure we ignore keyboard event acknowledgments to events we |
356 // didn't send work by making sure we didn't call UnhandledKeyboardEvent(). | 347 // didn't send work by making sure we didn't call UnhandledKeyboardEvent(). |
357 bool unhandled_keyboard_event_called() const { | 348 bool unhandled_keyboard_event_called() const { |
358 return unhandled_keyboard_event_called_; | 349 return unhandled_keyboard_event_called_; |
359 } | 350 } |
360 | 351 |
361 WebInputEvent::Type unhandled_keyboard_event_type() const { | 352 WebInputEvent::Type unhandled_keyboard_event_type() const { |
362 return unhandled_keyboard_event_type_; | 353 return unhandled_keyboard_event_type_; |
(...skipping 14 matching lines...) Expand all Loading... |
377 void set_handle_wheel_event(bool handle) { | 368 void set_handle_wheel_event(bool handle) { |
378 handle_wheel_event_ = handle; | 369 handle_wheel_event_ = handle; |
379 } | 370 } |
380 | 371 |
381 void set_prehandle_keyboard_event_is_shortcut(bool is_shortcut) { | 372 void set_prehandle_keyboard_event_is_shortcut(bool is_shortcut) { |
382 prehandle_keyboard_event_is_shortcut_ = is_shortcut; | 373 prehandle_keyboard_event_is_shortcut_ = is_shortcut; |
383 } | 374 } |
384 | 375 |
385 bool handle_wheel_event_called() const { return handle_wheel_event_called_; } | 376 bool handle_wheel_event_called() const { return handle_wheel_event_called_; } |
386 | 377 |
| 378 bool unresponsive_timer_fired() const { return unresponsive_timer_fired_; } |
| 379 |
387 protected: | 380 protected: |
388 bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, | 381 bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, |
389 bool* is_keyboard_shortcut) override { | 382 bool* is_keyboard_shortcut) override { |
390 prehandle_keyboard_event_type_ = event.type; | 383 prehandle_keyboard_event_type_ = event.type; |
391 prehandle_keyboard_event_called_ = true; | 384 prehandle_keyboard_event_called_ = true; |
392 *is_keyboard_shortcut = prehandle_keyboard_event_is_shortcut_; | 385 *is_keyboard_shortcut = prehandle_keyboard_event_is_shortcut_; |
393 return prehandle_keyboard_event_; | 386 return prehandle_keyboard_event_; |
394 } | 387 } |
395 | 388 |
396 void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) override { | 389 void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) override { |
397 unhandled_keyboard_event_type_ = event.type; | 390 unhandled_keyboard_event_type_ = event.type; |
398 unhandled_keyboard_event_called_ = true; | 391 unhandled_keyboard_event_called_ = true; |
399 } | 392 } |
400 | 393 |
401 bool HandleWheelEvent(const blink::WebMouseWheelEvent& event) override { | 394 bool HandleWheelEvent(const blink::WebMouseWheelEvent& event) override { |
402 handle_wheel_event_called_ = true; | 395 handle_wheel_event_called_ = true; |
403 return handle_wheel_event_; | 396 return handle_wheel_event_; |
404 } | 397 } |
405 | 398 |
| 399 void RendererUnresponsive(RenderWidgetHostImpl* render_widget_host) override { |
| 400 unresponsive_timer_fired_ = true; |
| 401 } |
| 402 |
406 void Cut() override {} | 403 void Cut() override {} |
407 void Copy() override {} | 404 void Copy() override {} |
408 void Paste() override {} | 405 void Paste() override {} |
409 void SelectAll() override {} | 406 void SelectAll() override {} |
410 | 407 |
411 private: | 408 private: |
412 bool prehandle_keyboard_event_; | 409 bool prehandle_keyboard_event_; |
413 bool prehandle_keyboard_event_is_shortcut_; | 410 bool prehandle_keyboard_event_is_shortcut_; |
414 bool prehandle_keyboard_event_called_; | 411 bool prehandle_keyboard_event_called_; |
415 WebInputEvent::Type prehandle_keyboard_event_type_; | 412 WebInputEvent::Type prehandle_keyboard_event_type_; |
416 | 413 |
417 bool unhandled_keyboard_event_called_; | 414 bool unhandled_keyboard_event_called_; |
418 WebInputEvent::Type unhandled_keyboard_event_type_; | 415 WebInputEvent::Type unhandled_keyboard_event_type_; |
419 | 416 |
420 bool handle_wheel_event_; | 417 bool handle_wheel_event_; |
421 bool handle_wheel_event_called_; | 418 bool handle_wheel_event_called_; |
| 419 |
| 420 bool unresponsive_timer_fired_; |
422 }; | 421 }; |
423 | 422 |
424 // RenderWidgetHostTest -------------------------------------------------------- | 423 // RenderWidgetHostTest -------------------------------------------------------- |
425 | 424 |
426 class RenderWidgetHostTest : public testing::Test { | 425 class RenderWidgetHostTest : public testing::Test { |
427 public: | 426 public: |
428 RenderWidgetHostTest() | 427 RenderWidgetHostTest() |
429 : process_(NULL), | 428 : process_(NULL), |
430 handle_key_press_event_(false), | 429 handle_key_press_event_(false), |
431 handle_mouse_event_(false), | 430 handle_mouse_event_(false), |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1059 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, view_->ack_result()); | 1058 EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, view_->ack_result()); |
1060 } | 1059 } |
1061 | 1060 |
1062 // Test that the hang monitor timer expires properly if a new timer is started | 1061 // Test that the hang monitor timer expires properly if a new timer is started |
1063 // while one is in progress (see crbug.com/11007). | 1062 // while one is in progress (see crbug.com/11007). |
1064 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { | 1063 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { |
1065 // Start with a short timeout. | 1064 // Start with a short timeout. |
1066 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 1065 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
1067 | 1066 |
1068 // Immediately try to add a long 30 second timeout. | 1067 // Immediately try to add a long 30 second timeout. |
1069 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1068 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1070 host_->StartHangMonitorTimeout(TimeDelta::FromSeconds(30)); | 1069 host_->StartHangMonitorTimeout(TimeDelta::FromSeconds(30)); |
1071 | 1070 |
1072 // Wait long enough for first timeout and see if it fired. | 1071 // Wait long enough for first timeout and see if it fired. |
1073 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1072 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1074 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1073 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1075 TimeDelta::FromMilliseconds(10)); | 1074 TimeDelta::FromMilliseconds(10)); |
1076 base::MessageLoop::current()->Run(); | 1075 base::MessageLoop::current()->Run(); |
1077 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1076 EXPECT_TRUE(delegate_->unresponsive_timer_fired()); |
1078 } | 1077 } |
1079 | 1078 |
1080 // Test that the hang monitor timer expires properly if it is started, stopped, | 1079 // Test that the hang monitor timer expires properly if it is started, stopped, |
1081 // and then started again. | 1080 // and then started again. |
1082 TEST_F(RenderWidgetHostTest, StopAndStartHangMonitorTimeout) { | 1081 TEST_F(RenderWidgetHostTest, StopAndStartHangMonitorTimeout) { |
1083 // Start with a short timeout, then stop it. | 1082 // Start with a short timeout, then stop it. |
1084 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 1083 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
1085 host_->StopHangMonitorTimeout(); | 1084 host_->StopHangMonitorTimeout(); |
1086 | 1085 |
1087 // Start it again to ensure it still works. | 1086 // Start it again to ensure it still works. |
1088 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1087 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1089 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 1088 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
1090 | 1089 |
1091 // Wait long enough for first timeout and see if it fired. | 1090 // Wait long enough for first timeout and see if it fired. |
1092 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1091 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1093 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1092 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1094 TimeDelta::FromMilliseconds(40)); | 1093 TimeDelta::FromMilliseconds(40)); |
1095 base::MessageLoop::current()->Run(); | 1094 base::MessageLoop::current()->Run(); |
1096 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1095 EXPECT_TRUE(delegate_->unresponsive_timer_fired()); |
1097 } | 1096 } |
1098 | 1097 |
1099 // Test that the hang monitor timer expires properly if it is started, then | 1098 // Test that the hang monitor timer expires properly if it is started, then |
1100 // updated to a shorter duration. | 1099 // updated to a shorter duration. |
1101 TEST_F(RenderWidgetHostTest, ShorterDelayHangMonitorTimeout) { | 1100 TEST_F(RenderWidgetHostTest, ShorterDelayHangMonitorTimeout) { |
1102 // Start with a timeout. | 1101 // Start with a timeout. |
1103 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(100)); | 1102 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(100)); |
1104 | 1103 |
1105 // Start it again with shorter delay. | 1104 // Start it again with shorter delay. |
1106 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1105 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1107 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(20)); | 1106 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(20)); |
1108 | 1107 |
1109 // Wait long enough for the second timeout and see if it fired. | 1108 // Wait long enough for the second timeout and see if it fired. |
1110 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1109 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1111 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1110 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1112 TimeDelta::FromMilliseconds(25)); | 1111 TimeDelta::FromMilliseconds(25)); |
1113 base::MessageLoop::current()->Run(); | 1112 base::MessageLoop::current()->Run(); |
1114 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1113 EXPECT_TRUE(delegate_->unresponsive_timer_fired()); |
1115 } | 1114 } |
1116 | 1115 |
1117 // Test that the hang monitor timer is effectively disabled when the widget is | 1116 // Test that the hang monitor timer is effectively disabled when the widget is |
1118 // hidden. | 1117 // hidden. |
1119 TEST_F(RenderWidgetHostTest, HangMonitorTimeoutDisabledForInputWhenHidden) { | 1118 TEST_F(RenderWidgetHostTest, HangMonitorTimeoutDisabledForInputWhenHidden) { |
1120 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(1)); | 1119 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(1)); |
1121 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); | 1120 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); |
1122 | 1121 |
1123 // Hiding the widget should deactivate the timeout. | 1122 // Hiding the widget should deactivate the timeout. |
1124 host_->WasHidden(); | 1123 host_->WasHidden(); |
1125 | 1124 |
1126 // The timeout should not fire. | 1125 // The timeout should not fire. |
1127 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1126 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1128 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1127 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1129 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1128 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1130 TimeDelta::FromMicroseconds(2)); | 1129 TimeDelta::FromMicroseconds(2)); |
1131 base::MessageLoop::current()->Run(); | 1130 base::MessageLoop::current()->Run(); |
1132 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1131 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1133 | 1132 |
1134 // The timeout should never reactivate while hidden. | 1133 // The timeout should never reactivate while hidden. |
1135 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); | 1134 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); |
1136 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1135 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1137 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1136 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1138 TimeDelta::FromMicroseconds(2)); | 1137 TimeDelta::FromMicroseconds(2)); |
1139 base::MessageLoop::current()->Run(); | 1138 base::MessageLoop::current()->Run(); |
1140 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 1139 EXPECT_FALSE(delegate_->unresponsive_timer_fired()); |
1141 | 1140 |
1142 // Showing the widget should restore the timeout, as the events have | 1141 // Showing the widget should restore the timeout, as the events have |
1143 // not yet been ack'ed. | 1142 // not yet been ack'ed. |
1144 host_->WasShown(ui::LatencyInfo()); | 1143 host_->WasShown(ui::LatencyInfo()); |
1145 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1144 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1146 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1145 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1147 TimeDelta::FromMicroseconds(2)); | 1146 TimeDelta::FromMicroseconds(2)); |
1148 base::MessageLoop::current()->Run(); | 1147 base::MessageLoop::current()->Run(); |
1149 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1148 EXPECT_TRUE(delegate_->unresponsive_timer_fired()); |
1150 } | 1149 } |
1151 | 1150 |
1152 // Test that the hang monitor catches two input events but only one ack. | 1151 // Test that the hang monitor catches two input events but only one ack. |
1153 // This can happen if the second input event causes the renderer to hang. | 1152 // This can happen if the second input event causes the renderer to hang. |
1154 // This test will catch a regression of crbug.com/111185. | 1153 // This test will catch a regression of crbug.com/111185. |
1155 TEST_F(RenderWidgetHostTest, MultipleInputEvents) { | 1154 TEST_F(RenderWidgetHostTest, MultipleInputEvents) { |
1156 // Configure the host to wait 10ms before considering | 1155 // Configure the host to wait 10ms before considering |
1157 // the renderer hung. | 1156 // the renderer hung. |
1158 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(10)); | 1157 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(10)); |
1159 | 1158 |
1160 // Send two events but only one ack. | 1159 // Send two events but only one ack. |
1161 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1160 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1162 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); | 1161 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); |
1163 SendInputEventACK(WebInputEvent::RawKeyDown, | 1162 SendInputEventACK(WebInputEvent::RawKeyDown, |
1164 INPUT_EVENT_ACK_STATE_CONSUMED); | 1163 INPUT_EVENT_ACK_STATE_CONSUMED); |
1165 | 1164 |
1166 // Wait long enough for first timeout and see if it fired. | 1165 // Wait long enough for first timeout and see if it fired. |
1167 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 1166 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
1168 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 1167 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
1169 TimeDelta::FromMicroseconds(20)); | 1168 TimeDelta::FromMicroseconds(20)); |
1170 base::MessageLoop::current()->Run(); | 1169 base::MessageLoop::current()->Run(); |
1171 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 1170 EXPECT_TRUE(delegate_->unresponsive_timer_fired()); |
1172 } | 1171 } |
1173 | 1172 |
1174 // Test that the rendering timeout for newly loaded content fires | 1173 // Test that the rendering timeout for newly loaded content fires |
1175 // when enough time passes without receiving a new compositor frame. | 1174 // when enough time passes without receiving a new compositor frame. |
1176 TEST_F(RenderWidgetHostTest, NewContentRenderingTimeout) { | 1175 TEST_F(RenderWidgetHostTest, NewContentRenderingTimeout) { |
1177 host_->set_new_content_rendering_delay_for_testing( | 1176 host_->set_new_content_rendering_delay_for_testing( |
1178 base::TimeDelta::FromMicroseconds(10)); | 1177 base::TimeDelta::FromMicroseconds(10)); |
1179 | 1178 |
1180 // Test immediate start and stop, ensuring that the timeout doesn't fire. | 1179 // Test immediate start and stop, ensuring that the timeout doesn't fire. |
1181 host_->StartNewContentRenderingTimeout(); | 1180 host_->StartNewContentRenderingTimeout(); |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1647 // Having an initial size set means that the size information had been sent | 1646 // Having an initial size set means that the size information had been sent |
1648 // with the reqiest to new up the RenderView and so subsequent WasResized | 1647 // with the reqiest to new up the RenderView and so subsequent WasResized |
1649 // calls should not result in new IPC (unless the size has actually changed). | 1648 // calls should not result in new IPC (unless the size has actually changed). |
1650 host_->WasResized(); | 1649 host_->WasResized(); |
1651 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); | 1650 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); |
1652 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size); | 1651 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size); |
1653 EXPECT_TRUE(host_->resize_ack_pending_); | 1652 EXPECT_TRUE(host_->resize_ack_pending_); |
1654 } | 1653 } |
1655 | 1654 |
1656 } // namespace content | 1655 } // namespace content |
OLD | NEW |