Index: Source/devtools/front_end/platform/Promise.js |
diff --git a/Source/devtools/front_end/platform/Promise.js b/Source/devtools/front_end/platform/Promise.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f854b567a09cf95dd520136a6c8f2a8c19324f01 |
--- /dev/null |
+++ b/Source/devtools/front_end/platform/Promise.js |
@@ -0,0 +1,68 @@ |
+// 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. |
+ |
+/** |
+ * @param {string} error |
+ * @return {!Promise.<T>} |
+ * @template T |
+ */ |
+Promise.rejectWithError = function(error) |
+{ |
+ return Promise.reject(new Error(error)); |
+} |
+ |
+/** |
+ * @param {function((T|undefined))} callback |
+ * @return {!Promise.<T>} |
+ * @template T |
+ */ |
+Promise.prototype.thenOrCatch = function(callback) |
+{ |
+ return this.then(callback, reject.bind(this)); |
+ |
+ /** |
+ * @param {*} e |
+ * @this {Promise} |
+ */ |
+ function reject(e) |
+ { |
+ this._reportError(e); |
+ callback(undefined); |
+ } |
+} |
+ |
+Promise.prototype.done = function() |
+{ |
+ this.catchAndReport(); |
+} |
+ |
+/** |
+ * @return {!Promise} |
+ */ |
+Promise.prototype.catchAndReport = function() |
+{ |
+ return this.catch(this._reportError.bind(this)); |
+} |
+ |
+/** |
+ * @param {*} e |
+ */ |
+Promise.prototype._reportError = function(e) |
+{ |
+ if (e instanceof Error) |
+ console.error(e.stack); |
+ else |
+ console.error(e); |
+} |
+ |
+// FIXME: This performance optimization should be moved to blink so that all developers could enjoy it. |
+// console is retrieved with V8Window.getAttribute method which is slow. Here we copy it to a js variable for faster access. |
+console = console; |
apavlov
2014/10/31 13:26:26
This is not quite related to promises
dgozman
2014/10/31 13:56:06
Moved to utilities.
|
+console.__originalAssert = console.assert; |
+console.assert = function(value, message) |
+{ |
+ if (value) |
+ return; |
+ console.__originalAssert(value, message); |
+} |