DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (920bcf17a9e1)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=466599
-->
<window title="Mozilla Bug 466599"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        onload="initAndRunTests()">
  <script type="application/javascript"
          src="chrome://mochikit/content/MochiKit/packed.js"/>
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>

  <!-- test results are displayed in the html:body -->
  <body xmlns="http://www.w3.org/1999/xhtml">
    <p id="display"></p>
    <div id="content" style="display: none"></div>
    <pre id="test"></pre>
  </body>

  <!-- test code goes here -->
  <script class="testbody" type="application/javascript">
  <![CDATA[

  /** Test for Bug 466599 **/

function copyToClipboard(txt)
{
  var clipid = Components.interfaces.nsIClipboard;
  var clip =
    Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid);
  if (!clip)
    return false;
  var trans =
    Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
  if (!trans)
    return false;
  trans.addDataFlavor('text/html');
  var str =
    Components.classes['@mozilla.org/supports-string;1'].createInstance(Components.interfaces.nsISupportsString);
  var copytext = txt;
  str.data = copytext;
  trans.setTransferData("text/html",str,copytext.length*2);
  if (!clip)
    return false;
  clip.setData(trans,null,clipid.kGlobalClipboard);
  return true;
}

function readFromClipboard()
{
  var clipid = Components.interfaces.nsIClipboard;
  var clip =
    Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(clipid);
  if (!clip)
    return;
  var trans =
    Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
  if (!trans)
    return;
  trans.addDataFlavor('text/html');
  clip.getData(trans,clipid.kGlobalClipboard);
  var str = new Object();
  var strLength = new Object();
  trans.getTransferData("text/html",str,strLength);
  if (str)
    str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
  if (str)
    pastetext = str.data.substring(0,strLength.value / 2);
  return pastetext;
}

function encodeHtmlEntities(s)
{
  var result = '';
  for (var i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    result += {'<':'&lt;', '>':'&gt;', '&':'&amp;', '"':'&quot;'}[c] || c;
  }
  return result;
}

function initAndRunTests()
{
  var source = '<p>Lorem ipsum</p>';
  var expect = new RegExp('<html>.*charset=utf-8.*' + source + '.*</html>', 'im');

  var result = copyToClipboard(source);
  ok(result, "copied HTML data to system pasteboard");

  result = readFromClipboard();
  ok(expect.test(result), "data on system pasteboard is wrapped with charset metadata");

  $("display").innerHTML = 
    '<em>source:</em> <pre>' + encodeHtmlEntities(source) + '</pre><br/>' +
    '<em>result:</em> <pre>' + encodeHtmlEntities(result) + '</pre>';
}

  ]]>
  </script>
</window>