Index: chrome/browser/resources/shared/js/cr/promise.js |
=================================================================== |
--- chrome/browser/resources/shared/js/cr/promise.js (revision 177292) |
+++ chrome/browser/resources/shared/js/cr/promise.js (working copy) |
@@ -1,214 +0,0 @@ |
-// Copyright (c) 2012 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 This implementes a future promise class. |
- */ |
- |
-cr.define('cr', function() { |
- |
- /** |
- * Sentinel used to mark a value as pending. |
- * @const |
- */ |
- var PENDING_VALUE = {}; |
- |
- /** |
- * Creates a future promise. |
- * @param {*=} opt_value The value to set the promise to. If set completes |
- * the promise immediately. |
- * @constructor |
- */ |
- function Promise(opt_value) { |
- /** |
- * An array of the callbacks. |
- * @type {!Array.<!Function>} |
- * @private |
- */ |
- this.callbacks_ = []; |
- |
- if (arguments.length > 0) |
- this.value = opt_value; |
- } |
- |
- Promise.prototype = { |
- /** |
- * The current value. |
- * @type {*} |
- * @private |
- */ |
- value_: PENDING_VALUE, |
- |
- /** |
- * The value of the future promise. Accessing this before the promise has |
- * been fulfilled will throw an error. If this is set to an exception |
- * accessing this will throw as well. |
- * @type {*} |
- */ |
- get value() { |
- return this.done ? this.value_ : undefined; |
- }, |
- set value(value) { |
- if (!this.done) { |
- this.value_ = value; |
- for (var i = 0; i < this.callbacks_.length; i++) { |
- this.callbacks_[i].call(null, value); |
- } |
- this.callbacks_.length = 0; |
- } |
- }, |
- |
- /** |
- * Whether the future promise has been fulfilled. |
- * @type {boolean} |
- */ |
- get done() { |
- return this.value_ !== PENDING_VALUE; |
- }, |
- |
- /** |
- * Adds a listener to the future promise. The function will be called when |
- * the promise is fulfilled. If the promise is already fullfilled this will |
- * never call the function. |
- * @param {!Function} fun The function to call. |
- */ |
- addListener: function(fun) { |
- if (this.done) |
- fun(this.value); |
- else |
- this.callbacks_.push(fun); |
- }, |
- |
- /** |
- * Removes a previously added listener from the future promise. |
- * @param {!Function} fun The function to remove. |
- */ |
- removeListener: function(fun) { |
- var i = this.callbacks_.indexOf(fun); |
- if (i >= 0) |
- this.callbacks_.splice(i, 1); |
- }, |
- |
- /** |
- * If the promise is done then this returns the string representation of |
- * the value. |
- * @return {string} The string representation of the promise. |
- * @override |
- */ |
- toString: function() { |
- if (this.done) |
- return String(this.value); |
- else |
- return '[object Promise]'; |
- }, |
- |
- /** |
- * Override to allow arithmetic. |
- * @override |
- */ |
- valueOf: function() { |
- return this.value; |
- } |
- }; |
- |
- /** |
- * When a future promise is done call {@code fun}. This also calls the |
- * function if the promise has already been fulfilled. |
- * @param {!Promise} p The promise. |
- * @param {!Function} fun The function to call when the promise is fulfilled. |
- */ |
- Promise.when = function(p, fun) { |
- p.addListener(fun); |
- }; |
- |
- /** |
- * Creates a new promise the will be fulfilled after {@code t} ms. |
- * @param {number} t The time to wait before the promise is fulfilled. |
- * @param {*=} opt_value The value to return after the wait. |
- * @return {!Promise} The new future promise. |
- */ |
- Promise.wait = function(t, opt_value) { |
- var p = new Promise; |
- window.setTimeout(function() { |
- p.value = opt_value; |
- }, t); |
- return p; |
- }; |
- |
- /** |
- * Creates a new future promise that is fulfilled when any of the promises are |
- * fulfilled. The value of the returned promise will be the value of the first |
- * fulfilled promise. |
- * @param {...!Promise} var_args The promises used to build up the new |
- * promise. |
- * @return {!Promise} The new promise that will be fulfilled when any of the |
- * passed in promises are fulfilled. |
- */ |
- Promise.any = function(var_args) { |
- var p = new Promise; |
- function f(v) { |
- p.value = v; |
- } |
- for (var i = 0; i < arguments.length; i++) { |
- arguments[i].addListener(f); |
- } |
- return p; |
- }; |
- |
- /** |
- * Creates a new future promise that is fulfilled when all of the promises are |
- * fulfilled. The value of the returned promise is an array of the values of |
- * the promises passed in. |
- * @param {...!Promise} var_args The promises used to build up the new |
- * promise. |
- * @return {!Promise} The promise that wraps all the promises in the array. |
- */ |
- Promise.all = function(var_args) { |
- var p = new Promise; |
- var args = Array.prototype.slice.call(arguments); |
- var count = args.length; |
- if (!count) { |
- p.value = []; |
- return p; |
- } |
- |
- function f(v) { |
- count--; |
- if (!count) { |
- p.value = args.map(function(argP) { |
- return argP.value; |
- }); |
- } |
- } |
- |
- // Do not use count here since count may be decremented in the call to |
- // addListener if the promise is already done. |
- for (var i = 0; i < args.length; i++) { |
- args[i].addListener(f); |
- } |
- |
- return p; |
- }; |
- |
- /** |
- * Wraps an event in a future promise. |
- * @param {!EventTarget} target The object that dispatches the event. |
- * @param {string} type The type of the event. |
- * @param {boolean=} opt_useCapture Whether to listen to the capture phase or |
- * the bubble phase. |
- * @return {!Promise} The promise that will be fulfilled when the event is |
- * dispatched. |
- */ |
- Promise.event = function(target, type, opt_useCapture) { |
- var p = new Promise; |
- target.addEventListener(type, function(e) { |
- p.value = e; |
- }, opt_useCapture); |
- return p; |
- }; |
- |
- return { |
- Promise: Promise |
- }; |
-}); |