gecko/toolkit/components/places/tests/unit/test_isURIVisited.js

96 lines
2.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// Tests functionality of the isURIVisited API.
const SCHEMES = {
"http://": true,
"https://": true,
"ftp://": true,
"file:///": true,
"about:": false,
// nsIIOService.newURI() can throw if e.g. the app knows about imap://
// but the account is not set up and so the URL is invalid for it.
// "imap://": false,
"news://": false,
"mailbox:": false,
"moz-anno:favicon:http://": false,
"view-source:http://": false,
"chrome://browser/content/browser.xul?": false,
"resource://": false,
"data:,": false,
"wyciwyg:/0/http://": false,
"javascript:": false,
};
const TRANSITIONS = [
TRANSITION_LINK,
TRANSITION_TYPED,
TRANSITION_BOOKMARK,
TRANSITION_EMBED,
TRANSITION_FRAMED_LINK,
TRANSITION_REDIRECT_PERMANENT,
TRANSITION_REDIRECT_TEMPORARY,
TRANSITION_DOWNLOAD,
];
let gRunner;
function run_test()
{
do_test_pending();
gRunner = step();
gRunner.next();
}
function step()
{
let history = Cc["@mozilla.org/browser/history;1"]
.getService(Ci.mozIAsyncHistory);
for (let scheme in SCHEMES) {
do_log_info("Testing scheme " + scheme);
for (let i = 0; i < TRANSITIONS.length; i++) {
let transition = TRANSITIONS[i];
do_log_info("With transition " + transition);
let uri = NetUtil.newURI(scheme + "mozilla.org/");
history.isURIVisited(uri, function(aURI, aIsVisited) {
do_check_true(uri.equals(aURI));
do_check_false(aIsVisited);
let callback = {
handleError: function () {},
handleResult: function () {},
handleCompletion: function () {
do_log_info("Added visit to " + uri.spec);
history.isURIVisited(uri, function (aURI, aIsVisited) {
do_check_true(uri.equals(aURI));
let checker = SCHEMES[scheme] ? do_check_true : do_check_false;
checker(aIsVisited);
waitForClearHistory(function () {
history.isURIVisited(uri, function(aURI, aIsVisited) {
do_check_true(uri.equals(aURI));
do_check_false(aIsVisited);
gRunner.next();
});
});
});
},
};
history.updatePlaces({ uri: uri
, visits: [ { transitionType: transition
, visitDate: Date.now() * 1000
} ]
}, callback);
});
yield;
}
}
do_test_finished();
}