Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
2 var cu = Components.utils;
3 cu.import("resource://testing-common/httpd.js");
5 var httpserver = new HttpServer();
6 var httpserver2 = new HttpServer();
7 var testpath = "/simple";
8 var negativetestpath = "/negative";
9 var httpbody = "<?xml version='1.0' ?><root>0123456789</root>";
11 var sb = cu.Sandbox(["http://www.example.com",
12 "http://localhost:4444/simple"],
13 { wantGlobalProperties: ["XMLHttpRequest"] });
15 function createXHR(loc, async)
16 {
17 var xhr = new XMLHttpRequest();
18 xhr.open("GET", "http://localhost:" + loc, async);
19 return xhr;
20 }
22 function checkResults(xhr)
23 {
24 if (xhr.readyState != 4)
25 return false;
27 do_check_eq(xhr.status, 200);
28 do_check_eq(xhr.responseText, httpbody);
30 var root_node = xhr.responseXML.getElementsByTagName('root').item(0);
31 do_check_eq(root_node.firstChild.data, "0123456789");
32 return true;
33 }
35 var httpServersClosed = 0;
36 function finishIfDone()
37 {
38 if (++httpServersClosed == 2)
39 do_test_finished();
40 }
42 function run_test()
43 {
44 do_test_pending();
46 httpserver.registerPathHandler(testpath, serverHandler);
47 httpserver.start(4444);
49 httpserver2.registerPathHandler(negativetestpath, serverHandler);
50 httpserver2.start(4445);
52 // Test sync XHR sending
53 cu.evalInSandbox('var createXHR = ' + createXHR.toString(), sb);
54 var res = cu.evalInSandbox('var sync = createXHR("4444/simple"); sync.send(null); sync', sb);
55 do_check_true(checkResults(res));
57 // negative test sync XHR sending (to ensure that the xhr do not have chrome caps, see bug 779821)
58 try {
59 cu.evalInSandbox('var createXHR = ' + createXHR.toString(), sb);
60 var res = cu.evalInSandbox('var sync = createXHR("4445/negative"); sync.send(null); sync', sb);
61 do_check_false(true, "XHR created from sandbox should not have chrome caps");
62 } catch (e) {
63 do_check_true(true);
64 }
66 httpserver2.stop(finishIfDone);
68 // Test async XHR sending
69 sb.finish = function(){
70 httpserver.stop(finishIfDone);
71 }
73 // We want to execute checkResults from the scope of the sandbox as well to
74 // make sure that there are no permission errors related to nsEP. For that
75 // we need to clone the function into the sandbox and make a few things
76 // available for it.
77 cu.evalInSandbox('var checkResults = ' + checkResults.toSource(), sb);
78 sb.do_check_eq = do_check_eq;
79 sb.httpbody = httpbody;
81 function changeListener(event) {
82 if (checkResults(async))
83 finish();
84 }
86 var async = cu.evalInSandbox('var async = createXHR("4444/simple", true);' +
87 'async.addEventListener("readystatechange", ' +
88 changeListener.toString() + ', false);' +
89 'async', sb);
90 async.send(null);
91 }
93 function serverHandler(metadata, response)
94 {
95 response.setHeader("Content-Type", "text/xml", false);
96 response.bodyOutputStream.write(httpbody, httpbody.length);
97 }