"use strict";
// Control for test_cache2-35: with encryption disabled (the default), the same
// entry IS stored as plaintext on disk. This both confirms the default-off
// behavior and proves the on-disk marker scan can actually detect plaintext, so
// the "marker absent" assertion in the encrypted test is meaningful.
const MARKER =
"C2PLAINTEXTCONTROLMARKER";
const META =
"meta-" + MARKER;
const DATA =
"data-" + MARKER +
"-padding-so-it-spans-some-bytes-0123456789";
function run_test() {
// Leave browser.cache.disk.encryption.enabled at its default (false).
do_get_profile();
asyncOpenCacheEntry(
"http://plaintext/",
"disk",
Ci.nsICacheStorage.OPEN_TRUNCATE,
null,
new OpenCallback(
NEW | WAITFORWRITE, META, DATA,
function () {
Services.cache2
.QueryInterface(Ci.nsICacheTesting)
.flush(makeFlushObserver(afterFlush));
})
);
do_test_pending();
}
function afterFlush() {
Assert.ok(
cacheDirContainsMarker(MARKER),
"unencrypted cache is expected to contain the marker on disk"
);
finish_cache2_test();
}
function makeFlushObserver(callback) {
return {
observe() {
executeSoon(callback);
},
};
}
function cacheDirContainsMarker(marker) {
let dir = getDiskCacheDirectory();
if (!dir.exists()) {
return false;
}
return dirContainsMarker(dir, marker);
}
function dirContainsMarker(dir, marker) {
let entries = dir.directoryEntries;
while (entries.hasMoreElements()) {
let file = entries.nextFile;
if (file.isDirectory()) {
if (dirContainsMarker(file, marker)) {
return true;
}
}
else if (fileContains(file, marker)) {
return true;
}
}
return false;
}
function fileContains(file, marker) {
let fstream = Cc[
"@mozilla.org/network/file-input-stream;1"].createInstance(
Ci.nsIFileInputStream
);
fstream.init(file, -
1,
0,
0);
let bstream = Cc[
"@mozilla.org/binaryinputstream;1"].createInstance(
Ci.nsIBinaryInputStream
);
bstream.setInputStream(fstream);
let available = bstream.available();
let bytes = available ? bstream.readBytes(available) :
"";
bstream.close();
return bytes.includes(marker);
}