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>