widget/tests/test_bug466599.xul

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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 += {'<':'&lt;', '>':'&gt;', '&':'&amp;', '"':'&quot;'}[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>

mercurial