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

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

Issue 1159623009: content: Remove use of MessageLoopProxy and deprecated MessageLoop APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Test build fix. Created 5 years, 6 months 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 "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/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
11 #include "base/single_thread_task_runner.h"
12 #include "base/thread_task_runner_handle.h"
10 #include "base/timer/timer.h" 13 #include "base/timer/timer.h"
11 #include "content/browser/browser_thread_impl.h" 14 #include "content/browser/browser_thread_impl.h"
12 #include "content/browser/gpu/compositor_util.h" 15 #include "content/browser/gpu/compositor_util.h"
13 #include "content/browser/renderer_host/input/input_router_impl.h" 16 #include "content/browser/renderer_host/input/input_router_impl.h"
14 #include "content/browser/renderer_host/render_widget_host_delegate.h" 17 #include "content/browser/renderer_host/render_widget_host_delegate.h"
15 #include "content/browser/renderer_host/render_widget_host_view_base.h" 18 #include "content/browser/renderer_host/render_widget_host_view_base.h"
16 #include "content/common/input/synthetic_web_input_event_builders.h" 19 #include "content/common/input/synthetic_web_input_event_builders.h"
17 #include "content/common/input_messages.h" 20 #include "content/common/input_messages.h"
18 #include "content/common/view_messages.h" 21 #include "content/common/view_messages.h"
19 #include "content/public/common/content_switches.h" 22 #include "content/public/common/content_switches.h"
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 // while one is in progress (see crbug.com/11007). 975 // while one is in progress (see crbug.com/11007).
973 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) { 976 TEST_F(RenderWidgetHostTest, DontPostponeHangMonitorTimeout) {
974 // Start with a short timeout. 977 // Start with a short timeout.
975 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); 978 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10));
976 979
977 // Immediately try to add a long 30 second timeout. 980 // Immediately try to add a long 30 second timeout.
978 EXPECT_FALSE(host_->unresponsive_timer_fired()); 981 EXPECT_FALSE(host_->unresponsive_timer_fired());
979 host_->StartHangMonitorTimeout(TimeDelta::FromSeconds(30)); 982 host_->StartHangMonitorTimeout(TimeDelta::FromSeconds(30));
980 983
981 // Wait long enough for first timeout and see if it fired. 984 // Wait long enough for first timeout and see if it fired.
982 base::MessageLoop::current()->PostDelayedTask( 985 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
983 FROM_HERE, 986 FROM_HERE, base::MessageLoop::QuitClosure(),
984 base::MessageLoop::QuitClosure(),
985 TimeDelta::FromMilliseconds(10)); 987 TimeDelta::FromMilliseconds(10));
986 base::MessageLoop::current()->Run(); 988 base::MessageLoop::current()->Run();
987 EXPECT_TRUE(host_->unresponsive_timer_fired()); 989 EXPECT_TRUE(host_->unresponsive_timer_fired());
988 } 990 }
989 991
990 // Test that the hang monitor timer expires properly if it is started, stopped, 992 // Test that the hang monitor timer expires properly if it is started, stopped,
991 // and then started again. 993 // and then started again.
992 TEST_F(RenderWidgetHostTest, StopAndStartHangMonitorTimeout) { 994 TEST_F(RenderWidgetHostTest, StopAndStartHangMonitorTimeout) {
993 // Start with a short timeout, then stop it. 995 // Start with a short timeout, then stop it.
994 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); 996 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10));
995 host_->StopHangMonitorTimeout(); 997 host_->StopHangMonitorTimeout();
996 998
997 // Start it again to ensure it still works. 999 // Start it again to ensure it still works.
998 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1000 EXPECT_FALSE(host_->unresponsive_timer_fired());
999 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); 1001 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10));
1000 1002
1001 // Wait long enough for first timeout and see if it fired. 1003 // Wait long enough for first timeout and see if it fired.
1002 base::MessageLoop::current()->PostDelayedTask( 1004 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1003 FROM_HERE, 1005 FROM_HERE, base::MessageLoop::QuitClosure(),
1004 base::MessageLoop::QuitClosure(),
1005 TimeDelta::FromMilliseconds(40)); 1006 TimeDelta::FromMilliseconds(40));
1006 base::MessageLoop::current()->Run(); 1007 base::MessageLoop::current()->Run();
1007 EXPECT_TRUE(host_->unresponsive_timer_fired()); 1008 EXPECT_TRUE(host_->unresponsive_timer_fired());
1008 } 1009 }
1009 1010
1010 // Test that the hang monitor timer expires properly if it is started, then 1011 // Test that the hang monitor timer expires properly if it is started, then
1011 // updated to a shorter duration. 1012 // updated to a shorter duration.
1012 TEST_F(RenderWidgetHostTest, ShorterDelayHangMonitorTimeout) { 1013 TEST_F(RenderWidgetHostTest, ShorterDelayHangMonitorTimeout) {
1013 // Start with a timeout. 1014 // Start with a timeout.
1014 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(100)); 1015 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(100));
1015 1016
1016 // Start it again with shorter delay. 1017 // Start it again with shorter delay.
1017 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1018 EXPECT_FALSE(host_->unresponsive_timer_fired());
1018 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(20)); 1019 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(20));
1019 1020
1020 // Wait long enough for the second timeout and see if it fired. 1021 // Wait long enough for the second timeout and see if it fired.
1021 base::MessageLoop::current()->PostDelayedTask( 1022 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1022 FROM_HERE, 1023 FROM_HERE, base::MessageLoop::QuitClosure(),
1023 base::MessageLoop::QuitClosure(),
1024 TimeDelta::FromMilliseconds(25)); 1024 TimeDelta::FromMilliseconds(25));
1025 base::MessageLoop::current()->Run(); 1025 base::MessageLoop::current()->Run();
1026 EXPECT_TRUE(host_->unresponsive_timer_fired()); 1026 EXPECT_TRUE(host_->unresponsive_timer_fired());
1027 } 1027 }
1028 1028
1029 // Test that the hang monitor timer is effectively disabled when the widget is 1029 // Test that the hang monitor timer is effectively disabled when the widget is
1030 // hidden. 1030 // hidden.
1031 TEST_F(RenderWidgetHostTest, HangMonitorTimeoutDisabledForInputWhenHidden) { 1031 TEST_F(RenderWidgetHostTest, HangMonitorTimeoutDisabledForInputWhenHidden) {
1032 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(1)); 1032 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(1));
1033 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); 1033 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false);
1034 1034
1035 // Hiding the widget should deactivate the timeout. 1035 // Hiding the widget should deactivate the timeout.
1036 host_->WasHidden(); 1036 host_->WasHidden();
1037 1037
1038 // The timeout should not fire. 1038 // The timeout should not fire.
1039 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1039 EXPECT_FALSE(host_->unresponsive_timer_fired());
1040 base::MessageLoop::current()->PostDelayedTask( 1040 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1041 FROM_HERE, 1041 FROM_HERE, base::MessageLoop::QuitClosure(),
1042 base::MessageLoop::QuitClosure(),
1043 TimeDelta::FromMicroseconds(2)); 1042 TimeDelta::FromMicroseconds(2));
1044 base::MessageLoop::current()->Run(); 1043 base::MessageLoop::current()->Run();
1045 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1044 EXPECT_FALSE(host_->unresponsive_timer_fired());
1046 1045
1047 // The timeout should never reactivate while hidden. 1046 // The timeout should never reactivate while hidden.
1048 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false); 1047 SimulateMouseEvent(WebInputEvent::MouseMove, 10, 10, 0, false);
1049 base::MessageLoop::current()->PostDelayedTask( 1048 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1050 FROM_HERE, 1049 FROM_HERE, base::MessageLoop::QuitClosure(),
1051 base::MessageLoop::QuitClosure(),
1052 TimeDelta::FromMicroseconds(2)); 1050 TimeDelta::FromMicroseconds(2));
1053 base::MessageLoop::current()->Run(); 1051 base::MessageLoop::current()->Run();
1054 EXPECT_FALSE(host_->unresponsive_timer_fired()); 1052 EXPECT_FALSE(host_->unresponsive_timer_fired());
1055 1053
1056 // Showing the widget should restore the timeout, as the events have 1054 // Showing the widget should restore the timeout, as the events have
1057 // not yet been ack'ed. 1055 // not yet been ack'ed.
1058 host_->WasShown(ui::LatencyInfo()); 1056 host_->WasShown(ui::LatencyInfo());
1059 base::MessageLoop::current()->PostDelayedTask( 1057 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1060 FROM_HERE, 1058 FROM_HERE, base::MessageLoop::QuitClosure(),
1061 base::MessageLoop::QuitClosure(),
1062 TimeDelta::FromMicroseconds(2)); 1059 TimeDelta::FromMicroseconds(2));
1063 base::MessageLoop::current()->Run(); 1060 base::MessageLoop::current()->Run();
1064 EXPECT_TRUE(host_->unresponsive_timer_fired()); 1061 EXPECT_TRUE(host_->unresponsive_timer_fired());
1065 } 1062 }
1066 1063
1067 // Test that the hang monitor catches two input events but only one ack. 1064 // Test that the hang monitor catches two input events but only one ack.
1068 // This can happen if the second input event causes the renderer to hang. 1065 // This can happen if the second input event causes the renderer to hang.
1069 // This test will catch a regression of crbug.com/111185. 1066 // This test will catch a regression of crbug.com/111185.
1070 TEST_F(RenderWidgetHostTest, MultipleInputEvents) { 1067 TEST_F(RenderWidgetHostTest, MultipleInputEvents) {
1071 // Configure the host to wait 10ms before considering 1068 // Configure the host to wait 10ms before considering
1072 // the renderer hung. 1069 // the renderer hung.
1073 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(10)); 1070 host_->set_hung_renderer_delay(base::TimeDelta::FromMicroseconds(10));
1074 1071
1075 // Send two events but only one ack. 1072 // Send two events but only one ack.
1076 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 1073 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
1077 SimulateKeyboardEvent(WebInputEvent::RawKeyDown); 1074 SimulateKeyboardEvent(WebInputEvent::RawKeyDown);
1078 SendInputEventACK(WebInputEvent::RawKeyDown, 1075 SendInputEventACK(WebInputEvent::RawKeyDown,
1079 INPUT_EVENT_ACK_STATE_CONSUMED); 1076 INPUT_EVENT_ACK_STATE_CONSUMED);
1080 1077
1081 // Wait long enough for first timeout and see if it fired. 1078 // Wait long enough for first timeout and see if it fired.
1082 base::MessageLoop::current()->PostDelayedTask( 1079 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
1083 FROM_HERE, 1080 FROM_HERE, base::MessageLoop::QuitClosure(),
1084 base::MessageLoop::QuitClosure(),
1085 TimeDelta::FromMicroseconds(20)); 1081 TimeDelta::FromMicroseconds(20));
1086 base::MessageLoop::current()->Run(); 1082 base::MessageLoop::current()->Run();
1087 EXPECT_TRUE(host_->unresponsive_timer_fired()); 1083 EXPECT_TRUE(host_->unresponsive_timer_fired());
1088 } 1084 }
1089 1085
1090 std::string GetInputMessageTypes(RenderWidgetHostProcess* process) { 1086 std::string GetInputMessageTypes(RenderWidgetHostProcess* process) {
1091 std::string result; 1087 std::string result;
1092 for (size_t i = 0; i < process->sink().message_count(); ++i) { 1088 for (size_t i = 0; i < process->sink().message_count(); ++i) {
1093 const IPC::Message *message = process->sink().GetMessageAt(i); 1089 const IPC::Message *message = process->sink().GetMessageAt(i);
1094 EXPECT_EQ(InputMsg_HandleInputEvent::ID, message->type()); 1090 EXPECT_EQ(InputMsg_HandleInputEvent::ID, message->type());
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 // Having an initial size set means that the size information had been sent 1539 // Having an initial size set means that the size information had been sent
1544 // with the reqiest to new up the RenderView and so subsequent WasResized 1540 // with the reqiest to new up the RenderView and so subsequent WasResized
1545 // calls should not result in new IPC (unless the size has actually changed). 1541 // calls should not result in new IPC (unless the size has actually changed).
1546 host_->WasResized(); 1542 host_->WasResized();
1547 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); 1543 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
1548 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size); 1544 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size);
1549 EXPECT_TRUE(host_->resize_ack_pending_); 1545 EXPECT_TRUE(host_->resize_ack_pending_);
1550 } 1546 }
1551 1547
1552 } // namespace content 1548 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698