Bug 1312954 - Part 3: Add a test for nsICacheStorageService.asyncVisitAllStorages() r?mayhemer
--- a/netwerk/test/unit/head_cache2.js
+++ b/netwerk/test/unit/head_cache2.js
@@ -312,24 +312,38 @@ VisitCallback.prototype =
do_check_eq(this.num, num);
if (newCacheBackEndUsed()) {
// Consumption is as expected only in the new backend
do_check_eq(this.consumption, consumption);
}
if (!this.entries)
this.notify();
},
- onCacheEntryInfo: function(aURI, aIdEnhance, aDataSize, aFetchCount, aLastModifiedTime, aExpirationTime)
+ onCacheEntryInfo: function(aURI, aIdEnhance, aDataSize, aFetchCount, aLastModifiedTime, aExpirationTime,
+ aPinned, aInfo)
{
var key = (aIdEnhance ? (aIdEnhance + ":") : "") + aURI.asciiSpec;
LOG_C2(this, "onCacheEntryInfo: key=" + key);
+ function findCacheIndex(element) {
+ if (typeof(element) === "string") {
+ return element === key;
+ } else if (typeof(element) === "object") {
+ return element.uri === key &&
+ element.lci.isAnonymous === aInfo.isAnonymous &&
+ ChromeUtils.isOriginAttributesEqual(element.lci.originAttributes,
+ aInfo.originAttributes);
+ }
+
+ return false;
+ }
+
do_check_true(!!this.entries);
- var index = this.entries.indexOf(key);
+ var index = this.entries.findIndex(findCacheIndex);
do_check_true(index > -1);
this.entries.splice(index, 1);
},
onCacheEntryVisitCompleted: function()
{
LOG_C2(this, "onCacheEntryVisitCompleted");
if (this.entries)
new file mode 100644
--- /dev/null
+++ b/netwerk/test/unit/test_cache2-31-visit-all.js
@@ -0,0 +1,67 @@
+function run_test()
+{
+ var storage = getCacheStorage("disk");
+ var lcis = [LoadContextInfo.default,
+ LoadContextInfo.custom(false, { userContextId: 1 }),
+ LoadContextInfo.custom(false, { userContextId: 2 }),
+ LoadContextInfo.custom(false, { userContextId: 3 })];
+
+ do_get_profile();
+ if (!newCacheBackEndUsed()) {
+ do_check_true(true, "This test checks only cache2 specific behavior.");
+ return;
+ }
+
+ var mc = new MultipleCallbacks(8, function() {
+ do_execute_soon(function() {
+ var expectedConsumption = 8192;
+ var entries = [{ uri: "http://a/", lci: lcis[0] }, // default
+ { uri: "http://b/", lci: lcis[0] }, // default
+ { uri: "http://a/", lci: lcis[1] }, // user Context 1
+ { uri: "http://b/", lci: lcis[1] }, // user Context 1
+ { uri: "http://a/", lci: lcis[2] }, // user Context 2
+ { uri: "http://b/", lci: lcis[2] }, // user Context 2
+ { uri: "http://a/", lci: lcis[3] }, // user Context 3
+ { uri: "http://b/", lci: lcis[3] }]; // user Context 3
+
+ get_cache_service().asyncVisitAllStorages(
+ // Test should store 8 entries across 4 originAttributes
+ new VisitCallback(8, expectedConsumption, entries, function() {
+ get_cache_service().asyncVisitAllStorages(
+ // Still 8 entries expected, now don't walk them
+ new VisitCallback(8, expectedConsumption, null, function() {
+ finish_cache2_test();
+ }),
+ false
+ );
+ }),
+ true
+ );
+ });
+ }, true);
+
+ // Add two cache entries for each originAttributes.
+ for (var i = 0 ; i < lcis.length; i++) {
+ asyncOpenCacheEntry("http://a/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, lcis[i],
+ new OpenCallback(NEW, "a1m", "a1d", function(entry) {
+ asyncOpenCacheEntry("http://a/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, lcis[i],
+ new OpenCallback(NORMAL, "a1m", "a1d", function(entry) {
+ mc.fired();
+ })
+ );
+ })
+ );
+
+ asyncOpenCacheEntry("http://b/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, lcis[i],
+ new OpenCallback(NEW, "b1m", "b1d", function(entry) {
+ asyncOpenCacheEntry("http://b/", "disk", Ci.nsICacheStorage.OPEN_NORMALLY, lcis[i],
+ new OpenCallback(NORMAL, "b1m", "b1d", function(entry) {
+ mc.fired();
+ })
+ );
+ })
+ );
+ }
+
+ do_test_pending();
+}
--- a/netwerk/test/unit/xpcshell.ini
+++ b/netwerk/test/unit/xpcshell.ini
@@ -71,16 +71,17 @@ skip-if = true
[test_cache2-29b-concurrent_read_non-resumable_entry_size_zero.js]
[test_cache2-29c-concurrent_read_half-interrupted.js]
[test_cache2-29d-concurrent_read_half-corrupted-206.js]
[test_cache2-29e-concurrent_read_half-non-206-response.js]
[test_cache2-30a-entry-pinning.js]
[test_cache2-30b-pinning-storage-clear.js]
[test_cache2-30c-pinning-deferred-doom.js]
[test_cache2-30d-pinning-WasEvicted-API.js]
+[test_cache2-31-visit-all.js]
[test_partial_response_entry_size_smart_shrink.js]
[test_304_responses.js]
[test_421.js]
[test_cacheForOfflineUse_no-store.js]
[test_307_redirect.js]
[test_NetUtil.js]
[test_URIs.js]
# Intermittent time-outs on Android, bug 1285020