1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/datastore/tests/file_app.sjs Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,56 @@ 1.4 +var gBasePath = "tests/dom/datastore/tests/"; 1.5 + 1.6 +function handleRequest(request, response) { 1.7 + var query = getQuery(request); 1.8 + 1.9 + var testToken = ''; 1.10 + if ('testToken' in query) { 1.11 + testToken = query.testToken; 1.12 + } 1.13 + 1.14 + var template = 'file_app.template.webapp'; 1.15 + if ('template' in query) { 1.16 + template = query.template; 1.17 + } 1.18 + var template = gBasePath + template; 1.19 + response.setHeader("Content-Type", "application/x-web-app-manifest+json", false); 1.20 + response.write(readTemplate(template).replace(/TESTTOKEN/g, testToken)); 1.21 +} 1.22 + 1.23 +// Copy-pasted incantations. There ought to be a better way to synchronously read 1.24 +// a file into a string, but I guess we're trying to discourage that. 1.25 +function readTemplate(path) { 1.26 + var file = Components.classes["@mozilla.org/file/directory_service;1"]. 1.27 + getService(Components.interfaces.nsIProperties). 1.28 + get("CurWorkD", Components.interfaces.nsILocalFile); 1.29 + var fis = Components.classes['@mozilla.org/network/file-input-stream;1']. 1.30 + createInstance(Components.interfaces.nsIFileInputStream); 1.31 + var cis = Components.classes["@mozilla.org/intl/converter-input-stream;1"]. 1.32 + createInstance(Components.interfaces.nsIConverterInputStream); 1.33 + var split = path.split("/"); 1.34 + for(var i = 0; i < split.length; ++i) { 1.35 + file.append(split[i]); 1.36 + } 1.37 + fis.init(file, -1, -1, false); 1.38 + cis.init(fis, "UTF-8", 0, 0); 1.39 + 1.40 + var data = ""; 1.41 + let (str = {}) { 1.42 + let read = 0; 1.43 + do { 1.44 + read = cis.readString(0xffffffff, str); // read as much as we can and put it in str.value 1.45 + data += str.value; 1.46 + } while (read != 0); 1.47 + } 1.48 + cis.close(); 1.49 + return data; 1.50 +} 1.51 + 1.52 +function getQuery(request) { 1.53 + var query = {}; 1.54 + request.queryString.split('&').forEach(function (val) { 1.55 + var [name, value] = val.split('='); 1.56 + query[name] = unescape(value); 1.57 + }); 1.58 + return query; 1.59 +}