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

Unified Diff: remoting/webapp/crd/js/xhr.js

Issue 1055313002: Added mock_xhr module w/ unit tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: for submit Created 5 years, 8 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
« no previous file with comments | « remoting/webapp/crd/js/mock_xhr_unittest.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/crd/js/xhr.js
diff --git a/remoting/webapp/crd/js/xhr.js b/remoting/webapp/crd/js/xhr.js
index 4b3603e7b5e913693f9642f53f5a95e8fee005f5..1366a9964029c3e23fcb3abeca3c625e4bdf3521 100644
--- a/remoting/webapp/crd/js/xhr.js
+++ b/remoting/webapp/crd/js/xhr.js
@@ -5,6 +5,8 @@
/**
* @fileoverview
* Utility class for making XHRs more pleasant.
+ *
+ * Note: a mock version of this API exists in mock_xhr.js.
*/
'use strict';
@@ -26,7 +28,7 @@ remoting.Xhr = function(params) {
parameterString = params.urlParams;
} else if (typeof(params.urlParams) === 'object') {
parameterString = remoting.Xhr.urlencodeParamHash(
- remoting.Xhr.removeNullFields_(params.urlParams));
+ base.copyWithoutNullFields(params.urlParams));
}
if (parameterString) {
url += '?' + parameterString;
@@ -34,7 +36,7 @@ remoting.Xhr = function(params) {
// Prepare the build modified headers.
/** @const */
- this.headers_ = remoting.Xhr.removeNullFields_(params.headers);
+ this.headers_ = base.copyWithoutNullFields(params.headers);
// Convert the content fields to a single text content variable.
/** @private {?string} */
@@ -160,6 +162,7 @@ remoting.Xhr.prototype.start = function() {
/**
* @param {remoting.Xhr.Params} params
* @throws {Error} if params are invalid
+ * @private
*/
remoting.Xhr.checkParams_ = function(params) {
if (params.urlParams) {
@@ -234,7 +237,8 @@ remoting.Xhr.prototype.maybeSetHeader_ = function(key, value) {
/** @private */
remoting.Xhr.prototype.sendXhr_ = function() {
for (var key in this.headers_) {
- this.nativeXhr_.setRequestHeader(key, this.headers_[key]);
+ this.nativeXhr_.setRequestHeader(
+ key, /** @type {string} */ (this.headers_[key]));
}
this.nativeXhr_.send(this.content_);
this.content_ = null; // for gc
@@ -247,7 +251,7 @@ remoting.Xhr.prototype.onReadyStateChange_ = function() {
var xhr = this.nativeXhr_;
if (xhr.readyState == 4) {
// See comments at remoting.Xhr.Response.
- this.deferred_.resolve(new remoting.Xhr.Response(
+ this.deferred_.resolve(remoting.Xhr.Response.fromXhr_(
xhr, this.acceptJson_));
}
};
@@ -261,39 +265,57 @@ remoting.Xhr.prototype.onReadyStateChange_ = function() {
* API.
*
* @constructor
- * @param {!XMLHttpRequest} xhr
+ * @param {number} status
+ * @param {string} statusText
+ * @param {?string} url
+ * @param {string} text
* @param {boolean} allowJson
*/
-remoting.Xhr.Response = function(xhr, allowJson) {
- /** @private @const */
- this.allowJson_ = allowJson;
-
+remoting.Xhr.Response = function(
+ status, statusText, url, text, allowJson) {
/**
* The HTTP status code.
* @const {number}
*/
- this.status = xhr.status;
+ this.status = status;
/**
* The HTTP status description.
* @const {string}
*/
- this.statusText = xhr.statusText;
+ this.statusText = statusText;
/**
* The response URL, if any.
* @const {?string}
*/
- this.url = xhr.responseURL;
+ this.url = url;
/** @private {string} */
- this.text_ = xhr.responseText || '';
+ this.text_ = text;
+
+ /** @private @const */
+ this.allowJson_ = allowJson;
/** @private {*|undefined} */
this.json_ = undefined;
};
/**
+ * @param {!XMLHttpRequest} xhr
+ * @param {boolean} allowJson
+ * @return {!remoting.Xhr.Response}
+ */
+remoting.Xhr.Response.fromXhr_ = function(xhr, allowJson) {
+ return new remoting.Xhr.Response(
+ xhr.status,
+ xhr.statusText,
+ xhr.responseURL,
+ xhr.responseText || '',
+ allowJson);
+};
+
+/**
* @return {boolean} True if the response code is outside the 200-299
* range (i.e. success as defined by the HTTP protocol).
*/
@@ -322,28 +344,6 @@ remoting.Xhr.Response.prototype.getJson = function() {
};
/**
- * Returns a copy of the input object with all null or undefined
- * fields removed.
- *
- * @param {Object<string,?string>|undefined} input
- * @return {!Object<string,string>}
- * @private
- */
-remoting.Xhr.removeNullFields_ = function(input) {
- /** @type {!Object<string,string>} */
- var result = {};
- if (input) {
- for (var field in input) {
- var value = input[field];
- if (value != null) {
- result[field] = value;
- }
- }
- }
- return result;
-};
-
-/**
* Takes an associative array of parameters and urlencodes it.
*
* @param {Object<string,string>} paramHash The parameter key/value pairs.
@@ -352,8 +352,11 @@ remoting.Xhr.removeNullFields_ = function(input) {
remoting.Xhr.urlencodeParamHash = function(paramHash) {
var paramArray = [];
for (var key in paramHash) {
- paramArray.push(encodeURIComponent(key) +
- '=' + encodeURIComponent(paramHash[key]));
+ var value = paramHash[key];
+ if (value != null) {
+ paramArray.push(encodeURIComponent(key) +
+ '=' + encodeURIComponent(value));
+ }
}
if (paramArray.length > 0) {
return paramArray.join('&');
« no previous file with comments | « remoting/webapp/crd/js/mock_xhr_unittest.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698