Index: ios/chrome/browser/callback_counter.mm |
diff --git a/ios/chrome/browser/callback_counter.mm b/ios/chrome/browser/callback_counter.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ffe4642a4a74c757ee034b591249d46afba7b1a6 |
--- /dev/null |
+++ b/ios/chrome/browser/callback_counter.mm |
@@ -0,0 +1,31 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/chrome/browser/callback_counter.h" |
+ |
+CallbackCounter::CallbackCounter(const FinalCallback& final_callback) |
+ : callback_count_(0U), final_callback_(final_callback) { |
+ DCHECK(!final_callback.is_null()); |
+} |
+ |
+CallbackCounter::~CallbackCounter() { |
+ DCHECK_EQ(0U, callback_count_); |
+} |
+ |
+void CallbackCounter::IncrementCount() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(!final_callback_.is_null()); |
+ ++callback_count_; |
+} |
+ |
+void CallbackCounter::DecrementCount() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(callback_count_); |
+ |
+ --callback_count_; |
+ if (callback_count_ == 0) { |
+ final_callback_.Run(); |
+ final_callback_.Reset(); |
+ } |
+} |