Index: remoting/webapp/crd/js/error.js |
diff --git a/remoting/webapp/crd/js/error.js b/remoting/webapp/crd/js/error.js |
index c1da1dc6298be5a583a5dbca3892196e5b342a08..6969beadeb0106bbec140ce70afdcb92e65823f8 100644 |
--- a/remoting/webapp/crd/js/error.js |
+++ b/remoting/webapp/crd/js/error.js |
@@ -14,22 +14,71 @@ var remoting = remoting || {}; |
* |
* @constructor |
* @param {remoting.Error.Tag} tag |
- * @param {string=} opt_message |
+ * @param {string=} opt_detail |
*/ |
-remoting.Error = function(tag, opt_message) { |
- /** @const {remoting.Error.Tag} */ |
- this.tag = tag; |
+remoting.Error = function(tag, opt_detail) { |
+ /** @private @const {remoting.Error.Tag} */ |
+ this.tag_ = tag; |
/** @const {?string} */ |
- this.message = opt_message || null; |
+ this.detail_ = opt_detail || null; |
}; |
/** |
- * @return {boolean} True if this object represents an error |
- * condition. |
+ * @override |
*/ |
-remoting.Error.prototype.isError = function() { |
- return this.tag != remoting.Error.Tag.NONE; |
+remoting.Error.prototype.toString = function() { |
+ var result = this.tag_; |
+ if (this.detail_ != null) { |
+ result += ' (' + this.detail_ + ')'; |
+ } |
+ return result; |
+}; |
+ |
+/** |
+ * @return {remoting.Error.Tag} The tag used to create this Error. |
+ */ |
+remoting.Error.prototype.getTag = function() { |
+ return this.tag_; |
+}; |
+ |
+/** |
+ * Checks the type of an error. |
+ * @param {remoting.Error.Tag} tag |
+ * @param {...remoting.Error.Tag} var_args |
+ * @return {boolean} True if this object has one of the specified tags. |
+ */ |
+remoting.Error.prototype.hasTag = function(tag, var_args) { |
+ var thisTag = this.tag_; |
+ return Array.prototype.some.call( |
+ arguments, |
+ function(/** remoting.Error.Tag */ tag) { |
+ return thisTag == tag; |
+ }); |
+}; |
+ |
+/** |
+ * @return {boolean} True if this object's tag is NONE, meaning this |
+ * object represents the lack of an error. |
+ */ |
+remoting.Error.prototype.isNone = function() { |
+ return this.hasTag(remoting.Error.Tag.NONE); |
+}; |
+ |
+/** |
+ * Convenience method for creating the second most common error type. |
+ * @return {!remoting.Error} |
+ */ |
+remoting.Error.none = function() { |
+ return new remoting.Error(remoting.Error.Tag.NONE); |
+}; |
+ |
+/** |
+ * Convenience method for creating the most common error type. |
+ * @return {!remoting.Error} |
+ */ |
+remoting.Error.unexpected = function() { |
+ return new remoting.Error(remoting.Error.Tag.UNEXPECTED); |
}; |
/** |
@@ -70,81 +119,6 @@ remoting.Error.Tag = { |
// Please don't add any more constants here; just call the |
// remoting.Error constructor directly |
-/** @const */ |
-remoting.Error.NONE = new remoting.Error(remoting.Error.Tag.NONE); |
- |
-/** @const */ |
-remoting.Error.CANCELLED = |
- new remoting.Error(remoting.Error.Tag.CANCELLED); |
- |
-/** @const */ |
-remoting.Error.INVALID_ACCESS_CODE = |
- new remoting.Error(remoting.Error.Tag.INVALID_ACCESS_CODE); |
- |
-/** @const */ |
-remoting.Error.MISSING_PLUGIN = |
- new remoting.Error(remoting.Error.Tag.MISSING_PLUGIN); |
- |
-/** @const */ |
-remoting.Error.AUTHENTICATION_FAILED = |
- new remoting.Error(remoting.Error.Tag.AUTHENTICATION_FAILED); |
- |
-/** @const */ |
-remoting.Error.HOST_IS_OFFLINE = |
- new remoting.Error(remoting.Error.Tag.HOST_IS_OFFLINE); |
- |
-/** @const */ |
-remoting.Error.INCOMPATIBLE_PROTOCOL = |
- new remoting.Error(remoting.Error.Tag.INCOMPATIBLE_PROTOCOL); |
- |
-/** @const */ |
-remoting.Error.BAD_PLUGIN_VERSION = |
- new remoting.Error(remoting.Error.Tag.BAD_PLUGIN_VERSION); |
- |
-/** @const */ |
-remoting.Error.NETWORK_FAILURE = |
- new remoting.Error(remoting.Error.Tag.NETWORK_FAILURE); |
- |
-/** @const */ |
-remoting.Error.HOST_OVERLOAD = |
- new remoting.Error(remoting.Error.Tag.HOST_OVERLOAD); |
- |
-/** @const */ |
-remoting.Error.UNEXPECTED = |
- new remoting.Error(remoting.Error.Tag.UNEXPECTED); |
- |
-/** @const */ |
-remoting.Error.SERVICE_UNAVAILABLE = |
- new remoting.Error(remoting.Error.Tag.SERVICE_UNAVAILABLE); |
- |
-/** @const */ |
-remoting.Error.NOT_AUTHENTICATED = |
- new remoting.Error(remoting.Error.Tag.NOT_AUTHENTICATED); |
- |
-/** @const */ |
-remoting.Error.NOT_FOUND = |
- new remoting.Error(remoting.Error.Tag.NOT_FOUND); |
- |
-/** @const */ |
-remoting.Error.INVALID_HOST_DOMAIN = |
- new remoting.Error(remoting.Error.Tag.INVALID_HOST_DOMAIN); |
- |
-/** @const */ |
-remoting.Error.P2P_FAILURE = |
- new remoting.Error(remoting.Error.Tag.P2P_FAILURE); |
- |
-/** @const */ |
-remoting.Error.REGISTRATION_FAILED = |
- new remoting.Error(remoting.Error.Tag.REGISTRATION_FAILED); |
- |
-/** @const */ |
-remoting.Error.NOT_AUTHORIZED = |
- new remoting.Error(remoting.Error.Tag.NOT_AUTHORIZED); |
- |
-/** @const */ |
-remoting.Error.APP_NOT_AUTHORIZED = |
- new remoting.Error(remoting.Error.Tag.APP_NOT_AUTHORIZED); |
- |
/** |
* @param {number} httpStatus An HTTP status code. |
* @return {!remoting.Error} The remoting.Error enum corresponding to the |
@@ -152,20 +126,20 @@ remoting.Error.APP_NOT_AUTHORIZED = |
*/ |
remoting.Error.fromHttpStatus = function(httpStatus) { |
if (httpStatus == 0) { |
- return remoting.Error.NETWORK_FAILURE; |
+ return new remoting.Error(remoting.Error.Tag.NETWORK_FAILURE); |
} else if (httpStatus >= 200 && httpStatus < 300) { |
- return remoting.Error.NONE; |
+ return remoting.Error.none(); |
} else if (httpStatus == 400 || httpStatus == 401) { |
- return remoting.Error.AUTHENTICATION_FAILED; |
+ return new remoting.Error(remoting.Error.Tag.AUTHENTICATION_FAILED); |
} else if (httpStatus == 403) { |
- return remoting.Error.NOT_AUTHORIZED; |
+ return new remoting.Error(remoting.Error.Tag.NOT_AUTHORIZED); |
} else if (httpStatus == 404) { |
- return remoting.Error.NOT_FOUND; |
+ return new remoting.Error(remoting.Error.Tag.NOT_FOUND); |
} else if (httpStatus >= 500 && httpStatus < 600) { |
- return remoting.Error.SERVICE_UNAVAILABLE; |
+ return new remoting.Error(remoting.Error.Tag.SERVICE_UNAVAILABLE); |
} else { |
console.warn('Unexpected HTTP error code: ' + httpStatus); |
- return remoting.Error.UNEXPECTED; |
+ return remoting.Error.unexpected(); |
} |
}; |
@@ -181,8 +155,8 @@ remoting.Error.handler = function(onError) { |
if (error instanceof remoting.Error) { |
onError(/** @type {!remoting.Error} */ (error)); |
} else { |
- console.error('Unexpected error: %o', error); |
- onError(remoting.Error.UNEXPECTED); |
+ console.error('Unexpected error:', error); |
+ onError(remoting.Error.unexpected()); |
} |
}; |
}; |