Thu, 15 Jan 2015 15:59:08 +0100
Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
michael@0 | 1 | <?xml version="1.0"?> |
michael@0 | 2 | <?xml-stylesheet href="chrome://global/skin" |
michael@0 | 3 | type="text/css"?> |
michael@0 | 4 | <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" |
michael@0 | 5 | type="text/css"?> |
michael@0 | 6 | <!-- |
michael@0 | 7 | https://bugzilla.mozilla.org/show_bug.cgi?id=444800 |
michael@0 | 8 | --> |
michael@0 | 9 | <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" |
michael@0 | 10 | title="Mozilla Bug 444800" onload="initAndRunTests()"> |
michael@0 | 11 | <script type="application/javascript" |
michael@0 | 12 | src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> |
michael@0 | 13 | |
michael@0 | 14 | <body xmlns="http://www.w3.org/1999/xhtml"> |
michael@0 | 15 | <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=444800" |
michael@0 | 16 | target="_blank">Mozilla Bug 444800</a> |
michael@0 | 17 | <p/> |
michael@0 | 18 | <img id="bitmapImage" src="data:image/bmp;base64,Qk2KAwAAAAAAAIoAAAB8AAAADwAAABAAAAABABgAAAAAAAADAAASCwAAEgsAAAAAAAAAAAAAAAD%2FAAD%2FAAD%2FAAAAAAAA%2FwEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F0vf%2FAABc8tKY%2F%2F%2F%2FyNfq3Mi9%2F%2F%2F70vf%2FAABP8s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABB8s2R5f%2F%2FAAB5LgAA%2F%2B7Czff%2FAABB7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABB99KRpdz%2FAAAAAAAA4Ktm0vv%2FAABB7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABB7teYQZHNkS4AebfImAAA1%2FfyAABP7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABByMiYAAB5159P0v%2F%2FAABBwtKrAABc7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABPcIJwAAAA%2B%2BW3%2F%2F%2F%2FAHC3gnBBAABP7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2Fzff%2FAABcAAAAmE8A%2F%2F%2Fy%2F%2F%2F%2Fn9LyAAAAAAAA7s2Y%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FzfL%2FAABcAAAA4LFw%2F%2F%2F%2F%2F%2F%2F%2F4P%2F%2FAAB5AAAA7s2R%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F0vf%2FAABmXAAA%2F%2B7I%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FXJ%2FSAAAA8s2Y%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FAAAA"/> |
michael@0 | 19 | <p/> |
michael@0 | 20 | <pre id="test"> |
michael@0 | 21 | </pre> |
michael@0 | 22 | </body> |
michael@0 | 23 | |
michael@0 | 24 | <script class="testbody" type="application/javascript"> |
michael@0 | 25 | <![CDATA[ |
michael@0 | 26 | const knsIClipboard = Components.interfaces.nsIClipboard; |
michael@0 | 27 | |
michael@0 | 28 | function copyImageToClipboard() |
michael@0 | 29 | { |
michael@0 | 30 | var tmpNode = document.popupNode; |
michael@0 | 31 | document.popupNode = document.getElementById("bitmapImage"); |
michael@0 | 32 | |
michael@0 | 33 | const kCmd = "cmd_copyImageContents"; |
michael@0 | 34 | var controller = top.document.commandDispatcher |
michael@0 | 35 | .getControllerForCommand(kCmd); |
michael@0 | 36 | ok((controller && controller.isCommandEnabled(kCmd)), "have copy command"); |
michael@0 | 37 | controller.doCommand(kCmd); |
michael@0 | 38 | |
michael@0 | 39 | document.popupNode = tmpNode; |
michael@0 | 40 | } |
michael@0 | 41 | |
michael@0 | 42 | function getLoadContext() { |
michael@0 | 43 | const Ci = Components.interfaces; |
michael@0 | 44 | return window.QueryInterface(Ci.nsIInterfaceRequestor) |
michael@0 | 45 | .getInterface(Ci.nsIWebNavigation) |
michael@0 | 46 | .QueryInterface(Ci.nsILoadContext); |
michael@0 | 47 | } |
michael@0 | 48 | |
michael@0 | 49 | function runImageClipboardTests(aCBSvc, aImageType) |
michael@0 | 50 | { |
michael@0 | 51 | // Verify that hasDataMatchingFlavors() is working correctly. |
michael@0 | 52 | var typeArray = [ aImageType ]; |
michael@0 | 53 | var hasImage = aCBSvc.hasDataMatchingFlavors(typeArray, typeArray.length, |
michael@0 | 54 | knsIClipboard.kGlobalClipboard); |
michael@0 | 55 | ok(hasImage, aImageType + " - hasDataMatchingFlavors()"); |
michael@0 | 56 | |
michael@0 | 57 | // Verify that getData() is working correctly. |
michael@0 | 58 | var xfer = Components.classes["@mozilla.org/widget/transferable;1"] |
michael@0 | 59 | .createInstance(Components.interfaces.nsITransferable); |
michael@0 | 60 | xfer.init(getLoadContext()); |
michael@0 | 61 | xfer.addDataFlavor(aImageType); |
michael@0 | 62 | aCBSvc.getData(xfer, knsIClipboard.kGlobalClipboard); |
michael@0 | 63 | |
michael@0 | 64 | var typeObj = {}, dataObj = {}, lenObj = {}; |
michael@0 | 65 | xfer.getAnyTransferData(typeObj, dataObj, lenObj); |
michael@0 | 66 | var gotValue = (null != dataObj.value); |
michael@0 | 67 | ok(gotValue, aImageType + " - getData() returned a value"); |
michael@0 | 68 | if (gotValue) |
michael@0 | 69 | { |
michael@0 | 70 | const knsIInputStream = Components.interfaces.nsIInputStream; |
michael@0 | 71 | var imgStream = dataObj.value.QueryInterface(knsIInputStream); |
michael@0 | 72 | ok((null != imgStream), aImageType + " - got an nsIInputStream"); |
michael@0 | 73 | var bytesAvailable = imgStream.available(); |
michael@0 | 74 | ok((bytesAvailable > 10), aImageType + " - got some data"); |
michael@0 | 75 | } |
michael@0 | 76 | } |
michael@0 | 77 | |
michael@0 | 78 | function initAndRunTests() |
michael@0 | 79 | { |
michael@0 | 80 | SimpleTest.waitForExplicitFinish(); |
michael@0 | 81 | |
michael@0 | 82 | copyImageToClipboard(); |
michael@0 | 83 | |
michael@0 | 84 | var cbSvc = Components.classes["@mozilla.org/widget/clipboard;1"] |
michael@0 | 85 | .getService(knsIClipboard); |
michael@0 | 86 | |
michael@0 | 87 | // Work around a problem on Windows where clipboard is not ready after copy. |
michael@0 | 88 | setTimeout(function() { runTests(cbSvc); }, 0); |
michael@0 | 89 | } |
michael@0 | 90 | |
michael@0 | 91 | function runTests(aCBSvc) |
michael@0 | 92 | { |
michael@0 | 93 | runImageClipboardTests(aCBSvc, "image/png"); |
michael@0 | 94 | runImageClipboardTests(aCBSvc, "image/jpg"); |
michael@0 | 95 | runImageClipboardTests(aCBSvc, "image/jpeg"); |
michael@0 | 96 | |
michael@0 | 97 | SimpleTest.finish(); |
michael@0 | 98 | } |
michael@0 | 99 | |
michael@0 | 100 | ]]> |
michael@0 | 101 | </script> |
michael@0 | 102 | </window> |