michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: const URL = "http://mochi.test:8888/?t=" + Date.now(); michael@0: const URL1 = URL + "#1"; michael@0: const URL2 = URL + "#2"; michael@0: const URL3 = URL + "#3"; michael@0: michael@0: let tmp = {}; michael@0: Cc["@mozilla.org/moz/jssubscript-loader;1"] michael@0: .getService(Ci.mozIJSSubScriptLoader) michael@0: .loadSubScript("resource://gre/modules/PageThumbs.jsm", tmp); michael@0: michael@0: const {EXPIRATION_MIN_CHUNK_SIZE, PageThumbsExpiration} = tmp; michael@0: michael@0: function runTests() { michael@0: // Create dummy URLs. michael@0: let dummyURLs = []; michael@0: for (let i = 0; i < EXPIRATION_MIN_CHUNK_SIZE + 10; i++) { michael@0: dummyURLs.push(URL + "#dummy" + i); michael@0: } michael@0: michael@0: // Make sure our thumbnails aren't expired too early. michael@0: dontExpireThumbnailURLs([URL1, URL2, URL3].concat(dummyURLs)); michael@0: michael@0: // Create three thumbnails. michael@0: yield createDummyThumbnail(URL1); michael@0: ok(thumbnailExists(URL1), "first thumbnail created"); michael@0: michael@0: yield createDummyThumbnail(URL2); michael@0: ok(thumbnailExists(URL2), "second thumbnail created"); michael@0: michael@0: yield createDummyThumbnail(URL3); michael@0: ok(thumbnailExists(URL3), "third thumbnail created"); michael@0: michael@0: // Remove the third thumbnail. michael@0: yield expireThumbnails([URL1, URL2]); michael@0: ok(thumbnailExists(URL1), "first thumbnail still exists"); michael@0: ok(thumbnailExists(URL2), "second thumbnail still exists"); michael@0: ok(!thumbnailExists(URL3), "third thumbnail has been removed"); michael@0: michael@0: // Remove the second thumbnail. michael@0: yield expireThumbnails([URL1]); michael@0: ok(thumbnailExists(URL1), "first thumbnail still exists"); michael@0: ok(!thumbnailExists(URL2), "second thumbnail has been removed"); michael@0: michael@0: // Remove all thumbnails. michael@0: yield expireThumbnails([]); michael@0: ok(!thumbnailExists(URL1), "all thumbnails have been removed"); michael@0: michael@0: // Create some more files than the min chunk size. michael@0: for (let url of dummyURLs) { michael@0: yield createDummyThumbnail(url); michael@0: } michael@0: michael@0: ok(dummyURLs.every(thumbnailExists), "all dummy thumbnails created"); michael@0: michael@0: // Expire thumbnails and expect 10 remaining. michael@0: yield expireThumbnails([]); michael@0: let remainingURLs = [u for (u of dummyURLs) if (thumbnailExists(u))]; michael@0: is(remainingURLs.length, 10, "10 dummy thumbnails remaining"); michael@0: michael@0: // Expire thumbnails again. All should be gone by now. michael@0: yield expireThumbnails([]); michael@0: remainingURLs = [u for (u of remainingURLs) if (thumbnailExists(u))]; michael@0: is(remainingURLs.length, 0, "no dummy thumbnails remaining"); michael@0: } michael@0: michael@0: function createDummyThumbnail(aURL) { michael@0: info("Creating dummy thumbnail for " + aURL); michael@0: let dummy = new Uint8Array(10); michael@0: for (let i = 0; i < 10; ++i) { michael@0: dummy[i] = i; michael@0: } michael@0: PageThumbsStorage.writeData(aURL, dummy).then( michael@0: function onSuccess() { michael@0: info("createDummyThumbnail succeeded"); michael@0: executeSoon(next); michael@0: }, michael@0: function onFailure(error) { michael@0: ok(false, "createDummyThumbnail failed " + error); michael@0: } michael@0: ); michael@0: } michael@0: michael@0: function expireThumbnails(aKeep) { michael@0: PageThumbsExpiration.expireThumbnails(aKeep).then( michael@0: function onSuccess() { michael@0: info("expireThumbnails succeeded"); michael@0: executeSoon(next); michael@0: }, michael@0: function onFailure(error) { michael@0: ok(false, "expireThumbnails failed " + error); michael@0: } michael@0: ); michael@0: }