blob: eb51f0940fcf239644ff4f3d5b0297fc6db88494 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 "src/ledger/bin/app/token_manager.h"
#include <lib/fit/function.h>
#include "src/ledger/bin/storage/public/types.h"
#include "src/ledger/lib/callback/scoped_callback.h"
#include "src/ledger/lib/logging/logging.h"
namespace ledger {
TokenManager::TokenManager() : outstanding_token_count_(0), weak_factory_(this) {}
TokenManager::~TokenManager() = default;
void TokenManager::SetOnDiscardable(fit::closure on_discardable) {
on_discardable_ = std::move(on_discardable);
}
ExpiringToken TokenManager::CreateToken() {
++outstanding_token_count_;
return ExpiringToken(MakeScoped(weak_factory_.GetWeakPtr(), [this] {
LEDGER_DCHECK(outstanding_token_count_ > 0);
--outstanding_token_count_;
if (outstanding_token_count_ == 0 && on_discardable_) {
on_discardable_();
}
}));
}
bool TokenManager::IsDiscardable() const { return outstanding_token_count_ == 0; }
} // namespace ledger