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.
1 /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 const Cc = Components.classes;
8 const Ci = Components.interfaces;
9 const Cr = Components.results;
11 function run_test()
12 {
13 test1();
14 test2();
15 test3();
16 test4();
17 }
19 /**
20 * Checks that getting an input stream from a storage stream which has never had
21 * anything written to it throws a not-initialized exception.
22 */
23 function test1()
24 {
25 var ss = Cc["@mozilla.org/storagestream;1"]
26 .createInstance(Ci.nsIStorageStream);
27 ss.init(1024, 1024, null);
29 var out = ss.getOutputStream(0);
30 var inp2 = ss.newInputStream(0);
31 do_check_eq(inp2.available(), 0);
32 do_check_true(inp2.isNonBlocking());
34 var sis =
35 Cc["@mozilla.org/scriptableinputstream;1"]
36 .createInstance(Ci.nsIScriptableInputStream);
37 sis.init(inp2);
39 var threw = false;
40 try {
41 sis.read(1);
42 } catch (ex if ex.result == Cr.NS_BASE_STREAM_WOULD_BLOCK) {
43 threw = true;
44 }
45 do_check_true(threw);
46 }
48 /**
49 * Checks that getting an input stream from a storage stream to which 0 bytes of
50 * data have been explicitly written doesn't throw an exception.
51 */
52 function test2()
53 {
54 var ss = Cc["@mozilla.org/storagestream;1"]
55 .createInstance(Ci.nsIStorageStream);
56 ss.init(1024, 1024, null);
58 var out = ss.getOutputStream(0);
59 out.write("", 0);
60 try
61 {
62 var inp2 = ss.newInputStream(0);
63 }
64 catch (e)
65 {
66 do_throw("shouldn't throw exception when new input stream created");
67 }
68 }
70 /**
71 * Checks that reading any non-zero amount of data from a storage stream
72 * which has had 0 bytes written to it explicitly works correctly.
73 */
74 function test3()
75 {
76 var ss = Cc["@mozilla.org/storagestream;1"]
77 .createInstance(Ci.nsIStorageStream);
78 ss.init(1024, 1024, null);
80 var out = ss.getOutputStream(0);
81 out.write("", 0);
82 try
83 {
84 var inp = ss.newInputStream(0);
85 }
86 catch (e)
87 {
88 do_throw("newInputStream(0) shouldn't throw if write() is called: " + e);
89 }
91 do_check_true(inp.isNonBlocking(), "next test expects a non-blocking stream");
93 try
94 {
95 var threw = false;
96 var bis = BIS(inp);
97 var dummy = bis.readByteArray(5);
98 }
99 catch (e)
100 {
101 if (e.result != Cr.NS_BASE_STREAM_WOULD_BLOCK)
102 do_throw("wrong error thrown: " + e);
103 threw = true;
104 }
105 do_check_true(threw,
106 "should have thrown (nsStorageInputStream is nonblocking)");
107 }
109 /**
110 * Basic functionality test for storagestream: write data to it, get an input
111 * stream, and read the data back to see that it matches.
112 */
113 function test4()
114 {
115 var bytes = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74];
117 var ss = Cc["@mozilla.org/storagestream;1"]
118 .createInstance(Ci.nsIStorageStream);
119 ss.init(1024, 1024, null);
121 var outStream = ss.getOutputStream(0);
123 var bos = Cc["@mozilla.org/binaryoutputstream;1"]
124 .createInstance(Ci.nsIBinaryOutputStream);
125 bos.setOutputStream(outStream);
127 bos.writeByteArray(bytes, bytes.length);
128 bos.close();
130 var inp = ss.newInputStream(0);
131 var bis = BIS(inp);
133 var count = 0;
134 while (count < bytes.length)
135 {
136 var data = bis.read8(1);
137 do_check_eq(data, bytes[count++]);
138 }
140 var threw = false;
141 try
142 {
143 data = bis.read8(1);
144 }
145 catch (e)
146 {
147 if (e.result != Cr.NS_ERROR_FAILURE)
148 do_throw("wrong error thrown: " + e);
149 threw = true;
150 }
151 if (!threw)
152 do_throw("should have thrown but instead returned: '" + data + "'");
153 }
156 function BIS(input)
157 {
158 var bis = Cc["@mozilla.org/binaryinputstream;1"]
159 .createInstance(Ci.nsIBinaryInputStream);
160 bis.setInputStream(input);
161 return bis;
162 }