dom/datastore/tests/file_app.sjs

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 var gBasePath = "tests/dom/datastore/tests/";
     3 function handleRequest(request, response) {
     4   var query = getQuery(request);
     6   var testToken = '';
     7   if ('testToken' in query) {
     8     testToken = query.testToken;
     9   }
    11   var template = 'file_app.template.webapp';
    12   if ('template' in query) {
    13     template = query.template;
    14   }
    15   var template = gBasePath + template;
    16   response.setHeader("Content-Type", "application/x-web-app-manifest+json", false);
    17   response.write(readTemplate(template).replace(/TESTTOKEN/g, testToken));
    18 }
    20 // Copy-pasted incantations. There ought to be a better way to synchronously read
    21 // a file into a string, but I guess we're trying to discourage that.
    22 function readTemplate(path) {
    23   var file = Components.classes["@mozilla.org/file/directory_service;1"].
    24                         getService(Components.interfaces.nsIProperties).
    25                         get("CurWorkD", Components.interfaces.nsILocalFile);
    26   var fis  = Components.classes['@mozilla.org/network/file-input-stream;1'].
    27                         createInstance(Components.interfaces.nsIFileInputStream);
    28   var cis = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
    29                        createInstance(Components.interfaces.nsIConverterInputStream);
    30   var split = path.split("/");
    31   for(var i = 0; i < split.length; ++i) {
    32     file.append(split[i]);
    33   }
    34   fis.init(file, -1, -1, false);
    35   cis.init(fis, "UTF-8", 0, 0);
    37   var data = "";
    38   let (str = {}) {
    39     let read = 0;
    40     do {
    41       read = cis.readString(0xffffffff, str); // read as much as we can and put it in str.value
    42       data += str.value;
    43     } while (read != 0);
    44   }
    45   cis.close();
    46   return data;
    47 }
    49 function getQuery(request) {
    50   var query = {};
    51   request.queryString.split('&').forEach(function (val) {
    52     var [name, value] = val.split('=');
    53     query[name] = unescape(value);
    54   });
    55   return query;
    56 }

mercurial