function dumpLeaks()
{
    var leakDetector = Components.classes["@mozilla.org/xpcom/leakdetector;1"].getService(Components.interfaces.nsILeakDetector);
    leakDetector.dumpLeaks();
}

function getCacheService()
{
    var nsCacheService = Components.classes["@mozilla.org/network/cache-service;1"];
    var service = nsCacheService.getService(Components.interfaces.nsICacheService);
    return service;
}

function createCacheSession(clientID, storagePolicy, streamable)
{
    var service = getCacheService();
    var nsICache = Components.interfaces.nsICache;
    var session = service.createSession(clientID, storagePolicy, streamable);
    return session;
}

function openCacheEntry(clientID, url)
{
    var nsICache = Components.interfaces.nsICache;
    var session = createCacheSession(clientID, nsICache.STORE_ANYWHERE, false);
    var entry = session.openCacheEntry(url, nsICache.ACCESS_READ_WRITE);
    return entry;
}

function wrapString(str)
{
    var nsISupportsCString = Components.interfaces.nsISupportsCString;
    var factory = Components.classes["@mozilla.org/supports-cstring;1"];
    var wrapper = factory.createInstance(nsISupportsCString);
    wrapper.data = str;
    return wrapper;
}

function test()
{
    var data = wrapString("javascript");
    var entry = openCacheEntry("javascript", "theme:button");
    entry.cacheElement = data;
    entry.markValid();
    entry.close();

    var newEntry = openCacheEntry("javascript", "theme:button");
    if (newEntry.cacheElement === data)
        print("object cache works.");
    else
        print("object cache failed.");
}

test();
