1// This file was GENERATED by command:
2//     pump.py callback_tracker_internal.h.pump
3// DO NOT EDIT BY HAND!!!
4
5
6// Copyright 2014 The Chromium Authors. All rights reserved.
7// Use of this source code is governed by a BSD-style license that can be
8// found in the LICENSE file.
9
10#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_
11#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_
12
13#include "base/callback.h"
14#include "base/callback_internal.h"
15#include "base/memory/scoped_ptr.h"
16#include "base/memory/weak_ptr.h"
17
18namespace sync_file_system {
19namespace drive_backend {
20
21class CallbackTracker;
22
23namespace internal {
24
25class AbortHelper {
26 public:
27  explicit AbortHelper(CallbackTracker* tracker);
28  ~AbortHelper();
29  base::WeakPtr<AbortHelper> AsWeakPtr();
30
31  static scoped_ptr<AbortHelper> TakeOwnership(
32      const base::WeakPtr<AbortHelper>& abort_helper);
33
34 private:
35  CallbackTracker* tracker_;  // Not owned.
36  base::WeakPtrFactory<AbortHelper> weak_ptr_factory_;
37
38  DISALLOW_COPY_AND_ASSIGN(AbortHelper);
39};
40
41template <typename>
42struct InvokeAndInvalidateHelper;
43
44template <>
45struct InvokeAndInvalidateHelper<void()> {
46  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
47                  const base::Callback<void()>& callback) {
48    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
49    if (deleter) {
50      callback.Run();
51    }
52  }
53};
54
55template <typename A1>
56struct InvokeAndInvalidateHelper<void(A1)> {
57  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
58                  const base::Callback<void(A1)>& callback, A1 a1) {
59    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
60    if (deleter) {
61      callback.Run(base::internal::CallbackForward(a1));
62    }
63  }
64};
65
66template <typename A1, typename A2>
67struct InvokeAndInvalidateHelper<void(A1, A2)> {
68  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
69                  const base::Callback<void(A1, A2)>& callback, A1 a1, A2 a2) {
70    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
71    if (deleter) {
72      callback.Run(base::internal::CallbackForward(a1),
73          base::internal::CallbackForward(a2));
74    }
75  }
76};
77
78template <typename A1, typename A2, typename A3>
79struct InvokeAndInvalidateHelper<void(A1, A2, A3)> {
80  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
81                  const base::Callback<void(A1, A2, A3)>& callback, A1 a1,
82                      A2 a2, A3 a3) {
83    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
84    if (deleter) {
85      callback.Run(base::internal::CallbackForward(a1),
86          base::internal::CallbackForward(a2),
87          base::internal::CallbackForward(a3));
88    }
89  }
90};
91
92template <typename A1, typename A2, typename A3, typename A4>
93struct InvokeAndInvalidateHelper<void(A1, A2, A3, A4)> {
94  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
95                  const base::Callback<void(A1, A2, A3, A4)>& callback, A1 a1,
96                      A2 a2, A3 a3, A4 a4) {
97    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
98    if (deleter) {
99      callback.Run(base::internal::CallbackForward(a1),
100          base::internal::CallbackForward(a2),
101          base::internal::CallbackForward(a3),
102          base::internal::CallbackForward(a4));
103    }
104  }
105};
106
107template <typename A1, typename A2, typename A3, typename A4, typename A5>
108struct InvokeAndInvalidateHelper<void(A1, A2, A3, A4, A5)> {
109  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
110                  const base::Callback<void(A1, A2, A3, A4, A5)>& callback,
111                      A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) {
112    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
113    if (deleter) {
114      callback.Run(base::internal::CallbackForward(a1),
115          base::internal::CallbackForward(a2),
116          base::internal::CallbackForward(a3),
117          base::internal::CallbackForward(a4),
118          base::internal::CallbackForward(a5));
119    }
120  }
121};
122
123template <typename A1, typename A2, typename A3, typename A4, typename A5,
124    typename A6>
125struct InvokeAndInvalidateHelper<void(A1, A2, A3, A4, A5, A6)> {
126  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
127                  const base::Callback<void(A1, A2, A3, A4, A5, A6)>& callback,
128                      A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) {
129    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
130    if (deleter) {
131      callback.Run(base::internal::CallbackForward(a1),
132          base::internal::CallbackForward(a2),
133          base::internal::CallbackForward(a3),
134          base::internal::CallbackForward(a4),
135          base::internal::CallbackForward(a5),
136          base::internal::CallbackForward(a6));
137    }
138  }
139};
140
141template <typename A1, typename A2, typename A3, typename A4, typename A5,
142    typename A6, typename A7>
143struct InvokeAndInvalidateHelper<void(A1, A2, A3, A4, A5, A6, A7)> {
144  static void Run(const base::WeakPtr<AbortHelper>& abort_helper,
145                  const base::Callback<void(A1, A2, A3, A4, A5, A6,
146                      A7)>& callback, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6,
147                      A7 a7) {
148    scoped_ptr<AbortHelper> deleter = AbortHelper::TakeOwnership(abort_helper);
149    if (deleter) {
150      callback.Run(base::internal::CallbackForward(a1),
151          base::internal::CallbackForward(a2),
152          base::internal::CallbackForward(a3),
153          base::internal::CallbackForward(a4),
154          base::internal::CallbackForward(a5),
155          base::internal::CallbackForward(a6),
156          base::internal::CallbackForward(a7));
157    }
158  }
159};
160
161}  // namespace internal
162}  // namespace drive_backend
163}  // namespace sync_file_system
164
165#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_CALLBACK_TRACKER_INTERNAL_H_
166