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