michael@0: var gBasePath = "tests/dom/datastore/tests/"; michael@0: michael@0: function handleRequest(request, response) { michael@0: var query = getQuery(request); michael@0: michael@0: var testToken = ''; michael@0: if ('testToken' in query) { michael@0: testToken = query.testToken; michael@0: } michael@0: michael@0: var template = 'file_app.template.webapp'; michael@0: if ('template' in query) { michael@0: template = query.template; michael@0: } michael@0: var template = gBasePath + template; michael@0: response.setHeader("Content-Type", "application/x-web-app-manifest+json", false); michael@0: response.write(readTemplate(template).replace(/TESTTOKEN/g, testToken)); michael@0: } michael@0: michael@0: // Copy-pasted incantations. There ought to be a better way to synchronously read michael@0: // a file into a string, but I guess we're trying to discourage that. michael@0: function readTemplate(path) { michael@0: var file = Components.classes["@mozilla.org/file/directory_service;1"]. michael@0: getService(Components.interfaces.nsIProperties). michael@0: get("CurWorkD", Components.interfaces.nsILocalFile); michael@0: var fis = Components.classes['@mozilla.org/network/file-input-stream;1']. michael@0: createInstance(Components.interfaces.nsIFileInputStream); michael@0: var cis = Components.classes["@mozilla.org/intl/converter-input-stream;1"]. michael@0: createInstance(Components.interfaces.nsIConverterInputStream); michael@0: var split = path.split("/"); michael@0: for(var i = 0; i < split.length; ++i) { michael@0: file.append(split[i]); michael@0: } michael@0: fis.init(file, -1, -1, false); michael@0: cis.init(fis, "UTF-8", 0, 0); michael@0: michael@0: var data = ""; michael@0: let (str = {}) { michael@0: let read = 0; michael@0: do { michael@0: read = cis.readString(0xffffffff, str); // read as much as we can and put it in str.value michael@0: data += str.value; michael@0: } while (read != 0); michael@0: } michael@0: cis.close(); michael@0: return data; michael@0: } michael@0: michael@0: function getQuery(request) { michael@0: var query = {}; michael@0: request.queryString.split('&').forEach(function (val) { michael@0: var [name, value] = val.split('='); michael@0: query[name] = unescape(value); michael@0: }); michael@0: return query; michael@0: }