170 lines
4.2 KiB
JavaScript
170 lines
4.2 KiB
JavaScript
"use strict";
|
|
|
|
add_task(async function test() {
|
|
do_get_profile();
|
|
do_test_pending();
|
|
|
|
await new Promise(resolve => {
|
|
// Open non-existing for read, should fail
|
|
asyncOpenCacheEntry(
|
|
"http://b/",
|
|
"disk",
|
|
Ci.nsICacheStorage.OPEN_READONLY,
|
|
null,
|
|
new OpenCallback(NOTFOUND, null, null, function (entry) {
|
|
resolve(entry);
|
|
})
|
|
);
|
|
});
|
|
|
|
await new Promise(resolve => {
|
|
// Open the same non-existing for read again, should fail second time
|
|
asyncOpenCacheEntry(
|
|
"http://b/",
|
|
"disk",
|
|
Ci.nsICacheStorage.OPEN_READONLY,
|
|
null,
|
|
new OpenCallback(NOTFOUND, null, null, function (entry) {
|
|
resolve(entry);
|
|
})
|
|
);
|
|
});
|
|
|
|
await new Promise(resolve => {
|
|
// Try it again normally, should go
|
|
asyncOpenCacheEntry(
|
|
"http://b/",
|
|
"disk",
|
|
Ci.nsICacheStorage.OPEN_NORMALLY,
|
|
null,
|
|
new OpenCallback(NEW, "b1m", "b1d", function (entry) {
|
|
resolve(entry);
|
|
})
|
|
);
|
|
});
|
|
|
|
await new Promise(resolve => {
|
|
// ...and check
|
|
asyncOpenCacheEntry(
|
|
"http://b/",
|
|
"disk",
|
|
Ci.nsICacheStorage.OPEN_NORMALLY,
|
|
null,
|
|
new OpenCallback(NORMAL, "b1m", "b1d", function (entry) {
|
|
resolve(entry);
|
|
})
|
|
);
|
|
});
|
|
|
|
Services.prefs.setBoolPref("network.cache.bug1708673", true);
|
|
registerCleanupFunction(() => {
|
|
Services.prefs.clearUserPref("network.cache.bug1708673");
|
|
});
|
|
|
|
let asyncDoomVisitor = new Promise(resolve => {
|
|
let doomTasks = [];
|
|
let visitor = {
|
|
onCacheStorageInfo() {},
|
|
async onCacheEntryInfo(
|
|
aURI,
|
|
aIdEnhance,
|
|
aDataSize,
|
|
aAltDataSize,
|
|
aFetchCount,
|
|
aLastModifiedTime,
|
|
aExpirationTime,
|
|
aPinned,
|
|
aInfo
|
|
) {
|
|
doomTasks.push(
|
|
new Promise(resolve1 => {
|
|
Services.cache2
|
|
.diskCacheStorage(aInfo, false)
|
|
.asyncDoomURI(aURI, aIdEnhance, {
|
|
onCacheEntryDoomed() {
|
|
info("doomed");
|
|
resolve1();
|
|
},
|
|
});
|
|
})
|
|
);
|
|
},
|
|
onCacheEntryVisitCompleted() {
|
|
Promise.allSettled(doomTasks).then(resolve);
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI(["nsICacheStorageVisitor"]),
|
|
};
|
|
Services.cache2.asyncVisitAllStorages(visitor, true);
|
|
});
|
|
|
|
let asyncOpenVisitor = new Promise(resolve => {
|
|
let openTasks = [];
|
|
let visitor = {
|
|
onCacheStorageInfo() {},
|
|
async onCacheEntryInfo(
|
|
aURI,
|
|
aIdEnhance,
|
|
aDataSize,
|
|
aAltDataSize,
|
|
aFetchCount,
|
|
aLastModifiedTime,
|
|
aExpirationTime,
|
|
aPinned,
|
|
aInfo
|
|
) {
|
|
info(`found ${aURI.spec}`);
|
|
openTasks.push(
|
|
new Promise(r2 => {
|
|
Services.cache2
|
|
.diskCacheStorage(aInfo, false)
|
|
.asyncOpenURI(
|
|
aURI,
|
|
"",
|
|
Ci.nsICacheStorage.OPEN_READONLY |
|
|
Ci.nsICacheStorage.OPEN_SECRETLY,
|
|
{
|
|
onCacheEntryCheck() {
|
|
return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED;
|
|
},
|
|
onCacheEntryAvailable() {
|
|
info("opened");
|
|
r2();
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI([
|
|
"nsICacheEntryOpenCallback",
|
|
]),
|
|
}
|
|
);
|
|
})
|
|
);
|
|
},
|
|
onCacheEntryVisitCompleted() {
|
|
Promise.all(openTasks).then(resolve);
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI(["nsICacheStorageVisitor"]),
|
|
};
|
|
Services.cache2.asyncVisitAllStorages(visitor, true);
|
|
});
|
|
|
|
await Promise.all([asyncDoomVisitor, asyncOpenVisitor]);
|
|
|
|
info("finished visiting");
|
|
|
|
await new Promise(resolve => {
|
|
let entryCount = 0;
|
|
let visitor = {
|
|
onCacheStorageInfo() {},
|
|
async onCacheEntryInfo() {
|
|
entryCount++;
|
|
},
|
|
onCacheEntryVisitCompleted() {
|
|
Assert.equal(entryCount, 0);
|
|
resolve();
|
|
},
|
|
QueryInterface: ChromeUtils.generateQI(["nsICacheStorageVisitor"]),
|
|
};
|
|
Services.cache2.asyncVisitAllStorages(visitor, true);
|
|
});
|
|
|
|
finish_cache2_test();
|
|
});
|