|
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"/> |
|
12 |
|
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> |
|
19 |
|
20 <!-- test code goes here --> |
|
21 <script class="testbody" type="application/javascript"> |
|
22 <![CDATA[ |
|
23 |
|
24 /** Test for Bug 466599 **/ |
|
25 |
|
26 function getLoadContext() { |
|
27 const Ci = Components.interfaces; |
|
28 return window.QueryInterface(Ci.nsIInterfaceRequestor) |
|
29 .getInterface(Ci.nsIWebNavigation) |
|
30 .QueryInterface(Ci.nsILoadContext); |
|
31 } |
|
32 |
|
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 } |
|
56 |
|
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 } |
|
80 |
|
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 } |
|
90 |
|
91 function initAndRunTests() |
|
92 { |
|
93 var source = '<p>Lorem ipsum</p>'; |
|
94 var expect = new RegExp('<html>.*charset=utf-8.*' + source + '.*</html>', 'im'); |
|
95 |
|
96 var result = copyToClipboard(source); |
|
97 ok(result, "copied HTML data to system pasteboard"); |
|
98 |
|
99 result = readFromClipboard(); |
|
100 ok(expect.test(result), "data on system pasteboard is wrapped with charset metadata"); |
|
101 |
|
102 $("display").innerHTML = |
|
103 '<em>source:</em> <pre>' + encodeHtmlEntities(source) + '</pre><br/>' + |
|
104 '<em>result:</em> <pre>' + encodeHtmlEntities(result) + '</pre>'; |
|
105 } |
|
106 |
|
107 ]]> |
|
108 </script> |
|
109 </window> |