| Index: base/timer_unittest.cc
|
| diff --git a/base/timer_unittest.cc b/base/timer_unittest.cc
|
| index b48c77428d4e01d62bb5f03166a4743812d6d092..4349245f729ca38e423b1edb75c593cfdbfbcf09 100644
|
| --- a/base/timer_unittest.cc
|
| +++ b/base/timer_unittest.cc
|
| @@ -243,6 +243,31 @@ void RunTest_DelayTimer_Reset(MessageLoop::Type message_loop_type) {
|
| ASSERT_TRUE(target.signaled());
|
| }
|
|
|
| +class DelayTimerFatalTarget {
|
| + public:
|
| + void Signal() {
|
| + ASSERT_TRUE(false);
|
| + }
|
| +};
|
| +
|
| +
|
| +void RunTest_DelayTimer_Deleted(MessageLoop::Type message_loop_type) {
|
| + MessageLoop loop(message_loop_type);
|
| +
|
| + DelayTimerFatalTarget target;
|
| +
|
| + {
|
| + base::DelayTimer<DelayTimerFatalTarget> timer(
|
| + TimeDelta::FromMilliseconds(50), &target,
|
| + &DelayTimerFatalTarget::Signal);
|
| + timer.Reset();
|
| + }
|
| +
|
| + // When the timer is deleted, the DelayTimerFatalTarget should never be
|
| + // called.
|
| + PlatformThread::Sleep(100);
|
| +}
|
| +
|
| } // namespace
|
|
|
| //-----------------------------------------------------------------------------
|
| @@ -299,6 +324,12 @@ TEST(TimerTest, DelayTimer_Reset) {
|
| RunTest_DelayTimer_Reset(MessageLoop::TYPE_IO);
|
| }
|
|
|
| +TEST(TimerTest, DelayTimer_Deleted) {
|
| + RunTest_DelayTimer_Deleted(MessageLoop::TYPE_DEFAULT);
|
| + RunTest_DelayTimer_Deleted(MessageLoop::TYPE_UI);
|
| + RunTest_DelayTimer_Deleted(MessageLoop::TYPE_IO);
|
| +}
|
| +
|
| TEST(TimerTest, MessageLoopShutdown) {
|
| // This test is designed to verify that shutdown of the
|
| // message loop does not cause crashes if there were pending
|
|
|