Chromium Code Reviews| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/eintr_wrapper.h" | 10 #include "base/eintr_wrapper.h" |
| (...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 } | 592 } |
| 593 | 593 |
| 594 const wchar_t* const kMessageBoxTitle = L"MessageLoop Unit Test"; | 594 const wchar_t* const kMessageBoxTitle = L"MessageLoop Unit Test"; |
| 595 | 595 |
| 596 enum TaskType { | 596 enum TaskType { |
| 597 MESSAGEBOX, | 597 MESSAGEBOX, |
| 598 ENDDIALOG, | 598 ENDDIALOG, |
| 599 RECURSIVE, | 599 RECURSIVE, |
| 600 TIMEDMESSAGELOOP, | 600 TIMEDMESSAGELOOP, |
| 601 QUITMESSAGELOOP, | 601 QUITMESSAGELOOP, |
| 602 ORDERERD, | 602 ORDERERD, |
|
jar (doing other things)
2012/06/18 19:43:21
nit: Although you didn't type this.... I think thi
jbates
2012/06/18 23:14:03
Done.
| |
| 603 PUMPS, | 603 PUMPS, |
| 604 SLEEP, | 604 SLEEP, |
| 605 RUNS, | |
| 605 }; | 606 }; |
| 606 | 607 |
| 607 // Saves the order in which the tasks executed. | 608 // Saves the order in which the tasks executed. |
| 608 struct TaskItem { | 609 struct TaskItem { |
| 609 TaskItem(TaskType t, int c, bool s) | 610 TaskItem(TaskType t, int c, bool s) |
| 610 : type(t), | 611 : type(t), |
| 611 cookie(c), | 612 cookie(c), |
| 612 start(s) { | 613 start(s) { |
| 613 } | 614 } |
| 614 | 615 |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 990 | 991 |
| 991 void FuncThatPumps(TaskList* order, int cookie) { | 992 void FuncThatPumps(TaskList* order, int cookie) { |
| 992 order->RecordStart(PUMPS, cookie); | 993 order->RecordStart(PUMPS, cookie); |
| 993 { | 994 { |
| 994 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); | 995 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); |
| 995 MessageLoop::current()->RunAllPending(); | 996 MessageLoop::current()->RunAllPending(); |
| 996 } | 997 } |
| 997 order->RecordEnd(PUMPS, cookie); | 998 order->RecordEnd(PUMPS, cookie); |
| 998 } | 999 } |
| 999 | 1000 |
| 1001 void FuncThatRuns(TaskList* order, int cookie, MessageLoop::RunID run_id) { | |
| 1002 order->RecordStart(RUNS, cookie); | |
| 1003 { | |
| 1004 MessageLoop::ScopedNestableTaskAllower allow(MessageLoop::current()); | |
| 1005 MessageLoop::current()->RunWithID(run_id); | |
| 1006 } | |
| 1007 order->RecordEnd(RUNS, cookie); | |
| 1008 } | |
| 1009 | |
| 1000 // Tests that non nestable tasks run in FIFO if there are no nested loops. | 1010 // Tests that non nestable tasks run in FIFO if there are no nested loops. |
| 1001 void RunTest_NonNestableWithNoNesting( | 1011 void RunTest_NonNestableWithNoNesting( |
| 1002 MessageLoop::Type message_loop_type) { | 1012 MessageLoop::Type message_loop_type) { |
| 1003 MessageLoop loop(message_loop_type); | 1013 MessageLoop loop(message_loop_type); |
| 1004 | 1014 |
| 1005 TaskList order; | 1015 TaskList order; |
| 1006 | 1016 |
| 1007 MessageLoop::current()->PostNonNestableTask( | 1017 MessageLoop::current()->PostNonNestableTask( |
| 1008 FROM_HERE, | 1018 FROM_HERE, |
| 1009 base::Bind(&OrderedFunc, &order, 1)); | 1019 base::Bind(&OrderedFunc, &order, 1)); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1072 EXPECT_EQ(order.Get(4), TaskItem(SLEEP, 4, false)); | 1082 EXPECT_EQ(order.Get(4), TaskItem(SLEEP, 4, false)); |
| 1073 EXPECT_EQ(order.Get(5), TaskItem(ORDERERD, 5, true)); | 1083 EXPECT_EQ(order.Get(5), TaskItem(ORDERERD, 5, true)); |
| 1074 EXPECT_EQ(order.Get(6), TaskItem(ORDERERD, 5, false)); | 1084 EXPECT_EQ(order.Get(6), TaskItem(ORDERERD, 5, false)); |
| 1075 EXPECT_EQ(order.Get(7), TaskItem(PUMPS, 1, false)); | 1085 EXPECT_EQ(order.Get(7), TaskItem(PUMPS, 1, false)); |
| 1076 EXPECT_EQ(order.Get(8), TaskItem(ORDERERD, 2, true)); | 1086 EXPECT_EQ(order.Get(8), TaskItem(ORDERERD, 2, true)); |
| 1077 EXPECT_EQ(order.Get(9), TaskItem(ORDERERD, 2, false)); | 1087 EXPECT_EQ(order.Get(9), TaskItem(ORDERERD, 2, false)); |
| 1078 EXPECT_EQ(order.Get(10), TaskItem(QUITMESSAGELOOP, 6, true)); | 1088 EXPECT_EQ(order.Get(10), TaskItem(QUITMESSAGELOOP, 6, true)); |
| 1079 EXPECT_EQ(order.Get(11), TaskItem(QUITMESSAGELOOP, 6, false)); | 1089 EXPECT_EQ(order.Get(11), TaskItem(QUITMESSAGELOOP, 6, false)); |
| 1080 } | 1090 } |
| 1081 | 1091 |
| 1092 // Tests QuitNowWithID only quits the corresponding MessageLoop::Run. | |
| 1093 void RunTest_QuitNow(MessageLoop::Type message_loop_type) { | |
| 1094 MessageLoop loop(message_loop_type); | |
| 1095 | |
| 1096 TaskList order; | |
| 1097 | |
| 1098 MessageLoop::RunID nested_run_id = MessageLoop::current()->GetRunID(); | |
| 1099 | |
| 1100 MessageLoop::current()->PostTask( | |
| 1101 FROM_HERE, base::Bind(&FuncThatRuns, &order, 1, nested_run_id)); | |
| 1102 MessageLoop::current()->PostTask( | |
| 1103 FROM_HERE, base::Bind(&OrderedFunc, &order, 2)); | |
| 1104 MessageLoop::current()->PostTask( | |
| 1105 FROM_HERE, MessageLoop::QuitNowClosure()); | |
| 1106 MessageLoop::current()->PostTask( | |
| 1107 FROM_HERE, base::Bind(&OrderedFunc, &order, 3)); | |
| 1108 MessageLoop::current()->PostTask( | |
| 1109 FROM_HERE, MessageLoop::QuitNowClosure()); | |
| 1110 MessageLoop::current()->PostTask( | |
| 1111 FROM_HERE, base::Bind(&OrderedFunc, &order, 4)); // never runs | |
| 1112 | |
| 1113 MessageLoop::current()->Run(); | |
| 1114 | |
| 1115 ASSERT_EQ(6U, order.Size()); | |
| 1116 int task_index = 0; | |
| 1117 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, true)); | |
| 1118 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, true)); | |
| 1119 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, false)); | |
| 1120 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, false)); | |
| 1121 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 3, true)); | |
| 1122 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 3, false)); | |
| 1123 EXPECT_EQ(static_cast<size_t>(task_index), order.Size()); | |
| 1124 } | |
| 1125 | |
| 1126 // Tests QuitNowWithID only quits the corresponding MessageLoop::Run. | |
| 1127 void RunTest_QuitNowWithIDTop(MessageLoop::Type message_loop_type) { | |
| 1128 MessageLoop loop(message_loop_type); | |
| 1129 | |
| 1130 TaskList order; | |
| 1131 | |
| 1132 MessageLoop::RunID top_most_run_id = MessageLoop::current()->GetRunID(); | |
| 1133 MessageLoop::RunID nested_run_id = MessageLoop::current()->GetRunID(); | |
| 1134 | |
| 1135 MessageLoop::current()->PostTask( | |
| 1136 FROM_HERE, base::Bind(&FuncThatRuns, &order, 1, nested_run_id)); | |
| 1137 MessageLoop::current()->PostTask( | |
| 1138 FROM_HERE, MessageLoop::QuitNowWithIDClosure(top_most_run_id)); | |
| 1139 MessageLoop::current()->PostTask( | |
| 1140 FROM_HERE, base::Bind(&OrderedFunc, &order, 2)); | |
| 1141 MessageLoop::current()->PostTask( | |
| 1142 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id)); | |
| 1143 | |
| 1144 MessageLoop::current()->RunWithID(top_most_run_id); | |
| 1145 | |
| 1146 ASSERT_EQ(4U, order.Size()); | |
| 1147 int task_index = 0; | |
| 1148 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, true)); | |
| 1149 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, true)); | |
| 1150 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, false)); | |
| 1151 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, false)); | |
| 1152 EXPECT_EQ(static_cast<size_t>(task_index), order.Size()); | |
| 1153 } | |
| 1154 | |
| 1155 // Tests QuitNowWithID only quits the corresponding MessageLoop::Run. | |
| 1156 void RunTest_QuitNowWithIDNested(MessageLoop::Type message_loop_type) { | |
| 1157 MessageLoop loop(message_loop_type); | |
| 1158 | |
| 1159 TaskList order; | |
| 1160 | |
| 1161 MessageLoop::RunID top_most_run_id = MessageLoop::current()->GetRunID(); | |
| 1162 MessageLoop::RunID nested_run_id = MessageLoop::current()->GetRunID(); | |
| 1163 | |
| 1164 MessageLoop::current()->PostTask( | |
| 1165 FROM_HERE, base::Bind(&FuncThatRuns, &order, 1, nested_run_id)); | |
| 1166 MessageLoop::current()->PostTask( | |
| 1167 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id)); | |
| 1168 MessageLoop::current()->PostTask( | |
| 1169 FROM_HERE, base::Bind(&OrderedFunc, &order, 2)); | |
| 1170 MessageLoop::current()->PostTask( | |
| 1171 FROM_HERE, MessageLoop::QuitNowWithIDClosure(top_most_run_id)); | |
| 1172 | |
| 1173 MessageLoop::current()->RunWithID(top_most_run_id); | |
| 1174 | |
| 1175 ASSERT_EQ(4U, order.Size()); | |
| 1176 int task_index = 0; | |
| 1177 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, true)); | |
| 1178 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, false)); | |
| 1179 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, true)); | |
| 1180 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, false)); | |
| 1181 EXPECT_EQ(static_cast<size_t>(task_index), order.Size()); | |
| 1182 } | |
| 1183 | |
| 1184 // Tests QuitNowWithID only quits the corresponding MessageLoop::Run. | |
| 1185 void RunTest_QuitNowWithIDBogus(MessageLoop::Type message_loop_type) { | |
| 1186 MessageLoop loop(message_loop_type); | |
| 1187 | |
| 1188 TaskList order; | |
| 1189 | |
| 1190 MessageLoop::RunID top_most_run_id = MessageLoop::current()->GetRunID(); | |
| 1191 MessageLoop::RunID nested_run_id = MessageLoop::current()->GetRunID(); | |
| 1192 MessageLoop::RunID bogus_run_id = MessageLoop::current()->GetRunID(); | |
| 1193 | |
| 1194 MessageLoop::current()->PostTask( | |
| 1195 FROM_HERE, base::Bind(&FuncThatRuns, &order, 1, nested_run_id)); | |
| 1196 MessageLoop::current()->PostTask( | |
| 1197 FROM_HERE, MessageLoop::QuitNowWithIDClosure(bogus_run_id)); | |
| 1198 MessageLoop::current()->PostTask( | |
| 1199 FROM_HERE, base::Bind(&OrderedFunc, &order, 2)); | |
| 1200 MessageLoop::current()->PostTask( | |
| 1201 FROM_HERE, MessageLoop::QuitNowWithIDClosure(top_most_run_id)); | |
| 1202 MessageLoop::current()->PostTask( | |
| 1203 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id)); | |
| 1204 | |
| 1205 MessageLoop::current()->RunWithID(top_most_run_id); | |
| 1206 | |
| 1207 ASSERT_EQ(4U, order.Size()); | |
| 1208 int task_index = 0; | |
| 1209 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, true)); | |
| 1210 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, true)); | |
| 1211 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 2, false)); | |
| 1212 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, false)); | |
| 1213 EXPECT_EQ(static_cast<size_t>(task_index), order.Size()); | |
| 1214 } | |
| 1215 | |
| 1216 // Tests QuitNowWithID only quits the corresponding MessageLoop::Run. | |
| 1217 void RunTest_QuitNowWithIDDeep(MessageLoop::Type message_loop_type) { | |
| 1218 MessageLoop loop(message_loop_type); | |
| 1219 | |
| 1220 TaskList order; | |
| 1221 | |
| 1222 MessageLoop::RunID top_most_run_id = MessageLoop::current()->GetRunID(); | |
| 1223 MessageLoop::RunID nested_run_id1 = MessageLoop::current()->GetRunID(); | |
| 1224 MessageLoop::RunID nested_run_id2 = MessageLoop::current()->GetRunID(); | |
| 1225 MessageLoop::RunID nested_run_id3 = MessageLoop::current()->GetRunID(); | |
| 1226 MessageLoop::RunID nested_run_id4 = MessageLoop::current()->GetRunID(); | |
| 1227 | |
| 1228 MessageLoop::current()->PostTask( | |
| 1229 FROM_HERE, base::Bind(&FuncThatRuns, &order, 1, nested_run_id1)); | |
| 1230 MessageLoop::current()->PostTask( | |
| 1231 FROM_HERE, base::Bind(&FuncThatRuns, &order, 2, nested_run_id2)); | |
| 1232 MessageLoop::current()->PostTask( | |
| 1233 FROM_HERE, base::Bind(&FuncThatRuns, &order, 3, nested_run_id3)); | |
| 1234 MessageLoop::current()->PostTask( | |
| 1235 FROM_HERE, base::Bind(&FuncThatRuns, &order, 4, nested_run_id4)); | |
| 1236 MessageLoop::current()->PostTask( | |
| 1237 FROM_HERE, base::Bind(&OrderedFunc, &order, 5)); | |
| 1238 MessageLoop::current()->PostTask( | |
| 1239 FROM_HERE, MessageLoop::QuitNowWithIDClosure(top_most_run_id)); | |
| 1240 MessageLoop::current()->PostTask( | |
| 1241 FROM_HERE, base::Bind(&OrderedFunc, &order, 6)); | |
| 1242 MessageLoop::current()->PostTask( | |
| 1243 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id1)); | |
| 1244 MessageLoop::current()->PostTask( | |
| 1245 FROM_HERE, base::Bind(&OrderedFunc, &order, 7)); | |
| 1246 MessageLoop::current()->PostTask( | |
| 1247 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id2)); | |
| 1248 MessageLoop::current()->PostTask( | |
| 1249 FROM_HERE, base::Bind(&OrderedFunc, &order, 8)); | |
| 1250 MessageLoop::current()->PostTask( | |
| 1251 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id3)); | |
| 1252 MessageLoop::current()->PostTask( | |
| 1253 FROM_HERE, base::Bind(&OrderedFunc, &order, 9)); | |
| 1254 MessageLoop::current()->PostTask( | |
| 1255 FROM_HERE, MessageLoop::QuitNowWithIDClosure(nested_run_id4)); | |
| 1256 MessageLoop::current()->PostTask( | |
| 1257 FROM_HERE, base::Bind(&OrderedFunc, &order, 10)); | |
| 1258 | |
| 1259 MessageLoop::current()->RunWithID(top_most_run_id); | |
| 1260 | |
| 1261 ASSERT_EQ(18U, order.Size()); | |
| 1262 int task_index = 0; | |
| 1263 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, true)); | |
| 1264 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 2, true)); | |
| 1265 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 3, true)); | |
| 1266 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 4, true)); | |
| 1267 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 5, true)); | |
| 1268 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 5, false)); | |
| 1269 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 6, true)); | |
| 1270 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 6, false)); | |
| 1271 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 7, true)); | |
| 1272 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 7, false)); | |
| 1273 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 8, true)); | |
| 1274 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 8, false)); | |
| 1275 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 9, true)); | |
| 1276 EXPECT_EQ(order.Get(task_index++), TaskItem(ORDERERD, 9, false)); | |
| 1277 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 4, false)); | |
| 1278 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 3, false)); | |
| 1279 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 2, false)); | |
| 1280 EXPECT_EQ(order.Get(task_index++), TaskItem(RUNS, 1, false)); | |
| 1281 EXPECT_EQ(static_cast<size_t>(task_index), order.Size()); | |
| 1282 } | |
| 1283 | |
| 1082 #if defined(OS_WIN) | 1284 #if defined(OS_WIN) |
| 1083 | 1285 |
| 1084 class DispatcherImpl : public MessageLoopForUI::Dispatcher { | 1286 class DispatcherImpl : public MessageLoopForUI::Dispatcher { |
| 1085 public: | 1287 public: |
| 1086 DispatcherImpl() : dispatch_count_(0) {} | 1288 DispatcherImpl() : dispatch_count_(0) {} |
| 1087 | 1289 |
| 1088 virtual bool Dispatch(const base::NativeEvent& msg) OVERRIDE { | 1290 virtual bool Dispatch(const base::NativeEvent& msg) OVERRIDE { |
| 1089 ::TranslateMessage(&msg); | 1291 ::TranslateMessage(&msg); |
| 1090 ::DispatchMessage(&msg); | 1292 ::DispatchMessage(&msg); |
| 1091 // Do not count WM_TIMER since it is not what we post and it will cause | 1293 // Do not count WM_TIMER since it is not what we post and it will cause |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1427 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_UI, false); | 1629 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_UI, false); |
| 1428 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_IO, false); | 1630 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_IO, false); |
| 1429 } | 1631 } |
| 1430 | 1632 |
| 1431 TEST(MessageLoopTest, NonNestableDelayedInNestedLoop) { | 1633 TEST(MessageLoopTest, NonNestableDelayedInNestedLoop) { |
| 1432 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_DEFAULT, true); | 1634 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_DEFAULT, true); |
| 1433 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_UI, true); | 1635 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_UI, true); |
| 1434 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_IO, true); | 1636 RunTest_NonNestableInNestedLoop(MessageLoop::TYPE_IO, true); |
| 1435 } | 1637 } |
| 1436 | 1638 |
| 1639 TEST(MessageLoopTest, QuitNow) { | |
| 1640 RunTest_QuitNow(MessageLoop::TYPE_DEFAULT); | |
| 1641 RunTest_QuitNow(MessageLoop::TYPE_UI); | |
| 1642 RunTest_QuitNow(MessageLoop::TYPE_IO); | |
| 1643 } | |
| 1644 | |
| 1645 TEST(MessageLoopTest, QuitNowWithIDTop) { | |
| 1646 RunTest_QuitNowWithIDTop(MessageLoop::TYPE_DEFAULT); | |
| 1647 RunTest_QuitNowWithIDTop(MessageLoop::TYPE_UI); | |
| 1648 RunTest_QuitNowWithIDTop(MessageLoop::TYPE_IO); | |
| 1649 } | |
| 1650 | |
| 1651 TEST(MessageLoopTest, QuitNowWithIDNested) { | |
| 1652 RunTest_QuitNowWithIDNested(MessageLoop::TYPE_DEFAULT); | |
| 1653 RunTest_QuitNowWithIDNested(MessageLoop::TYPE_UI); | |
| 1654 RunTest_QuitNowWithIDNested(MessageLoop::TYPE_IO); | |
| 1655 } | |
| 1656 | |
| 1657 TEST(MessageLoopTest, QuitNowWithIDBogus) { | |
| 1658 RunTest_QuitNowWithIDBogus(MessageLoop::TYPE_DEFAULT); | |
| 1659 RunTest_QuitNowWithIDBogus(MessageLoop::TYPE_UI); | |
| 1660 RunTest_QuitNowWithIDBogus(MessageLoop::TYPE_IO); | |
| 1661 } | |
| 1662 | |
| 1663 TEST(MessageLoopTest, QuitNowWithIDDeep) { | |
| 1664 RunTest_QuitNowWithIDDeep(MessageLoop::TYPE_DEFAULT); | |
| 1665 RunTest_QuitNowWithIDDeep(MessageLoop::TYPE_UI); | |
| 1666 RunTest_QuitNowWithIDDeep(MessageLoop::TYPE_IO); | |
| 1667 } | |
| 1668 | |
| 1437 void PostNTasksThenQuit(int posts_remaining) { | 1669 void PostNTasksThenQuit(int posts_remaining) { |
| 1438 if (posts_remaining > 1) { | 1670 if (posts_remaining > 1) { |
| 1439 MessageLoop::current()->PostTask( | 1671 MessageLoop::current()->PostTask( |
| 1440 FROM_HERE, | 1672 FROM_HERE, |
| 1441 base::Bind(&PostNTasksThenQuit, posts_remaining - 1)); | 1673 base::Bind(&PostNTasksThenQuit, posts_remaining - 1)); |
| 1442 } else { | 1674 } else { |
| 1443 MessageLoop::current()->Quit(); | 1675 MessageLoop::current()->Quit(); |
| 1444 } | 1676 } |
| 1445 } | 1677 } |
| 1446 | 1678 |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1705 // Post quit task; | 1937 // Post quit task; |
| 1706 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 1938 MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
| 1707 &MessageLoop::Quit, base::Unretained(MessageLoop::current()))); | 1939 &MessageLoop::Quit, base::Unretained(MessageLoop::current()))); |
| 1708 | 1940 |
| 1709 // Now kick things off | 1941 // Now kick things off |
| 1710 MessageLoop::current()->Run(); | 1942 MessageLoop::current()->Run(); |
| 1711 | 1943 |
| 1712 EXPECT_EQ(foo->test_count(), 1); | 1944 EXPECT_EQ(foo->test_count(), 1); |
| 1713 EXPECT_EQ(foo->result(), "a"); | 1945 EXPECT_EQ(foo->result(), "a"); |
| 1714 } | 1946 } |
| OLD | NEW |