<?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=462106
-->
<window title="Mozilla Bug 462106"
        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 462106 **/

const Cc = Components.classes;
const Ci = Components.interfaces;

function copy(str) {
  Cc["@mozilla.org/widget/clipboardhelper;1"].
  getService(Ci.nsIClipboardHelper).
  copyString(str);
}

function paste() {
  let trans = Cc["@mozilla.org/widget/transferable;1"].
              createInstance(Ci.nsITransferable);
  trans.addDataFlavor("text/unicode");
  let clip = Cc["@mozilla.org/widget/clipboard;1"].
             getService(Ci.nsIClipboard);
  clip.getData(trans, Ci.nsIClipboard.kGlobalClipboard);
  let str = {}, length = {};
  try {
    trans.getTransferData("text/unicode", str, length);
  } catch (e) {
    str = null;
  }
  if (str) {
    str = str.value.QueryInterface(Ci.nsISupportsString);
    if (str)
      str = str.data.substring(0, length.value / 2);
  }
  return str;
}

function initAndRunTests() {
  let pb;
  try {
    pb = Cc["@mozilla.org/privatebrowsing;1"].
         getService(Ci.nsIPrivateBrowsingService);
  } catch (e) {
    ok(true, "no Private Browsing service");
    return;
  }

  SimpleTest.waitForExplicitFinish();

  let prefBranch = Cc["@mozilla.org/preferences-service;1"].
                   getService(Ci.nsIPrefBranch);
  prefBranch.setBoolPref("browser.privatebrowsing.keep_current_session", true);

  const data = "random number: " + Math.random();
  copy(data);
  is(data, paste(), "Data successfully copied before entering the private browsing mode");
  pb.privateBrowsingEnabled = true;
  pb.privateBrowsingEnabled = false;
  // the data should still be on the clipboard because it was copied before
  // entering the private browsing mode
  is(data, paste(), "Copied data persisted after leaving the private browsing mode");

  const data2 = "another random number: " + Math.random();
  pb.privateBrowsingEnabled = true;
  copy(data2); // copy the data inside the private browsing mode
  setTimeout(function() { // without this, the test fails sporadically
    // the data should be on the clipboard inside the private browsing mode
    is(data2, paste(), "Data successfully copied inside the private browsing mode");
    pb.privateBrowsingEnabled = false;
    // the data should no longer be on the clipboard at this stage
    isnot(data2, paste(), "Data no longer available after leaving the private browsing mode");

    prefBranch.clearUserPref("browser.privatebrowsing.keep_current_session");
    SimpleTest.finish();
  }, 0);
}

  ]]>
  </script>
</window>
