summaryrefslogtreecommitdiffstats
path: root/toolkit/components/thumbnails/test/browser_thumbnails_storage.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/thumbnails/test/browser_thumbnails_storage.js')
-rw-r--r--toolkit/components/thumbnails/test/browser_thumbnails_storage.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/toolkit/components/thumbnails/test/browser_thumbnails_storage.js b/toolkit/components/thumbnails/test/browser_thumbnails_storage.js
new file mode 100644
index 0000000000..6a9f1ed3f6
--- /dev/null
+++ b/toolkit/components/thumbnails/test/browser_thumbnails_storage.js
@@ -0,0 +1,97 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const URL = "http://mochi.test:8888/";
+const URL_COPY = URL + "#copy";
+
+/**
+ * These tests ensure that the thumbnail storage is working as intended.
+ * Newly captured thumbnails should be saved as files and they should as well
+ * be removed when the user sanitizes their history.
+ */
+add_task(async function thumbnails_storage() {
+ dontExpireThumbnailURLs([URL, URL_COPY]);
+
+ await promiseClearHistory();
+ await promiseAddVisitsAndRepopulateNewTabLinks(URL);
+ await promiseCreateThumbnail();
+
+ // Make sure Storage.copy() updates an existing file.
+ await PageThumbsStorage.copy(URL, URL_COPY);
+ let copy = new FileUtils.File(
+ PageThumbsStorageService.getFilePathForURL(URL_COPY)
+ );
+ let mtime = (copy.lastModifiedTime -= 60);
+
+ await PageThumbsStorage.copy(URL, URL_COPY);
+ isnot(
+ new FileUtils.File(PageThumbsStorageService.getFilePathForURL(URL_COPY))
+ .lastModifiedTime,
+ mtime,
+ "thumbnail file was updated"
+ );
+
+ let file = new FileUtils.File(
+ PageThumbsStorageService.getFilePathForURL(URL)
+ );
+ let fileCopy = new FileUtils.File(
+ PageThumbsStorageService.getFilePathForURL(URL_COPY)
+ );
+
+ // Clear the browser history. Retry until the files are gone because Windows
+ // locks them sometimes.
+ info("Clearing history");
+ while (file.exists() || fileCopy.exists()) {
+ await promiseClearHistory();
+ }
+ info("History is clear");
+
+ info("Repopulating");
+ await promiseAddVisitsAndRepopulateNewTabLinks(URL);
+ await promiseCreateThumbnail();
+
+ info("Clearing the last 10 minutes of browsing history");
+ // Clear the last 10 minutes of browsing history.
+ await promiseClearHistory(true);
+
+ info("Attempt to clear file");
+ // Retry until the file is gone because Windows locks it sometimes.
+ await promiseClearFile(file, URL);
+
+ info("Done");
+});
+
+async function promiseClearFile(aFile, aURL) {
+ if (!aFile.exists()) {
+ return undefined;
+ }
+ // Re-add our URL to the history so that history observer's onDeleteURI()
+ // is called again.
+ await PlacesTestUtils.addVisits(makeURI(aURL));
+ await promiseClearHistory(true);
+ // Then retry.
+ return promiseClearFile(aFile, aURL);
+}
+
+function promiseClearHistory(aUseRange) {
+ let options = {};
+ if (aUseRange) {
+ let usec = Date.now() * 1000;
+ options.range = [usec - 10 * 60 * 1000 * 1000, usec];
+ options.ignoreTimespan = false;
+ }
+ return Sanitizer.sanitize(["history"], options);
+}
+
+async function promiseCreateThumbnail() {
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: URL,
+ },
+ async browser => {
+ gBrowserThumbnails.clearTopSiteURLCache();
+ await whenFileExists(URL);
+ }
+ );
+}