Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Test for handling too big alternative data
*
* - first we try to open an output stream for too big alt-data which must fail
* and leave original data intact
*
* - then we open the output stream without passing predicted data size which
* succeeds but writing must fail later at the size limit and the original
* data must be kept
*/
"use strict";
var data = "data ";
var altData = "alt-data";
function run_test() {
do_get_profile();
// Expand both data to 1MB
for (let i = 0; i < 17; i++) {
data += data;
altData += altData;
}
// Set the limit so that the data fits but alt-data doesn't.
Services.prefs.setIntPref("browser.cache.disk.max_entry_size", 1800);
write_data();
do_test_pending();
}
function write_data() {
asyncOpenCacheEntry(
"disk",
Ci.nsICacheStorage.OPEN_NORMALLY,
null,
function (status, entry) {
Assert.equal(status, Cr.NS_OK);
var os = entry.openOutputStream(0, -1);
var written = os.write(data, data.length);
Assert.equal(written, data.length);
os.close();
open_big_altdata_output(entry);
}
);
}
function open_big_altdata_output(entry) {
try {
entry.openAlternativeOutputStream("text/binary", altData.length);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_FILE_TOO_BIG);
}
entry.close();
check_entry(write_big_altdata);
}
function write_big_altdata() {
asyncOpenCacheEntry(
"disk",
Ci.nsICacheStorage.OPEN_NORMALLY,
null,
function (status, entry) {
Assert.equal(status, Cr.NS_OK);
var os = entry.openAlternativeOutputStream("text/binary", -1);
try {
os.write(altData, altData.length);
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_FILE_TOO_BIG);
}
os.close();
entry.close();
check_entry(do_test_finished);
}
);
}
function check_entry(cb) {
asyncOpenCacheEntry(
"disk",
Ci.nsICacheStorage.OPEN_NORMALLY,
null,
function (status, entry) {
Assert.equal(status, Cr.NS_OK);
var is = null;
try {
is = entry.openAlternativeInputStream("text/binary");
} catch (e) {
Assert.equal(e.result, Cr.NS_ERROR_NOT_AVAILABLE);
}
is = entry.openInputStream(0);
pumpReadStream(is, function (read) {
Assert.equal(read.length, data.length);
is.close();
entry.close();
executeSoon(cb);
});
}
);
}