| Index: remoting/jingle_glue/jingle_thread_unittest.cc | 
| diff --git a/remoting/jingle_glue/jingle_thread_unittest.cc b/remoting/jingle_glue/jingle_thread_unittest.cc | 
| index a29b69c28d2f6efe9c09fbcd12f9f7915447d861..bebb16d1b7e61b4c60efcfff51bc88e942ce8711 100644 | 
| --- a/remoting/jingle_glue/jingle_thread_unittest.cc | 
| +++ b/remoting/jingle_glue/jingle_thread_unittest.cc | 
| @@ -3,6 +3,8 @@ | 
| // found in the LICENSE file. | 
|  | 
| #include "base/message_loop.h" | 
| +#include "base/time.h" | 
| +#include "base/waitable_event.h" | 
| #include "remoting/jingle_glue/jingle_thread.h" | 
| #include "testing/gmock/include/gmock/gmock.h" | 
| #include "testing/gtest/include/gtest/gtest.h" | 
| @@ -14,6 +16,13 @@ class MockTask : public Task { | 
| MOCK_METHOD0(Run, void()); | 
| }; | 
|  | 
| +namespace { | 
| +// Delay used to test delayed tasks. Shouldn't be too big, so that we don't | 
| +// slow down the test, yet, should be big enough to be measurable. | 
| +int kDelayMs = 50;  // 0.05 s. | 
| +int kDelayTimeoutMs = 10000;  // 10 s. | 
| +}  // namespace | 
| + | 
| TEST(JingleThreadTest, PostTask) { | 
| JingleThread thread; | 
| MockTask* task = new MockTask(); | 
| @@ -24,4 +33,24 @@ TEST(JingleThreadTest, PostTask) { | 
| thread.Stop(); | 
| } | 
|  | 
| +ACTION_P(SignalEvent, event) { | 
| +  event->Signal(); | 
| +} | 
| + | 
| +TEST(JingleThreadTest, PostDelayedTask) { | 
| +  JingleThread thread; | 
| +  MockTask* task = new MockTask(); | 
| +  base::WaitableEvent event(true, false); | 
| +  EXPECT_CALL(*task, Run()).WillOnce(SignalEvent(&event)); | 
| + | 
| +  thread.Start(); | 
| +  base::Time start = base::Time::Now(); | 
| +  thread.message_loop()->PostDelayedTask(FROM_HERE, task, kDelayMs); | 
| +  event.TimedWait(base::TimeDelta::FromMilliseconds(kDelayTimeoutMs)); | 
| +  base::Time end = base::Time::Now(); | 
| +  thread.Stop(); | 
| + | 
| +  EXPECT_GT((end - start).InMillisecondsRoundedUp(), kDelayMs); | 
| +} | 
| + | 
| }  // namespace remoting | 
|  |