Index: chrome/browser/resources/print_preview/cloud_print_interface.js |
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface.js b/chrome/browser/resources/print_preview/cloud_print_interface.js |
index a0c875855bed41dca33f331f69cedb3f74f08c3d..8d9649fa40f159ef1b973d95e83927eb57dbd9fb 100644 |
--- a/chrome/browser/resources/print_preview/cloud_print_interface.js |
+++ b/chrome/browser/resources/print_preview/cloud_print_interface.js |
@@ -36,6 +36,7 @@ cr.define('cloudprint', function() { |
CloudPrintInterface.EventType = { |
ERROR: 'cloudprint.CloudPrintInterface.ERROR', |
PRINTER_DONE: 'cloudprint.CloudPrintInterface.PRINTER_DONE', |
+ PRINTER_FAILED: 'cloudprint.CloudPrintInterface.PRINTER_FAILED', |
SEARCH_DONE: 'cloudprint.CloudPrintInterface.SEARCH_DONE', |
SUBMIT_DONE: 'cloudprint.CloudPrintInterface.SUBMIT_DONE' |
}; |
@@ -80,7 +81,8 @@ cr.define('cloudprint', function() { |
} |
params['connection_status'] = 'ALL'; |
params['client'] = 'chrome'; |
- this.sendRequest_('GET', 'search', params, null, this.onSearchDone_); |
+ this.sendRequest_( |
+ 'GET', 'search', params, null, this.onSearchDone_.bind(this)); |
}, |
/** |
@@ -88,7 +90,8 @@ cr.define('cloudprint', function() { |
* @param {string} body Body of the HTTP post request to send. |
*/ |
submit: function(body) { |
- this.sendRequest_('POST', 'submit', null, body, this.onSubmitDone_); |
+ this.sendRequest_( |
+ 'POST', 'submit', null, body, this.onSubmitDone_.bind(this)); |
}, |
/** |
@@ -97,7 +100,10 @@ cr.define('cloudprint', function() { |
*/ |
printer: function(printerId) { |
var params = {'printerid': printerId}; |
- this.sendRequest_('GET', 'printer', params, null, this.onPrinterDone_); |
+ this.sendRequest_( |
+ 'GET', 'printer', params, null, |
+ this.onPrinterDone_.bind(this), |
+ this.onPrinterFailed_.bind(this, printerId)); |
}, |
/** |
@@ -190,8 +196,11 @@ cr.define('cloudprint', function() { |
* @param {string} body HTTP multi-part encoded body. |
* @param {function(Object)} successCallback Callback to invoke when request |
* completes successfully. |
+ * @param {function(Object)=} opt_failureCallback Callback to call if the |
+ * request failed. |
*/ |
- sendRequest_: function(method, action, params, body, successCallback) { |
+ sendRequest_: function(method, action, params, body, successCallback, |
+ opt_failureCallback) { |
if (!this.xsrfToken_) { |
// TODO(rltoscano): Should throw an error if not a read-only action or |
// issue an xsrf token request. |
@@ -214,7 +223,7 @@ cr.define('cloudprint', function() { |
var xhr = new XMLHttpRequest(); |
xhr.onreadystatechange = this.onReadyStateChange_.bind( |
- this, xhr, successCallback.bind(this)); |
+ this, xhr, successCallback, opt_failureCallback); |
xhr.open(method, url, true); |
xhr.withCredentials = true; |
for (var header in headers) { |
@@ -240,15 +249,19 @@ cr.define('cloudprint', function() { |
* @param {XMLHttpRequest} xhr XML http request that changed. |
* @param {function(Object)} successCallback Callback to call if the request |
* was successful. |
+ * @param {function(Object)=} opt_failureCallback Callback to call if the |
+ * request failed. |
* @private |
*/ |
- onReadyStateChange_: function(xhr, successCallback) { |
+ onReadyStateChange_: function(xhr, successCallback, opt_failureCallback) { |
if (xhr.readyState == 4) { |
if (xhr.status == 200) { |
var result = JSON.parse(xhr.responseText); |
if (result['success']) { |
this.xsrfToken_ = result['xsrf_token']; |
successCallback(result); |
+ } else if (opt_failureCallback) { |
+ opt_failureCallback(result); |
} else { |
this.dispatchErrorEvent_(result['message']); |
} |
@@ -318,6 +331,20 @@ cr.define('cloudprint', function() { |
}, |
/** |
+ * Called when the printer request fails. |
+ * @param {string} ID of the destination that failed to be looked up. |
+ * @param {object} Contains the JSON response. |
+ * @private |
+ */ |
+ onPrinterFailed_: function(destinationId, result) { |
+ var printerFailedEvent = new cr.Event( |
+ CloudPrintInterface.EventType.PRINTER_FAILED); |
+ printerFailedEvent.destinationId = destinationId; |
+ printerFailedEvent.errorCode = result['errorCode']; |
+ this.dispatchEvent(printerFailedEvent); |
+ }, |
+ |
+ /** |
* Called when the update printer TOS acceptance request completes |
* successfully. |
* @param {Object} result JSON response. |