| Index: third_party/polymer/components/promise-polyfill/Promise.js
 | 
| diff --git a/third_party/polymer/components/promise-polyfill/Promise.js b/third_party/polymer/components/promise-polyfill/Promise.js
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..b8388bf3e72c651f1d08661204711bf22e376b54
 | 
| --- /dev/null
 | 
| +++ b/third_party/polymer/components/promise-polyfill/Promise.js
 | 
| @@ -0,0 +1,137 @@
 | 
| +/**
 | 
| +@license
 | 
| +Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
 | 
| +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
 | 
| +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
 | 
| +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
 | 
| +Code distributed by Google as part of the polymer project is also
 | 
| +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
 | 
| +*/
 | 
| +function MakePromise (asap) {
 | 
| +  function Promise(fn) {
 | 
| +		if (typeof this !== 'object' || typeof fn !== 'function') throw new TypeError();
 | 
| +		this._state = null;
 | 
| +		this._value = null;
 | 
| +		this._deferreds = []
 | 
| +
 | 
| +		doResolve(fn, resolve.bind(this), reject.bind(this));
 | 
| +	}
 | 
| +
 | 
| +	function handle(deferred) {
 | 
| +		var me = this;
 | 
| +		if (this._state === null) {
 | 
| +			this._deferreds.push(deferred);
 | 
| +			return
 | 
| +		}
 | 
| +		asap(function() {
 | 
| +			var cb = me._state ? deferred.onFulfilled : deferred.onRejected
 | 
| +			if (typeof cb !== 'function') {
 | 
| +				(me._state ? deferred.resolve : deferred.reject)(me._value);
 | 
| +				return;
 | 
| +			}
 | 
| +			var ret;
 | 
| +			try {
 | 
| +				ret = cb(me._value);
 | 
| +			}
 | 
| +			catch (e) {
 | 
| +				deferred.reject(e);
 | 
| +				return;
 | 
| +			}
 | 
| +			deferred.resolve(ret);
 | 
| +		})
 | 
| +	}
 | 
| +
 | 
| +	function resolve(newValue) {
 | 
| +		try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
 | 
| +			if (newValue === this) throw new TypeError();
 | 
| +			if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
 | 
| +				var then = newValue.then;
 | 
| +				if (typeof then === 'function') {
 | 
| +					doResolve(then.bind(newValue), resolve.bind(this), reject.bind(this));
 | 
| +					return;
 | 
| +				}
 | 
| +			}
 | 
| +			this._state = true;
 | 
| +			this._value = newValue;
 | 
| +			finale.call(this);
 | 
| +		} catch (e) { reject.call(this, e); }
 | 
| +	}
 | 
| +
 | 
| +	function reject(newValue) {
 | 
| +		this._state = false;
 | 
| +		this._value = newValue;
 | 
| +		finale.call(this);
 | 
| +	}
 | 
| +
 | 
| +	function finale() {
 | 
| +		for (var i = 0, len = this._deferreds.length; i < len; i++) {
 | 
| +			handle.call(this, this._deferreds[i]);
 | 
| +		}
 | 
| +		this._deferreds = null;
 | 
| +	}
 | 
| +
 | 
| +	/**
 | 
| +	 * Take a potentially misbehaving resolver function and make sure
 | 
| +	 * onFulfilled and onRejected are only called once.
 | 
| +	 *
 | 
| +	 * Makes no guarantees about asynchrony.
 | 
| +	 */
 | 
| +	function doResolve(fn, onFulfilled, onRejected) {
 | 
| +		var done = false;
 | 
| +		try {
 | 
| +			fn(function (value) {
 | 
| +				if (done) return;
 | 
| +				done = true;
 | 
| +				onFulfilled(value);
 | 
| +			}, function (reason) {
 | 
| +				if (done) return;
 | 
| +				done = true;
 | 
| +				onRejected(reason);
 | 
| +			})
 | 
| +		} catch (ex) {
 | 
| +			if (done) return;
 | 
| +			done = true;
 | 
| +			onRejected(ex);
 | 
| +		}
 | 
| +	}
 | 
| +
 | 
| +	Promise.prototype['catch'] = function (onRejected) {
 | 
| +		return this.then(null, onRejected);
 | 
| +	};
 | 
| +
 | 
| +	Promise.prototype.then = function(onFulfilled, onRejected) {
 | 
| +		var me = this;
 | 
| +		return new Promise(function(resolve, reject) {
 | 
| +      handle.call(me, {
 | 
| +        onFulfilled: onFulfilled,
 | 
| +        onRejected: onRejected,
 | 
| +        resolve: resolve,
 | 
| +        reject: reject
 | 
| +      });
 | 
| +		})
 | 
| +	};
 | 
| +
 | 
| +	Promise.resolve = function (value) {
 | 
| +		if (value && typeof value === 'object' && value.constructor === Promise) {
 | 
| +			return value;
 | 
| +		}
 | 
| +
 | 
| +		return new Promise(function (resolve) {
 | 
| +			resolve(value);
 | 
| +		});
 | 
| +	};
 | 
| +
 | 
| +	Promise.reject = function (value) {
 | 
| +		return new Promise(function (resolve, reject) {
 | 
| +			reject(value);
 | 
| +		});
 | 
| +	};
 | 
| +
 | 
| +	
 | 
| +  return Promise;
 | 
| +}
 | 
| +
 | 
| +if (typeof module !== 'undefined') {
 | 
| +  module.exports = MakePromise;
 | 
| +}
 | 
| +
 | 
| 
 |