зеркало из https://github.com/mozilla/gecko-dev.git
80 строки
3.3 KiB
XML
80 строки
3.3 KiB
XML
<?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=1123480
|
|
-->
|
|
<window title="Mozilla Bug 1123480"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
|
onload="RunTest();">
|
|
<title>nsTransferable PBM Overflow Selection Test</title>
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
|
|
<script type="application/javascript">
|
|
<![CDATA[
|
|
// Boilerplate constructs
|
|
var SmallDataset = 100000; // Hundred thousand bytes
|
|
|
|
// Create 1 Mo of sample garbage text
|
|
var Ipsum = ""; // Select text from this
|
|
for (var Iter = 0; Iter < SmallDataset; Iter++) {
|
|
Ipsum += Math.random().toString(36) + ' ';
|
|
}
|
|
|
|
function RunTest() {
|
|
// Construct a nsIFile object for access to file methods
|
|
Components.utils.import("resource://gre/modules/FileUtils.jsm");
|
|
var clipboardFile = FileUtils.getFile("TmpD", ["clipboardcache"]);
|
|
|
|
// Sanitize environment
|
|
if (clipboardFile.exists()) {
|
|
clipboardFile.remove(false);
|
|
}
|
|
ok(!clipboardFile.exists(), "failed to presanitize the environment");
|
|
|
|
// Overflow a nsTransferable region by using the clipboard helper
|
|
const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
|
|
gClipboardHelper.copyString(Ipsum);
|
|
|
|
// Disabled private browsing mode should cache large selections to disk
|
|
ok(clipboardFile.exists(), "correctly saved memory by caching to disk");
|
|
|
|
// Sanitize environment again
|
|
if (clipboardFile.exists()) {
|
|
clipboardFile.remove(false);
|
|
}
|
|
ok(!clipboardFile.exists(), "failed to postsanitize the environment");
|
|
|
|
// Repeat procedure of plain text selection with private browsing enabled
|
|
Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
|
|
var Winpriv = window.open("about:blank", "_blank", "chrome, width=500, height=200, private");
|
|
ok(Winpriv, "failed to open private window");
|
|
ok(PrivateBrowsingUtils.isContentWindowPrivate(Winpriv), "correctly used a private window context");
|
|
|
|
// Select plaintext in private channel
|
|
Components.utils.import('resource://gre/modules/Services.jsm');
|
|
const nsTransferable = Components.Constructor("@mozilla.org/widget/transferable;1", "nsITransferable");
|
|
const nsSupportsString = Components.Constructor("@mozilla.org/supports-string;1", "nsISupportsString");
|
|
var Loadctx = PrivateBrowsingUtils.privacyContextFromWindow(Winpriv);
|
|
var Transfer = nsTransferable();
|
|
var Suppstr = nsSupportsString();
|
|
Suppstr.data = Ipsum;
|
|
Transfer.init(Loadctx);
|
|
Transfer.addDataFlavor("text/plain");
|
|
Transfer.setTransferData("text/plain", Suppstr, Ipsum.length);
|
|
Services.clipboard.setData(Transfer, null, Services.clipboard.kGlobalClipboard);
|
|
|
|
// Enabled private browsing mode should not cache any selection to disk
|
|
ok(!clipboardFile.exists(), "did not violate private browsing mode");
|
|
}
|
|
]]>
|
|
</script>
|
|
|
|
<!-- test results are displayed in the html:body -->
|
|
<body xmlns="http://www.w3.org/1999/xhtml">
|
|
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1123480"
|
|
target="_blank">Mozilla Bug 1123480</a>
|
|
</body>
|
|
</window>
|