blob: 38ac08660baed3bca9b1d2071b8bef02b85af73f [file] [log] [blame]
wez@chromium.org6d4ad682011-05-28 04:35:11 +09001// Copyright (c) 2011 The Chromium Authors. All rights reserved.
erg@chromium.org493f5f62010-07-16 06:03:54 +09002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/task.h"
6
7Task::Task() {
8}
9
10Task::~Task() {
11}
12
wez@chromium.org6d4ad682011-05-28 04:35:11 +090013namespace base {
14
sergeyu@chromium.org17c67352011-10-05 00:28:03 +090015ScopedClosureRunner::ScopedClosureRunner(const Closure& closure)
16 : closure_(closure) {
17}
18
19ScopedClosureRunner::~ScopedClosureRunner() {
20 if (!closure_.is_null())
21 closure_.Run();
22}
23
24Closure ScopedClosureRunner::Release() {
25 Closure result = closure_;
26 closure_.Reset();
27 return result;
28}
29
ajwong@chromium.org12fa0922011-07-27 03:25:16 +090030namespace subtle {
31
32TaskClosureAdapter::TaskClosureAdapter(Task* task)
33 : task_(task),
34 should_leak_task_(&kTaskLeakingDefault) {
35}
36
37TaskClosureAdapter::TaskClosureAdapter(Task* task, bool* should_leak_task)
38 : task_(task),
39 should_leak_task_(should_leak_task) {
40}
41
42TaskClosureAdapter::~TaskClosureAdapter() {
43 if (!*should_leak_task_) {
44 delete task_;
45 }
46}
47
48void TaskClosureAdapter::Run() {
apatrick@chromium.orgcd211392011-08-09 10:44:21 +090049 task_->Run();
50 delete task_;
51 task_ = NULL;
ajwong@chromium.org12fa0922011-07-27 03:25:16 +090052}
53
54// Don't leak tasks by default.
55bool TaskClosureAdapter::kTaskLeakingDefault = false;
56
57} // namespace subtle
58
wez@chromium.org6d4ad682011-05-28 04:35:11 +090059} // namespace base