michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: Cu.import("resource://gre/modules/PriorityUrlProvider.jsm"); michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_task(function* search_engine_match() { michael@0: let engine = yield promiseDefaultSearchEngine(); michael@0: let token = engine.getResultDomain(); michael@0: let match = yield PriorityUrlProvider.getMatch(token.substr(0, 1)); michael@0: do_check_eq(match.url, engine.searchForm); michael@0: do_check_eq(match.title, engine.name); michael@0: do_check_eq(match.iconUrl, engine.iconURI ? engine.iconURI.spec : null); michael@0: do_check_eq(match.reason, "search"); michael@0: }); michael@0: michael@0: add_task(function* no_match() { michael@0: do_check_eq(null, yield PriorityUrlProvider.getMatch("test")); michael@0: }); michael@0: michael@0: add_task(function* hide_search_engine_nomatch() { michael@0: let engine = yield promiseDefaultSearchEngine(); michael@0: let token = engine.getResultDomain(); michael@0: let promiseTopic = promiseSearchTopic("engine-changed"); michael@0: Services.search.removeEngine(engine); michael@0: yield promiseTopic; michael@0: do_check_true(engine.hidden); michael@0: do_check_eq(null, yield PriorityUrlProvider.getMatch(token.substr(0, 1))); michael@0: }); michael@0: michael@0: add_task(function* add_search_engine_match() { michael@0: let promiseTopic = promiseSearchTopic("engine-added"); michael@0: do_check_eq(null, yield PriorityUrlProvider.getMatch("bacon")); michael@0: Services.search.addEngineWithDetails("bacon", "", "bacon", "Search Bacon", michael@0: "GET", "http://www.bacon.moz/?search={searchTerms}"); michael@0: yield promiseSearchTopic; michael@0: let match = yield PriorityUrlProvider.getMatch("bacon"); michael@0: do_check_eq(match.url, "http://www.bacon.moz"); michael@0: do_check_eq(match.title, "bacon"); michael@0: do_check_eq(match.iconUrl, null); michael@0: do_check_eq(match.reason, "search"); michael@0: }); michael@0: michael@0: add_task(function* remove_search_engine_nomatch() { michael@0: let engine = Services.search.getEngineByName("bacon"); michael@0: let promiseTopic = promiseSearchTopic("engine-removed"); michael@0: Services.search.removeEngine(engine); michael@0: yield promiseTopic; michael@0: do_check_eq(null, yield PriorityUrlProvider.getMatch("bacon")); michael@0: }); michael@0: michael@0: function promiseDefaultSearchEngine() { michael@0: let deferred = Promise.defer(); michael@0: Services.search.init( () => { michael@0: deferred.resolve(Services.search.defaultEngine); michael@0: }); michael@0: return deferred.promise; michael@0: } michael@0: michael@0: function promiseSearchTopic(expectedVerb) { michael@0: let deferred = Promise.defer(); michael@0: Services.obs.addObserver( function observe(subject, topic, verb) { michael@0: do_log_info("browser-search-engine-modified: " + verb); michael@0: if (verb == expectedVerb) { michael@0: Services.obs.removeObserver(observe, "browser-search-engine-modified"); michael@0: deferred.resolve(); michael@0: } michael@0: }, "browser-search-engine-modified", false); michael@0: return deferred.promise; michael@0: }