Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Unified Diff: third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js

Issue 674153004: Add third_party/google-input-tools: Take 2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@google_input_tools
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
new file mode 100644
index 0000000000000000000000000000000000000000..dde8ec88cf7eab4129301b9ff7740ccf9d4f3d00
--- /dev/null
+++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/promise/thenable.js
@@ -0,0 +1,111 @@
+// Copyright 2013 The Closure Library Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS-IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+goog.provide('goog.Thenable');
+
+
+
+/**
+ * Provides a more strict interface for Thenables in terms of
+ * http://promisesaplus.com for interop with {@see goog.Promise}.
+ *
+ * @interface
+ * @extends {IThenable.<TYPE>}
+ * @template TYPE
+ */
+goog.Thenable = function() {};
+
+
+/**
+ * Adds callbacks that will operate on the result of the Thenable, returning a
+ * new child Promise.
+ *
+ * If the Thenable is fulfilled, the {@code onFulfilled} callback will be
+ * invoked with the fulfillment value as argument, and the child Promise will
+ * be fulfilled with the return value of the callback. If the callback throws
+ * an exception, the child Promise will be rejected with the thrown value
+ * instead.
+ *
+ * If the Thenable is rejected, the {@code onRejected} callback will be invoked
+ * with the rejection reason as argument, and the child Promise will be rejected
+ * with the return value of the callback or thrown value.
+ *
+ * @param {?(function(this:THIS, TYPE):
+ * (RESULT|IThenable.<RESULT>|Thenable))=} opt_onFulfilled A
+ * function that will be invoked with the fulfillment value if the Promise
+ * is fullfilled.
+ * @param {?(function(this:THIS, *): *)=} opt_onRejected A function that will
+ * be invoked with the rejection reason if the Promise is rejected.
+ * @param {THIS=} opt_context An optional context object that will be the
+ * execution context for the callbacks. By default, functions are executed
+ * with the default this.
+ * @return {!goog.Promise.<RESULT>} A new Promise that will receive the result
+ * of the fulfillment or rejection callback.
+ * @template RESULT,THIS
+ */
+goog.Thenable.prototype.then = function(opt_onFulfilled, opt_onRejected,
+ opt_context) {};
+
+
+/**
+ * An expando property to indicate that an object implements
+ * {@code goog.Thenable}.
+ *
+ * {@see addImplementation}.
+ *
+ * @const
+ */
+goog.Thenable.IMPLEMENTED_BY_PROP = '$goog_Thenable';
+
+
+/**
+ * Marks a given class (constructor) as an implementation of Thenable, so
+ * that we can query that fact at runtime. The class must have already
+ * implemented the interface.
+ * Exports a 'then' method on the constructor prototype, so that the objects
+ * also implement the extern {@see goog.Thenable} interface for interop with
+ * other Promise implementations.
+ * @param {function(new:goog.Thenable,...[?])} ctor The class constructor. The
+ * corresponding class must have already implemented the interface.
+ */
+goog.Thenable.addImplementation = function(ctor) {
+ goog.exportProperty(ctor.prototype, 'then', ctor.prototype.then);
+ if (COMPILED) {
+ ctor.prototype[goog.Thenable.IMPLEMENTED_BY_PROP] = true;
+ } else {
+ // Avoids dictionary access in uncompiled mode.
+ ctor.prototype.$goog_Thenable = true;
+ }
+};
+
+
+/**
+ * @param {*} object
+ * @return {boolean} Whether a given instance implements {@code goog.Thenable}.
+ * The class/superclass of the instance must call {@code addImplementation}.
+ */
+goog.Thenable.isImplementedBy = function(object) {
+ if (!object) {
+ return false;
+ }
+ try {
+ if (COMPILED) {
+ return !!object[goog.Thenable.IMPLEMENTED_BY_PROP];
+ }
+ return !!object.$goog_Thenable;
+ } catch (e) {
+ // Property access seems to be forbidden.
+ return false;
+ }
+};

Powered by Google App Engine
This is Rietveld 408576698