michael@0: var DEBUG = false; michael@0: michael@0: var clientID = "javascript"; michael@0: var key = "theme:button"; michael@0: var nsICache = Components.interfaces.nsICache; michael@0: michael@0: function getCacheService() michael@0: { michael@0: var nsCacheService = Components.classes["@mozilla.org/network/cache-service;1"]; michael@0: var service = nsCacheService.getService(Components.interfaces.nsICacheService); michael@0: return service; michael@0: } michael@0: michael@0: function createCacheSession(clientID, storagePolicy, streamable) michael@0: { michael@0: var service = getCacheService(); michael@0: var session = service.createSession(clientID, storagePolicy, streamable); michael@0: return session; michael@0: } michael@0: michael@0: function openCacheEntry(mode) michael@0: { michael@0: var session = createCacheSession(clientID, nsICache.STORE_ON_DISK, true); michael@0: var entry = session.openCacheEntry(key, mode); michael@0: return entry; michael@0: } michael@0: michael@0: function wrapInputStream(input) michael@0: { michael@0: var nsIScriptableInputStream = Components.interfaces.nsIScriptableInputStream; michael@0: var factory = Components.classes["@mozilla.org/scriptableinputstream;1"]; michael@0: var wrapper = factory.createInstance(nsIScriptableInputStream); michael@0: wrapper.init(input); michael@0: return wrapper; michael@0: } michael@0: michael@0: function test() michael@0: { michael@0: var outputEntry = openCacheEntry(nsICache.ACCESS_WRITE); michael@0: var output = outputEntry.transport.openOutputStream(0, -1, 0); michael@0: if (output.write("foo", 3) == 3) michael@0: print("disk cache write works!"); michael@0: else michael@0: print("disk cache write broken!"); michael@0: michael@0: // store some metadata. michael@0: outputEntry.setMetaDataElement("size", "3"); michael@0: michael@0: output.close(); michael@0: outputEntry.markValid(); michael@0: outputEntry.close(); michael@0: michael@0: var inputEntry = openCacheEntry(nsICache.ACCESS_READ); michael@0: var input = wrapInputStream(inputEntry.transport.openInputStream(0, -1, 0)); michael@0: michael@0: if (input.read(input.available()) == "foo") michael@0: print("disk cache read works!"); michael@0: else michael@0: print("disk cache read broken!"); michael@0: michael@0: if (inputEntry.getMetaDataElement("size") == "3") michael@0: print("disk cache metadata works!"); michael@0: else michael@0: print("disk cache metadata broken!"); michael@0: michael@0: input.close(); michael@0: inputEntry.close(); michael@0: } michael@0: michael@0: function doom() michael@0: { michael@0: var doomedEntry = openCacheEntry(nsICache.ACCESS_READ_WRITE); michael@0: doomedEntry.doom(); michael@0: doomedEntry.close(); michael@0: } michael@0: michael@0: if (DEBUG) { michael@0: getCacheService(); michael@0: print("cache service loaded."); michael@0: } else { michael@0: print("running disk cache test."); michael@0: test(); michael@0: print("disk cache test complete."); michael@0: }