netwerk/test/unit/test_head.js

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

michael@0 1 //
michael@0 2 // HTTP headers test
michael@0 3 //
michael@0 4
michael@0 5 // Note: sets Cc and Ci variables
michael@0 6
michael@0 7 Cu.import("resource://testing-common/httpd.js");
michael@0 8
michael@0 9 XPCOMUtils.defineLazyGetter(this, "URL", function() {
michael@0 10 return "http://localhost:" + httpserver.identity.primaryPort;
michael@0 11 });
michael@0 12
michael@0 13 var httpserver = new HttpServer();
michael@0 14 var testpath = "/simple";
michael@0 15 var httpbody = "0123456789";
michael@0 16 var channel;
michael@0 17 var ios;
michael@0 18
michael@0 19 var dbg=0
michael@0 20 if (dbg) { print("============== START =========="); }
michael@0 21
michael@0 22 function run_test() {
michael@0 23 setup_test();
michael@0 24 do_test_pending();
michael@0 25 }
michael@0 26
michael@0 27 function setup_test() {
michael@0 28 if (dbg) { print("============== setup_test: in"); }
michael@0 29
michael@0 30 httpserver.registerPathHandler(testpath, serverHandler);
michael@0 31 httpserver.start(-1);
michael@0 32
michael@0 33 channel = setupChannel(testpath);
michael@0 34
michael@0 35 channel.setRequestHeader("ReplaceMe", "initial value", true);
michael@0 36 var setOK = channel.getRequestHeader("ReplaceMe");
michael@0 37 do_check_eq(setOK, "initial value");
michael@0 38 channel.setRequestHeader("ReplaceMe", "replaced", false);
michael@0 39 setOK = channel.getRequestHeader("ReplaceMe");
michael@0 40 do_check_eq(setOK, "replaced");
michael@0 41
michael@0 42 channel.setRequestHeader("MergeMe", "foo1", true);
michael@0 43 channel.setRequestHeader("MergeMe", "foo2", true);
michael@0 44 channel.setRequestHeader("MergeMe", "foo3", true);
michael@0 45 setOK = channel.getRequestHeader("MergeMe");
michael@0 46 do_check_eq(setOK, "foo1, foo2, foo3");
michael@0 47
michael@0 48 var uri = ios.newURI("http://foo1.invalid:80", null, null);
michael@0 49 channel.referrer = uri;
michael@0 50 do_check_true(channel.referrer.equals(uri));
michael@0 51 setOK = channel.getRequestHeader("Referer");
michael@0 52 do_check_eq(setOK, "http://foo1.invalid/");
michael@0 53
michael@0 54 uri = ios.newURI("http://foo2.invalid:90/bar", null, null);
michael@0 55 channel.referrer = uri;
michael@0 56 setOK = channel.getRequestHeader("Referer");
michael@0 57 do_check_eq(setOK, "http://foo2.invalid:90/bar");
michael@0 58
michael@0 59 // ChannelListener defined in head_channels.js
michael@0 60 channel.asyncOpen(new ChannelListener(checkRequestResponse, channel), null);
michael@0 61
michael@0 62 if (dbg) { print("============== setup_test: out"); }
michael@0 63 }
michael@0 64
michael@0 65 function setupChannel(path) {
michael@0 66 ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
michael@0 67 var chan = ios.newChannel(URL + path, "", null);
michael@0 68 chan.QueryInterface(Ci.nsIHttpChannel);
michael@0 69 chan.requestMethod = "GET";
michael@0 70 return chan;
michael@0 71 }
michael@0 72
michael@0 73 function serverHandler(metadata, response) {
michael@0 74 if (dbg) { print("============== serverHandler: in"); }
michael@0 75
michael@0 76 var setOK = metadata.getHeader("ReplaceMe");
michael@0 77 do_check_eq(setOK, "replaced");
michael@0 78 setOK = metadata.getHeader("MergeMe");
michael@0 79 do_check_eq(setOK, "foo1, foo2, foo3");
michael@0 80 setOK = metadata.getHeader("Referer");
michael@0 81 do_check_eq(setOK, "http://foo2.invalid:90/bar");
michael@0 82
michael@0 83 response.setHeader("Content-Type", "text/plain", false);
michael@0 84 response.setStatusLine("1.1", 200, "OK");
michael@0 85
michael@0 86 // note: httpd.js' "Response" class uses ',' (no space) for merge.
michael@0 87 response.setHeader("httpdMerge", "bar1", false);
michael@0 88 response.setHeader("httpdMerge", "bar2", true);
michael@0 89 response.setHeader("httpdMerge", "bar3", true);
michael@0 90 // Some special headers like Proxy-Authenticate merge with \n
michael@0 91 response.setHeader("Proxy-Authenticate", "line 1", true);
michael@0 92 response.setHeader("Proxy-Authenticate", "line 2", true);
michael@0 93 response.setHeader("Proxy-Authenticate", "line 3", true);
michael@0 94
michael@0 95 response.bodyOutputStream.write(httpbody, httpbody.length);
michael@0 96
michael@0 97 if (dbg) { print("============== serverHandler: out"); }
michael@0 98 }
michael@0 99
michael@0 100 function checkRequestResponse(request, data, context) {
michael@0 101 if (dbg) { print("============== checkRequestResponse: in"); }
michael@0 102
michael@0 103 do_check_eq(channel.responseStatus, 200);
michael@0 104 do_check_eq(channel.responseStatusText, "OK");
michael@0 105 do_check_true(channel.requestSucceeded);
michael@0 106
michael@0 107 var response = channel.getResponseHeader("httpdMerge");
michael@0 108 do_check_eq(response, "bar1,bar2,bar3");
michael@0 109 channel.setResponseHeader("httpdMerge", "bar", true);
michael@0 110 do_check_eq(channel.getResponseHeader("httpdMerge"), "bar1,bar2,bar3, bar");
michael@0 111
michael@0 112 response = channel.getResponseHeader("Proxy-Authenticate");
michael@0 113 do_check_eq(response, "line 1\nline 2\nline 3");
michael@0 114
michael@0 115 channel.contentCharset = "UTF-8";
michael@0 116 do_check_eq(channel.contentCharset, "UTF-8");
michael@0 117 do_check_eq(channel.contentType, "text/plain");
michael@0 118 do_check_eq(channel.contentLength, httpbody.length);
michael@0 119 do_check_eq(data, httpbody);
michael@0 120
michael@0 121 httpserver.stop(do_test_finished);
michael@0 122 if (dbg) { print("============== checkRequestResponse: out"); }
michael@0 123 }

mercurial