Support Closure in ALL the loops!

Add an overload for PostTask into MessageLoopProxy, and WorkerPool.

BUG=35223
TEST=unittests.


Review URL: http://codereview.chromium.org/7316015

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94129 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 180c85e3e3691042ab617fd0755dcde6e75d5fbd
diff --git a/base/task.cc b/base/task.cc
index e4da547..8c61473 100644
--- a/base/task.cc
+++ b/base/task.cc
@@ -34,4 +34,33 @@
   return tmp;
 }
 
+namespace subtle {
+
+TaskClosureAdapter::TaskClosureAdapter(Task* task)
+    : task_(task),
+      should_leak_task_(&kTaskLeakingDefault) {
+}
+
+TaskClosureAdapter::TaskClosureAdapter(Task* task, bool* should_leak_task)
+    : task_(task),
+      should_leak_task_(should_leak_task) {
+}
+
+TaskClosureAdapter::~TaskClosureAdapter() {
+  if (!*should_leak_task_) {
+    delete task_;
+  }
+}
+
+void TaskClosureAdapter::Run() {
+  task_->Run();
+  delete task_;
+  task_ = NULL;
+}
+
+// Don't leak tasks by default.
+bool TaskClosureAdapter::kTaskLeakingDefault = false;
+
+}  // namespace subtle
+
 }  // namespace base