From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- netwerk/test/unit/head_cache.js | 147 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 netwerk/test/unit/head_cache.js (limited to 'netwerk/test/unit/head_cache.js') diff --git a/netwerk/test/unit/head_cache.js b/netwerk/test/unit/head_cache.js new file mode 100644 index 000000000..6c8cf0d4a --- /dev/null +++ b/netwerk/test/unit/head_cache.js @@ -0,0 +1,147 @@ +Components.utils.import('resource://gre/modules/XPCOMUtils.jsm'); +Components.utils.import('resource://gre/modules/LoadContextInfo.jsm'); + +var _CSvc; +function get_cache_service() { + if (_CSvc) + return _CSvc; + + return _CSvc = Components.classes["@mozilla.org/netwerk/cache-storage-service;1"] + .getService(Components.interfaces.nsICacheStorageService); +} + +function evict_cache_entries(where) +{ + var clearDisk = (!where || where == "disk" || where == "all"); + var clearMem = (!where || where == "memory" || where == "all"); + var clearAppCache = (where == "appcache"); + + var svc = get_cache_service(); + var storage; + + if (clearMem) { + storage = svc.memoryCacheStorage(LoadContextInfo.default); + storage.asyncEvictStorage(null); + } + + if (clearDisk) { + storage = svc.diskCacheStorage(LoadContextInfo.default, false); + storage.asyncEvictStorage(null); + } + + if (clearAppCache) { + storage = svc.appCacheStorage(LoadContextInfo.default, null); + storage.asyncEvictStorage(null); + } +} + +function createURI(urispec) +{ + var ioServ = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + return ioServ.newURI(urispec, null, null); +} + +function getCacheStorage(where, lci, appcache) +{ + if (!lci) lci = LoadContextInfo.default; + var svc = get_cache_service(); + switch (where) { + case "disk": return svc.diskCacheStorage(lci, false); + case "memory": return svc.memoryCacheStorage(lci); + case "appcache": return svc.appCacheStorage(lci, appcache); + case "pin": return svc.pinningCacheStorage(lci); + } + return null; +} + +function asyncOpenCacheEntry(key, where, flags, lci, callback, appcache) +{ + key = createURI(key); + + function CacheListener() { } + CacheListener.prototype = { + _appCache: appcache, + + QueryInterface: function (iid) { + if (iid.equals(Components.interfaces.nsICacheEntryOpenCallback) || + iid.equals(Components.interfaces.nsISupports)) + return this; + throw Components.results.NS_ERROR_NO_INTERFACE; + }, + + onCacheEntryCheck: function(entry, appCache) { + if (typeof callback === "object") + return callback.onCacheEntryCheck(entry, appCache); + return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED; + }, + + onCacheEntryAvailable: function (entry, isnew, appCache, status) { + if (typeof callback === "object") { + // Root us at the callback + callback.__cache_listener_root = this; + callback.onCacheEntryAvailable(entry, isnew, appCache, status); + } + else + callback(status, entry, appCache); + }, + + run: function () { + var storage = getCacheStorage(where, lci, this._appCache); + storage.asyncOpenURI(key, "", flags, this); + } + }; + + (new CacheListener()).run(); +} + +function syncWithCacheIOThread(callback, force) +{ + if (!newCacheBackEndUsed() || force) { + asyncOpenCacheEntry( + "http://nonexistententry/", "disk", Ci.nsICacheStorage.OPEN_READONLY, null, + function(status, entry) { + do_check_eq(status, Components.results.NS_ERROR_CACHE_KEY_NOT_FOUND); + callback(); + }); + } + else { + callback(); + } +} + +function get_device_entry_count(where, lci, continuation) { + var storage = getCacheStorage(where, lci); + if (!storage) { + continuation(-1, 0); + return; + } + + var visitor = { + onCacheStorageInfo: function (entryCount, consumption) { + do_execute_soon(function() { + continuation(entryCount, consumption); + }); + }, + }; + + // get the device entry count + storage.asyncVisitStorage(visitor, false); +} + +function asyncCheckCacheEntryPresence(key, where, shouldExist, continuation, appCache) +{ + asyncOpenCacheEntry(key, where, Ci.nsICacheStorage.OPEN_READONLY, null, + function(status, entry) { + if (shouldExist) { + dump("TEST-INFO | checking cache key " + key + " exists @ " + where); + do_check_eq(status, Cr.NS_OK); + do_check_true(!!entry); + } else { + dump("TEST-INFO | checking cache key " + key + " doesn't exist @ " + where); + do_check_eq(status, Cr.NS_ERROR_CACHE_KEY_NOT_FOUND); + do_check_null(entry); + } + continuation(); + }, appCache); +} -- cgit v1.2.3