summaryrefslogtreecommitdiffstats
path: root/toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js')
-rw-r--r--toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js b/toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js
new file mode 100644
index 000000000..e6b99ff8b
--- /dev/null
+++ b/toolkit/components/places/tests/expiration/test_notifications_onDeleteVisits.js
@@ -0,0 +1,142 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * What this is aimed to test:
+ *
+ * Expiring only visits for a page, but not the full page, should fire an
+ * onDeleteVisits notification.
+ */
+
+var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
+ getService(Ci.nsINavHistoryService);
+
+var tests = [
+
+ { desc: "Add 1 bookmarked page.",
+ addPages: 1,
+ visitsPerPage: 1,
+ addBookmarks: 1,
+ limitExpiration: -1,
+ expectedNotifications: 1, // Will expire visits for 1 page.
+ },
+
+ { desc: "Add 2 pages, 1 bookmarked.",
+ addPages: 2,
+ visitsPerPage: 1,
+ addBookmarks: 1,
+ limitExpiration: -1,
+ expectedNotifications: 1, // Will expire visits for 1 page.
+ },
+
+ { desc: "Add 10 pages, none bookmarked.",
+ addPages: 10,
+ visitsPerPage: 1,
+ addBookmarks: 0,
+ limitExpiration: -1,
+ expectedNotifications: 0, // Will expire only full pages.
+ },
+
+ { desc: "Add 10 pages, all bookmarked.",
+ addPages: 10,
+ visitsPerPage: 1,
+ addBookmarks: 10,
+ limitExpiration: -1,
+ expectedNotifications: 10, // Will expire visist for all pages.
+ },
+
+ { desc: "Add 10 pages with lot of visits, none bookmarked.",
+ addPages: 10,
+ visitsPerPage: 10,
+ addBookmarks: 0,
+ limitExpiration: 10,
+ expectedNotifications: 10, // Will expire 1 visist for each page, but won't
+ }, // expire pages since they still have visits.
+
+];
+
+function run_test() {
+ run_next_test();
+}
+
+add_task(function* test_notifications_onDeleteVisits() {
+ // Set interval to a large value so we don't expire on it.
+ setInterval(3600); // 1h
+
+ // Expire anything that is expirable.
+ setMaxPages(0);
+
+ for (let testIndex = 1; testIndex <= tests.length; testIndex++) {
+ let currentTest = tests[testIndex -1];
+ print("\nTEST " + testIndex + ": " + currentTest.desc);
+ currentTest.receivedNotifications = 0;
+
+ // Setup visits.
+ let timeInMicroseconds = getExpirablePRTime(8);
+
+ function newTimeInMicroseconds() {
+ timeInMicroseconds = timeInMicroseconds + 1000;
+ return timeInMicroseconds;
+ }
+
+ for (let j = 0; j < currentTest.visitsPerPage; j++) {
+ for (let i = 0; i < currentTest.addPages; i++) {
+ let page = "http://" + testIndex + "." + i + ".mozilla.org/";
+ yield PlacesTestUtils.addVisits({ uri: uri(page), visitDate: newTimeInMicroseconds() });
+ }
+ }
+
+ // Setup bookmarks.
+ currentTest.bookmarks = [];
+ for (let i = 0; i < currentTest.addBookmarks; i++) {
+ let page = "http://" + testIndex + "." + i + ".mozilla.org/";
+ yield PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: null,
+ url: page
+ });
+ currentTest.bookmarks.push(page);
+ }
+
+ // Observe history.
+ historyObserver = {
+ onBeginUpdateBatch: function PEX_onBeginUpdateBatch() {},
+ onEndUpdateBatch: function PEX_onEndUpdateBatch() {},
+ onClearHistory: function() {},
+ onVisit: function() {},
+ onTitleChanged: function() {},
+ onDeleteURI: function(aURI, aGUID, aReason) {
+ // Check this uri was not bookmarked.
+ do_check_eq(currentTest.bookmarks.indexOf(aURI.spec), -1);
+ do_check_valid_places_guid(aGUID);
+ do_check_eq(aReason, Ci.nsINavHistoryObserver.REASON_EXPIRED);
+ },
+ onPageChanged: function() {},
+ onDeleteVisits: function(aURI, aTime, aGUID, aReason) {
+ currentTest.receivedNotifications++;
+ do_check_guid_for_uri(aURI, aGUID);
+ do_check_eq(aReason, Ci.nsINavHistoryObserver.REASON_EXPIRED);
+ },
+ };
+ hs.addObserver(historyObserver, false);
+
+ // Expire now.
+ yield promiseForceExpirationStep(currentTest.limitExpiration);
+
+ hs.removeObserver(historyObserver, false);
+
+ do_check_eq(currentTest.receivedNotifications,
+ currentTest.expectedNotifications);
+
+ // Clean up.
+ yield PlacesUtils.bookmarks.eraseEverything();
+ yield PlacesTestUtils.clearHistory();
+ }
+
+ clearMaxPages();
+ yield PlacesUtils.bookmarks.eraseEverything();
+ yield PlacesTestUtils.clearHistory();
+});