tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_pasteImgFromTransferable.html (2141B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      5 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
      6 </head>
      7 
      8 <body>
      9 <div id="edit" contenteditable></div>
     10 
     11 <script>
     12 const Cc = SpecialPowers.Cc;
     13 const Ci = SpecialPowers.Ci;
     14 
     15 function getHTMLEditor(aWindow) {
     16  let editingSession = SpecialPowers.wrap(aWindow).docShell.editingSession;
     17  if (!editingSession) {
     18    return null;
     19  }
     20  let editor = editingSession.getEditorForWindow(aWindow);
     21  if (!editor) {
     22    return null;
     23  }
     24  return editor.QueryInterface(Ci.nsIHTMLEditor);
     25 }
     26 
     27 const TESTS = [
     28  {
     29    mimeType: "image/gif",
     30    base64: "R0lGODdhAQACAPABAAD/AP///ywAAAAAAQACAAACAkQKADs="
     31  },
     32  {
     33    mimeType: "image/jpeg",
     34    base64: "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////wgALCAABAAEBAREA/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAgBAQABPxA="
     35  },
     36  {
     37    mimeType: "image/png",
     38    base64: "iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAIAAABvrngfAAAAFklEQVQImWMwjWhCQwxECoW3oCHihAB0LyYv5/oAHwAAAABJRU5ErkJggg=="
     39  },
     40 ];
     41 
     42 add_task(async function() {
     43  await new Promise(resolve => SimpleTest.waitForFocus(resolve, window));
     44 
     45  let edit = document.getElementById("edit");
     46  edit.focus();
     47 
     48  await new Promise(resolve => SimpleTest.executeSoon(resolve));
     49 
     50  for (const test of TESTS) {
     51    let bin = window.atob(test.base64);
     52    let stringStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
     53      Ci.nsIStringInputStream
     54    );
     55    stringStream.setByteStringData(bin);
     56 
     57    let trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(
     58      Ci.nsITransferable
     59    );
     60    trans.init(null);
     61    trans.setTransferData(test.mimeType, stringStream);
     62 
     63    let evt = new Promise(resolve =>
     64      edit.addEventListener("input", resolve, {once: true}));
     65 
     66    getHTMLEditor(window).pasteTransferable(trans);
     67 
     68    await evt;
     69 
     70    is(edit.innerHTML,
     71       "<img src=\"data:" + test.mimeType + ";base64," + test.base64 + "\" alt=\"\">",
     72       "pastedTransferable pastes image as data URL");
     73    edit.innerHTML = "";
     74  }
     75 });
     76 </script>
     77 </body>
     78 </html>