| Index: third_party/polymer/components/promise-polyfill/Promise-Statics.js
 | 
| diff --git a/third_party/polymer/components/promise-polyfill/Promise-Statics.js b/third_party/polymer/components/promise-polyfill/Promise-Statics.js
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..49eeb8b3444ccfac876f527ab2a323c6014657fa
 | 
| --- /dev/null
 | 
| +++ b/third_party/polymer/components/promise-polyfill/Promise-Statics.js
 | 
| @@ -0,0 +1,49 @@
 | 
| +/**
 | 
| +@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
 | 
| +*/
 | 
| +Promise.all = Promise.all || function () {
 | 
| +  var args = Array.prototype.slice.call(arguments.length === 1 && Array.isArray(arguments[0]) ? arguments[0] : arguments);
 | 
| +
 | 
| +  return new Promise(function (resolve, reject) {
 | 
| +    if (args.length === 0) return resolve([]);
 | 
| +    var remaining = args.length;
 | 
| +    function res(i, val) {
 | 
| +      try {
 | 
| +        if (val && (typeof val === 'object' || typeof val === 'function')) {
 | 
| +          var then = val.then;
 | 
| +          if (typeof then === 'function') {
 | 
| +            then.call(val, function (val) { res(i, val) }, reject);
 | 
| +            return;
 | 
| +          }
 | 
| +        }
 | 
| +        args[i] = val;
 | 
| +        if (--remaining === 0) {
 | 
| +          resolve(args);
 | 
| +        }
 | 
| +      } catch (ex) {
 | 
| +        reject(ex);
 | 
| +      }
 | 
| +    }
 | 
| +    for (var i = 0; i < args.length; i++) {
 | 
| +      res(i, args[i]);
 | 
| +    }
 | 
| +  });
 | 
| +};
 | 
| +
 | 
| +Promise.race = Promise.race || function(values) {
 | 
| +  // TODO(bradfordcsmith): To be consistent with the ECMAScript spec, this
 | 
| +  //     method should take any iterable, not just an array.
 | 
| +  var forcedArray = /** @type {!Array<!Thenable>} */ (values);
 | 
| +  return new Promise(function (resolve, reject) {
 | 
| +    for(var i = 0, len = forcedArray.length; i < len; i++) {
 | 
| +      forcedArray[i].then(resolve, reject);
 | 
| +    }
 | 
| +  });
 | 
| +};
 | 
| +
 | 
| 
 |