| Index: base/message_loop/message_pump_glib_unittest.cc | 
| diff --git a/base/message_loop/message_pump_glib_unittest.cc b/base/message_loop/message_pump_glib_unittest.cc | 
| index bef0c8f63e122ef62c180291a31af381bb47b803..564de7d83f549eb09dfa186989b6096907acb1d1 100644 | 
| --- a/base/message_loop/message_pump_glib_unittest.cc | 
| +++ b/base/message_loop/message_pump_glib_unittest.cc | 
| @@ -59,27 +59,27 @@ class EventInjector { | 
| void HandleDispatch() { | 
| if (events_.empty()) | 
| return; | 
| -    Event event = events_[0]; | 
| +    Event event = std::move(events_[0]); | 
| events_.erase(events_.begin()); | 
| ++processed_events_; | 
| if (!event.callback.is_null()) | 
| -      event.callback.Run(); | 
| +      std::move(event.callback).Run(); | 
| else if (!event.task.is_null()) | 
| -      event.task.Run(); | 
| +      std::move(event.task).Run(); | 
| } | 
|  | 
| // Adds an event to the queue. When "handled", executes |callback|. | 
| // delay_ms is relative to the last event if any, or to Now() otherwise. | 
| -  void AddEvent(int delay_ms, const Closure& callback) { | 
| -    AddEventHelper(delay_ms, callback, Closure()); | 
| +  void AddEvent(int delay_ms, OnceClosure callback) { | 
| +    AddEventHelper(delay_ms, std::move(callback), OnceClosure()); | 
| } | 
|  | 
| void AddDummyEvent(int delay_ms) { | 
| -    AddEventHelper(delay_ms, Closure(), Closure()); | 
| +    AddEventHelper(delay_ms, OnceClosure(), OnceClosure()); | 
| } | 
|  | 
| -  void AddEventAsTask(int delay_ms, const Closure& task) { | 
| -    AddEventHelper(delay_ms, Closure(), task); | 
| +  void AddEventAsTask(int delay_ms, OnceClosure task) { | 
| +    AddEventHelper(delay_ms, OnceClosure(), std::move(task)); | 
| } | 
|  | 
| void Reset() { | 
| @@ -92,16 +92,15 @@ class EventInjector { | 
| private: | 
| struct Event { | 
| Time time; | 
| -    Closure callback; | 
| -    Closure task; | 
| +    OnceClosure callback; | 
| +    OnceClosure task; | 
| }; | 
|  | 
| struct Source : public GSource { | 
| EventInjector* injector; | 
| }; | 
|  | 
| -  void AddEventHelper( | 
| -      int delay_ms, const Closure& callback, const Closure& task) { | 
| +  void AddEventHelper(int delay_ms, OnceClosure callback, OnceClosure task) { | 
| Time last_time; | 
| if (!events_.empty()) | 
| last_time = (events_.end()-1)->time; | 
| @@ -109,8 +108,8 @@ class EventInjector { | 
| last_time = Time::NowFromSystemTime(); | 
|  | 
| Time future = last_time + TimeDelta::FromMilliseconds(delay_ms); | 
| -    EventInjector::Event event = {future, callback, task}; | 
| -    events_.push_back(event); | 
| +    EventInjector::Event event = {future, std::move(callback), std::move(task)}; | 
| +    events_.push_back(std::move(event)); | 
| } | 
|  | 
| static gboolean Prepare(GSource* source, gint* timeout_ms) { | 
| @@ -154,8 +153,8 @@ void ExpectProcessedEvents(EventInjector* injector, int count) { | 
|  | 
| // Posts a task on the current message loop. | 
| void PostMessageLoopTask(const tracked_objects::Location& from_here, | 
| -                         const Closure& task) { | 
| -  ThreadTaskRunnerHandle::Get()->PostTask(from_here, task); | 
| +                         OnceClosure task) { | 
| +  ThreadTaskRunnerHandle::Get()->PostTask(from_here, std::move(task)); | 
| } | 
|  | 
| // Test fixture. | 
| @@ -208,24 +207,24 @@ TEST_F(MessagePumpGLibTest, TestEventTaskInterleave) { | 
| // If changes cause this test to fail, it is reasonable to change it, but | 
| // TestWorkWhileWaitingForEvents and TestEventsWhileWaitingForWork have to be | 
| // changed accordingly, otherwise they can become flaky. | 
| -  injector()->AddEventAsTask(0, Bind(&DoNothing)); | 
| -  Closure check_task = | 
| -      Bind(&ExpectProcessedEvents, Unretained(injector()), 2); | 
| -  Closure posted_task = | 
| -      Bind(&PostMessageLoopTask, FROM_HERE, check_task); | 
| -  injector()->AddEventAsTask(0, posted_task); | 
| -  injector()->AddEventAsTask(0, Bind(&DoNothing)); | 
| +  injector()->AddEventAsTask(0, BindOnce(&DoNothing)); | 
| +  OnceClosure check_task = | 
| +      BindOnce(&ExpectProcessedEvents, Unretained(injector()), 2); | 
| +  OnceClosure posted_task = | 
| +      BindOnce(&PostMessageLoopTask, FROM_HERE, std::move(check_task)); | 
| +  injector()->AddEventAsTask(0, std::move(posted_task)); | 
| +  injector()->AddEventAsTask(0, BindOnce(&DoNothing)); | 
| injector()->AddEvent(0, MessageLoop::QuitWhenIdleClosure()); | 
| RunLoop().Run(); | 
| EXPECT_EQ(4, injector()->processed_events()); | 
|  | 
| injector()->Reset(); | 
| -  injector()->AddEventAsTask(0, Bind(&DoNothing)); | 
| -  check_task = | 
| -      Bind(&ExpectProcessedEvents, Unretained(injector()), 2); | 
| -  posted_task = Bind(&PostMessageLoopTask, FROM_HERE, check_task); | 
| -  injector()->AddEventAsTask(0, posted_task); | 
| -  injector()->AddEventAsTask(10, Bind(&DoNothing)); | 
| +  injector()->AddEventAsTask(0, BindOnce(&DoNothing)); | 
| +  check_task = BindOnce(&ExpectProcessedEvents, Unretained(injector()), 2); | 
| +  posted_task = | 
| +      BindOnce(&PostMessageLoopTask, FROM_HERE, std::move(check_task)); | 
| +  injector()->AddEventAsTask(0, std::move(posted_task)); | 
| +  injector()->AddEventAsTask(10, BindOnce(&DoNothing)); | 
| injector()->AddEvent(0, MessageLoop::QuitWhenIdleClosure()); | 
| RunLoop().Run(); | 
| EXPECT_EQ(4, injector()->processed_events()); | 
| @@ -279,11 +278,11 @@ TEST_F(MessagePumpGLibTest, TestEventsWhileWaitingForWork) { | 
| // After all the events have been processed, post a task that will check that | 
| // the events have been processed (note: the task executes after the event | 
| // that posted it has been handled, so we expect 11 at that point). | 
| -  Closure check_task = | 
| -      Bind(&ExpectProcessedEvents, Unretained(injector()), 11); | 
| -  Closure posted_task = | 
| -      Bind(&PostMessageLoopTask, FROM_HERE, check_task); | 
| -  injector()->AddEventAsTask(10, posted_task); | 
| +  OnceClosure check_task = | 
| +      BindOnce(&ExpectProcessedEvents, Unretained(injector()), 11); | 
| +  OnceClosure posted_task = | 
| +      BindOnce(&PostMessageLoopTask, FROM_HERE, std::move(check_task)); | 
| +  injector()->AddEventAsTask(10, std::move(posted_task)); | 
|  | 
| // And then quit (relies on the condition tested by TestEventTaskInterleave). | 
| injector()->AddEvent(10, MessageLoop::QuitWhenIdleClosure()); | 
| @@ -324,8 +323,8 @@ class ConcurrentHelper : public RefCounted<ConcurrentHelper>  { | 
| if (task_count_ == 0 && event_count_ == 0) { | 
| MessageLoop::current()->QuitWhenIdle(); | 
| } else { | 
| -      injector_->AddEventAsTask( | 
| -          0, Bind(&ConcurrentHelper::FromEvent, this)); | 
| +      injector_->AddEventAsTask(0, | 
| +                                BindOnce(&ConcurrentHelper::FromEvent, this)); | 
| } | 
| } | 
|  | 
| @@ -357,10 +356,8 @@ TEST_F(MessagePumpGLibTest, TestConcurrentEventPostedTask) { | 
|  | 
| // Add 2 events to the queue to make sure it is always full (when we remove | 
| // the event before processing it). | 
| -  injector()->AddEventAsTask( | 
| -      0, Bind(&ConcurrentHelper::FromEvent, helper)); | 
| -  injector()->AddEventAsTask( | 
| -      0, Bind(&ConcurrentHelper::FromEvent, helper)); | 
| +  injector()->AddEventAsTask(0, BindOnce(&ConcurrentHelper::FromEvent, helper)); | 
| +  injector()->AddEventAsTask(0, BindOnce(&ConcurrentHelper::FromEvent, helper)); | 
|  | 
| // Similarly post 2 tasks. | 
| loop()->task_runner()->PostTask( | 
|  |