// 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; };