Add ScopedClosureRunner.

BUG=None
TEST=Unittests


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

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


CrOS-Libchrome-Original-Commit: 0b5266df8f10697951e8b8f833f3d941b14258f0
diff --git a/base/task.cc b/base/task.cc
index 8c61473..89d2aa8 100644
--- a/base/task.cc
+++ b/base/task.cc
@@ -34,6 +34,21 @@
   return tmp;
 }
 
+ScopedClosureRunner::ScopedClosureRunner(const Closure& closure)
+    : closure_(closure) {
+}
+
+ScopedClosureRunner::~ScopedClosureRunner() {
+  if (!closure_.is_null())
+    closure_.Run();
+}
+
+Closure ScopedClosureRunner::Release() {
+  Closure result = closure_;
+  closure_.Reset();
+  return result;
+}
+
 namespace subtle {
 
 TaskClosureAdapter::TaskClosureAdapter(Task* task)