106 lines
3.2 KiB
JavaScript
106 lines
3.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests to ensure that WebExtensions correctly load on startup without errors.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
ExtensionTestUtils:
|
|
"resource://testing-common/ExtensionXPCShellUtils.sys.mjs",
|
|
});
|
|
|
|
let extension;
|
|
|
|
add_setup(async function () {
|
|
let server = useHttpServer();
|
|
server.registerContentType("sjs", "sjs");
|
|
|
|
SearchTestUtils.setRemoteSettingsConfig([{ identifier: "unused" }]);
|
|
await SearchTestUtils.initXPCShellAddonManager();
|
|
});
|
|
|
|
add_task(async function test_startup_with_new_addon() {
|
|
// Although rare, handling loading an add-on on startup should work.
|
|
// Additionally, this sub-test allows us to pre-fill the search settings
|
|
// for the subsequent tests.
|
|
|
|
// Do not use SearchTestUtils.installSearchExtension, as we need to manually
|
|
// start the search service after installing the extension.
|
|
let extensionInfo = {
|
|
useAddonManager: "permanent",
|
|
files: {},
|
|
manifest: SearchTestUtils.createEngineManifest({
|
|
name: "startup",
|
|
search_url: "https://example.com/",
|
|
}),
|
|
};
|
|
|
|
extension = lazy.ExtensionTestUtils.loadExtension(extensionInfo);
|
|
await extension.startup();
|
|
|
|
let settingsWritten = promiseAfterSettings();
|
|
await Services.search.init();
|
|
|
|
await AddonTestUtils.waitForSearchProviderStartup(extension);
|
|
await settingsWritten;
|
|
|
|
let engine = await Services.search.getEngineByName("startup");
|
|
Assert.ok(engine, "Should have loaded the engine");
|
|
let submission = engine.getSubmission("foo");
|
|
Assert.equal(
|
|
submission.uri.spec,
|
|
"https://example.com/?q=foo",
|
|
"Should have the expected search url."
|
|
);
|
|
});
|
|
|
|
add_task(async function test_startup_with_existing_addon_from_settings() {
|
|
Services.search.wrappedJSObject.reset();
|
|
|
|
let settingsWritten = promiseAfterSettings();
|
|
await Services.search.init();
|
|
await settingsWritten;
|
|
|
|
let engine = await Services.search.getEngineByName("startup");
|
|
Assert.ok(engine, "Should have loaded the engine");
|
|
let submission = engine.getSubmission("foo");
|
|
Assert.equal(
|
|
submission.uri.spec,
|
|
"https://example.com/?q=foo",
|
|
"Should have the expected search url."
|
|
);
|
|
});
|
|
|
|
add_task(
|
|
async function test_startup_with_existing_addon_with_startup_notification() {
|
|
// Checks that we correctly load the add-on on startup when we are notified
|
|
// about it from the add-on manager before search has initialised. Also
|
|
// ensures that we don't raise an error when loading it from settings
|
|
// when the add-on is already there. The console check is handled by
|
|
// TestUtils.listenForConsoleMessages() in head_search.js.
|
|
|
|
Services.search.wrappedJSObject.reset();
|
|
|
|
await Services.search.addEnginesFromExtension(extension.extension);
|
|
|
|
let settingsWritten = promiseAfterSettings();
|
|
await Services.search.init();
|
|
await settingsWritten;
|
|
|
|
let engine = await Services.search.getEngineByName("startup");
|
|
Assert.ok(engine, "Should have loaded the engine");
|
|
let submission = engine.getSubmission("foo");
|
|
Assert.equal(
|
|
submission.uri.spec,
|
|
"https://example.com/?q=foo",
|
|
"Should have the expected search url."
|
|
);
|
|
|
|
await extension.unload();
|
|
}
|
|
);
|