dom/datastore/tests/file_app.sjs

changeset 0
6474c204b198
     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 +}

mercurial