Thu, 15 Jan 2015 15:59:08 +0100
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.
1 <?xml version="1.0"?>
2 <?xml-stylesheet type="text/css" href="chrome://global/skin"?>
3 <?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
4 <!--
5 https://bugzilla.mozilla.org/show_bug.cgi?id=466599
6 -->
7 <window title="Mozilla Bug 466599"
8 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
9 onload="initAndRunTests()">
10 <script type="application/javascript"
11 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
13 <!-- test results are displayed in the html:body -->
14 <body xmlns="http://www.w3.org/1999/xhtml">
15 <p id="display"></p>
16 <div id="content" style="display: none"></div>
17 <pre id="test"></pre>
18 </body>
20 <!-- test code goes here -->
21 <script class="testbody" type="application/javascript">
22 <![CDATA[
24 /** Test for Bug 466599 **/
26 function getLoadContext() {
27 const Ci = Components.interfaces;
28 return window.QueryInterface(Ci.nsIInterfaceRequestor)
29 .getInterface(Ci.nsIWebNavigation)
30 .QueryInterface(Ci.nsILoadContext);
31 }
33 function copyToClipboard(txt)
34 {
35 var clipid = Components.interfaces.nsIClipboard;
36 var clip =
37 Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid);
38 if (!clip)
39 return false;
40 var trans =
41 Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
42 if (!trans)
43 return false;
44 trans.init(getLoadContext());
45 trans.addDataFlavor('text/html');
46 var str =
47 Components.classes['@mozilla.org/supports-string;1'].createInstance(Components.interfaces.nsISupportsString);
48 var copytext = txt;
49 str.data = copytext;
50 trans.setTransferData("text/html",str,copytext.length*2);
51 if (!clip)
52 return false;
53 clip.setData(trans,null,clipid.kGlobalClipboard);
54 return true;
55 }
57 function readFromClipboard()
58 {
59 var clipid = Components.interfaces.nsIClipboard;
60 var clip =
61 Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid);
62 if (!clip)
63 return;
64 var trans =
65 Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
66 if (!trans)
67 return;
68 trans.init(getLoadContext());
69 trans.addDataFlavor('text/html');
70 clip.getData(trans,clipid.kGlobalClipboard);
71 var str = new Object();
72 var strLength = new Object();
73 trans.getTransferData("text/html",str,strLength);
74 if (str)
75 str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
76 if (str)
77 pastetext = str.data.substring(0,strLength.value / 2);
78 return pastetext;
79 }
81 function encodeHtmlEntities(s)
82 {
83 var result = '';
84 for (var i = 0; i < s.length; i++) {
85 var c = s.charAt(i);
86 result += {'<':'<', '>':'>', '&':'&', '"':'"'}[c] || c;
87 }
88 return result;
89 }
91 function initAndRunTests()
92 {
93 var source = '<p>Lorem ipsum</p>';
94 var expect = new RegExp('<html>.*charset=utf-8.*' + source + '.*</html>', 'im');
96 var result = copyToClipboard(source);
97 ok(result, "copied HTML data to system pasteboard");
99 result = readFromClipboard();
100 ok(expect.test(result), "data on system pasteboard is wrapped with charset metadata");
102 $("display").innerHTML =
103 '<em>source:</em> <pre>' + encodeHtmlEntities(source) + '</pre><br/>' +
104 '<em>result:</em> <pre>' + encodeHtmlEntities(result) + '</pre>';
105 }
107 ]]>
108 </script>
109 </window>