michael@0: /** michael@0: * Test for nsICacheStorage.asyncDoomURI(). michael@0: * It tests dooming michael@0: * - an existent inactive entry michael@0: * - a non-existent inactive entry michael@0: * - an existent active entry michael@0: */ michael@0: michael@0: function doom(url, callback) michael@0: { michael@0: get_cache_service() michael@0: .diskCacheStorage(LoadContextInfo.default, false) michael@0: .asyncDoomURI(createURI(url), "", { michael@0: onCacheEntryDoomed: function(result) { michael@0: callback(result); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function write_and_check(str, data, len) michael@0: { michael@0: var written = str.write(data, len); michael@0: if (written != len) { michael@0: do_throw("str.write has not written all data!\n" + michael@0: " Expected: " + len + "\n" + michael@0: " Actual: " + written + "\n"); michael@0: } michael@0: } michael@0: michael@0: function write_entry() michael@0: { michael@0: asyncOpenCacheEntry("http://testentry/", "disk", Ci.nsICacheStorage.OPEN_TRUNCATE, null, function(status, entry) { michael@0: write_entry_cont(entry, entry.openOutputStream(0)); michael@0: }); michael@0: } michael@0: michael@0: function write_entry_cont(entry, ostream) michael@0: { michael@0: var data = "testdata"; michael@0: write_and_check(ostream, data, data.length); michael@0: ostream.close(); michael@0: entry.close(); michael@0: doom("http://testentry/", check_doom1); michael@0: } michael@0: michael@0: function check_doom1(status) michael@0: { michael@0: do_check_eq(status, Cr.NS_OK); michael@0: doom("http://nonexistententry/", check_doom2); michael@0: } michael@0: michael@0: function check_doom2(status) michael@0: { michael@0: do_check_eq(status, Cr.NS_ERROR_NOT_AVAILABLE); michael@0: asyncOpenCacheEntry("http://testentry/", "disk", Ci.nsICacheStorage.OPEN_TRUNCATE, null, function(status, entry) { michael@0: write_entry2(entry, entry.openOutputStream(0)); michael@0: }); michael@0: } michael@0: michael@0: var gEntry; michael@0: var gOstream; michael@0: function write_entry2(entry, ostream) michael@0: { michael@0: // write some data and doom the entry while it is active michael@0: var data = "testdata"; michael@0: write_and_check(ostream, data, data.length); michael@0: gEntry = entry; michael@0: gOstream = ostream; michael@0: doom("http://testentry/", check_doom3); michael@0: } michael@0: michael@0: function check_doom3(status) michael@0: { michael@0: do_check_eq(status, Cr.NS_OK); michael@0: // entry was doomed but writing should still succeed michael@0: var data = "testdata"; michael@0: write_and_check(gOstream, data, data.length); michael@0: gOstream.close(); michael@0: gEntry.close(); michael@0: // dooming the same entry again should fail michael@0: doom("http://testentry/", check_doom4); michael@0: } michael@0: michael@0: function check_doom4(status) michael@0: { michael@0: do_check_eq(status, Cr.NS_ERROR_NOT_AVAILABLE); michael@0: do_test_finished(); michael@0: } michael@0: michael@0: function run_test() { michael@0: do_get_profile(); michael@0: michael@0: // clear the cache michael@0: evict_cache_entries(); michael@0: write_entry(); michael@0: do_test_pending(); michael@0: }