Dactyloidae/toolkit/components/places/tests/browser/browser_bug248970.js

152 lines
5.2 KiB
JavaScript

/* 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/. */
// This test performs checks on the history testing area as outlined
// https://wiki.mozilla.org/Firefox3.1/PrivateBrowsing/TestPlan#History
// http://developer.mozilla.org/en/Using_the_Places_history_service
var visitedURIs = [
"http://www.test-link.com/",
"http://www.test-typed.com/",
"http://www.test-bookmark.com/",
"http://www.test-redirect-permanent.com/",
"http://www.test-redirect-temporary.com/",
"http://www.test-embed.com/",
"http://www.test-framed.com/",
"http://www.test-download.com/"
].map(NetUtil.newURI.bind(NetUtil));
add_task(function* () {
let windowsToClose = [];
let placeItemsCount = 0;
registerCleanupFunction(function() {
windowsToClose.forEach(function(win) {
win.close();
});
});
yield PlacesTestUtils.clearHistory();
// Ensure we wait for the default bookmarks import.
yield new Promise(resolve => {
waitForCondition(() => {
placeItemsCount = getPlacesItemsCount();
return placeItemsCount > 0
}, resolve, "Should have default bookmarks")
});
// Create a handful of history items with various visit types
yield PlacesTestUtils.addVisits([
{ uri: visitedURIs[0], transition: TRANSITION_LINK },
{ uri: visitedURIs[1], transition: TRANSITION_TYPED },
{ uri: visitedURIs[2], transition: TRANSITION_BOOKMARK },
{ uri: visitedURIs[3], transition: TRANSITION_REDIRECT_PERMANENT },
{ uri: visitedURIs[4], transition: TRANSITION_REDIRECT_TEMPORARY },
{ uri: visitedURIs[5], transition: TRANSITION_EMBED },
{ uri: visitedURIs[6], transition: TRANSITION_FRAMED_LINK },
{ uri: visitedURIs[7], transition: TRANSITION_DOWNLOAD }
]);
placeItemsCount += 7;
// We added 7 new items to history.
is(getPlacesItemsCount(), placeItemsCount,
"Check the total items count");
function* testOnWindow(aIsPrivate, aCount) {
let win = yield new Promise(resolve => {
whenNewWindowLoaded({ private: aIsPrivate }, resolve);
});
windowsToClose.push(win);
// History items should be retrievable by query
yield checkHistoryItems();
// Updates the place items count
let count = getPlacesItemsCount();
// Create Bookmark
let title = "title " + windowsToClose.length;
let keyword = "keyword " + windowsToClose.length;
let url = "http://test-a-" + windowsToClose.length + ".com/";
yield PlacesUtils.bookmarks.insert({ url, title,
parentGuid: PlacesUtils.bookmarks.menuGuid });
yield PlacesUtils.keywords.insert({ url, keyword });
count++;
ok((yield PlacesUtils.bookmarks.fetch({ url })),
"Bookmark should be bookmarked, data should be retrievable");
is(getPlacesItemsCount(), count,
"Check the new bookmark items count");
is(isBookmarkAltered(), false, "Check if bookmark has been visited");
}
// Test on windows.
yield testOnWindow(false);
yield testOnWindow(true);
yield testOnWindow(false);
});
/**
* Function performs a really simple query on our places entries,
* and makes sure that the number of entries equal num_places_entries.
*/
function getPlacesItemsCount() {
// Get bookmarks count
let options = PlacesUtils.history.getNewQueryOptions();
options.includeHidden = true;
options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS;
let root = PlacesUtils.history.executeQuery(
PlacesUtils.history.getNewQuery(), options).root;
root.containerOpen = true;
let cc = root.childCount;
root.containerOpen = false;
// Get history item count
options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY;
root = PlacesUtils.history.executeQuery(
PlacesUtils.history.getNewQuery(), options).root;
root.containerOpen = true;
cc += root.childCount;
root.containerOpen = false;
return cc;
}
function* checkHistoryItems() {
for (let i = 0; i < visitedURIs.length; i++) {
let visitedUri = visitedURIs[i];
ok((yield promiseIsURIVisited(visitedUri)), "");
if (/embed/.test(visitedUri.spec)) {
is((yield PlacesTestUtils.isPageInDB(visitedUri)), false, "Check if URI is in database");
} else {
ok((yield PlacesTestUtils.isPageInDB(visitedUri)), "Check if URI is in database");
}
}
}
/**
* Function attempts to check if Bookmark-A has been visited
* during private browsing mode, function should return false
*
* @returns false if the accessCount has not changed
* true if the accessCount has changed
*/
function isBookmarkAltered() {
let options = PlacesUtils.history.getNewQueryOptions();
options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS;
options.maxResults = 1; // should only expect a new bookmark
let query = PlacesUtils.history.getNewQuery();
query.setFolders([PlacesUtils.bookmarks.bookmarksMenuFolder], 1);
let root = PlacesUtils.history.executeQuery(query, options).root;
root.containerOpen = true;
is(root.childCount, options.maxResults, "Check new bookmarks results");
let node = root.getChild(0);
root.containerOpen = false;
return (node.accessCount != 0);
}