blob: 6b05579a1aec2e679830586331919e97cd680aa5 [file] [log] [blame]
// Copyright 2014 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.
/**
* @fileoverview Utilities for local_ntp.js.
*/
/**
* A counter with a callback that gets executed on the 1-to-0 transition.
*
* @param {function()} callback The callback to be executed.
* @constructor
*/
function Barrier(callback) {
/** @private {function()} */
this.callback_ = callback;
/** @private {number} */
this.count_ = 0;
/** @private {boolean} */
this.isCancelled_ = false;
}
/**
* Increments count of the Barrier.
*/
Barrier.prototype.add = function() {
++this.count_;
};
/**
* Decrements count of the Barrier, and executes callback on 1-to-0 transition.
*/
Barrier.prototype.remove = function() {
if (this.count_ === 0) // Guards against underflow.
return;
--this.count_;
if (!this.isCancelled_ && this.count_ === 0)
this.callback_();
};
/**
* Deactivates the Barrier; the callback will never be executed.
*/
Barrier.prototype.cancel = function() {
this.isCancelled_ = true;
};