1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/test/dynamic_redirect.sjs Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,54 @@ 1.4 +function parseQuery(request, key) { 1.5 + var params = request.queryString.split('&'); 1.6 + for (var j = 0; j < params.length; ++j) { 1.7 + var p = params[j]; 1.8 + if (p == key) 1.9 + return true; 1.10 + if (p.indexOf(key + "=") == 0) 1.11 + return p.substring(key.length + 1); 1.12 + if (p.indexOf("=") < 0 && key == "") 1.13 + return p; 1.14 + } 1.15 + return false; 1.16 +} 1.17 + 1.18 +// Return seek.ogv file content for the first request with a given key. 1.19 +// All subsequent requests return a redirect to a different-origin resource. 1.20 +function handleRequest(request, response) 1.21 +{ 1.22 + var key = parseQuery(request, "key"); 1.23 + var resource = parseQuery(request, "res"); 1.24 + 1.25 + if (getState(key) == "redirect") { 1.26 + var origin = request.host == "mochi.test" ? "example.org" : "mochi.test:8888"; 1.27 + response.setStatusLine(request.httpVersion, 303, "See Other"); 1.28 + response.setHeader("Location", "http://" + origin + "/tests/content/media/test/" + resource); 1.29 + response.setHeader("Content-Type", "text/html"); 1.30 + return; 1.31 + } 1.32 + 1.33 + setState(key, "redirect"); 1.34 + 1.35 + var file = Components.classes["@mozilla.org/file/directory_service;1"]. 1.36 + getService(Components.interfaces.nsIProperties). 1.37 + get("CurWorkD", Components.interfaces.nsILocalFile); 1.38 + var fis = Components.classes['@mozilla.org/network/file-input-stream;1']. 1.39 + createInstance(Components.interfaces.nsIFileInputStream); 1.40 + var bis = Components.classes["@mozilla.org/binaryinputstream;1"]. 1.41 + createInstance(Components.interfaces.nsIBinaryInputStream); 1.42 + var paths = "tests/content/media/test/" + resource; 1.43 + var split = paths.split("/"); 1.44 + for(var i = 0; i < split.length; ++i) { 1.45 + file.append(split[i]); 1.46 + } 1.47 + fis.init(file, -1, -1, false); 1.48 + dump("file=" + file + "\n"); 1.49 + bis.setInputStream(fis); 1.50 + var bytes = bis.readBytes(bis.available()); 1.51 + response.setStatusLine(request.httpVersion, 206, "Partial Content"); 1.52 + response.setHeader("Content-Range", "bytes 0-" + (bytes.length - 1) + "/" + bytes.length); 1.53 + response.setHeader("Content-Length", ""+bytes.length, false); 1.54 + response.setHeader("Content-Type", "video/ogg", false); 1.55 + response.write(bytes, bytes.length); 1.56 + bis.close(); 1.57 +}