/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; add_task(async function test_providers() { Assert.throws( () => UrlbarProvidersManager.registerProvider(), /invalid provider/, "Should throw with no arguments" ); Assert.throws( () => UrlbarProvidersManager.registerProvider({}), /invalid provider/, "Should throw with empty object" ); Assert.throws( () => UrlbarProvidersManager.registerProvider({ name: "", }), /invalid provider/, "Should throw with empty name" ); Assert.throws( () => UrlbarProvidersManager.registerProvider({ name: "test", startQuery: "no", }), /invalid provider/, "Should throw with invalid startQuery" ); Assert.throws( () => UrlbarProvidersManager.registerProvider({ name: "test", startQuery: () => {}, cancelQuery: "no", }), /invalid provider/, "Should throw with invalid cancelQuery" ); let match = new UrlbarResult( UrlbarUtils.RESULT_TYPE.TAB_SWITCH, UrlbarUtils.RESULT_SOURCE.TABS, { url: "http://mozilla.org/foo/" } ); let provider = registerBasicTestProvider([match]); let context = createContext(undefined, { providers: [provider.name] }); let controller = UrlbarTestUtils.newMockController(); let resultsPromise = promiseControllerNotification( controller, "onQueryResults" ); await UrlbarProvidersManager.startQuery(context, controller); // Sanity check that this doesn't throw. It should be a no-op since we await // for startQuery. UrlbarProvidersManager.cancelQuery(context); let params = await resultsPromise; Assert.deepEqual(params[0].results, [match]); }); add_task(async function test_criticalSection() { // Just a sanity check, this shouldn't throw. await UrlbarProvidersManager.runInCriticalSection(async () => { let db = await PlacesUtils.promiseLargeCacheDBConnection(); await db.execute(`PRAGMA page_cache`); }); });