/**
* Copyright© 2016, Oracle and/or its affiliates. All rights reserved.
*/
/**
* Platform class for browser applications. Derives from [Platform]{@link Platform}.
* @constructor
* @global
*/
function BrowserPlatform(manager, logger, utils) {
// init dependency injection parameters
manager = manager || mcs.mobileBackendManager;
utils = utils || mcs._utils;
logger = logger || mcs._logger;
var queryRegex = (/\?/);
// call parent constructor
Platform.call(this, logger, utils);
this.isBrowser = true;
this.isCordova = false;
this.invokeService = function (request) {
var url = request.url;
if(this.isBrowser){
url = url + (queryRegex.test(url) ? "&" : "?" ) + "_=" + new Date().getTime();
}
return new Promise(invoke);
function invoke(resolve, reject){
var xhr = new XMLHttpRequest();
xhr.open(request.method, url);
for (var key in request.headers) {
if (request.headers.hasOwnProperty(key)) {
xhr.setRequestHeader(key, request.headers[key]);
}
}
xhr.withCredentials = true;
xhr.responseType = request.responseType || 'json';
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
var response = xhr.responseType === '' || xhr.responseType === 'text' ? xhr.responseText : xhr.response;
var headers = xhr.responseHeaders ? utils.normalizeHeaderKeys(xhr.responseHeaders) : utils.parseHeaders(xhr.getAllResponseHeaders());
var netResponse = new NetworkResponse(xhr.status, response, headers);
// log response
if(manager._config.logHTTP){
var object = {
headers: headers,
body: response
};
logger.verbose('Received ' + request.method + ' response from ' + request.url, object);
}
if (xhr.status >= 200 && xhr.status <= 299) {
resolve(netResponse);
}
else {
reject(netResponse);
}
}
};
xhr.send(request.data);
// log request
if(manager._config.logHTTP){
var object = {
headers: request.headers,
body: request.body
};
logger.verbose('Sent ' + request.method + ' request to ' + request.url, object);
}
}
};
}
BrowserPlatform.prototype = Object.create(Platform.prototype);
BrowserPlatform.prototype.constructor = BrowserPlatform;