222 lines
5.6 KiB
JavaScript
222 lines
5.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
let extension;
|
|
let extensionPostData;
|
|
let oldRemoveEngineFunc;
|
|
|
|
add_setup(async function () {
|
|
SearchTestUtils.setRemoteSettingsConfig([{ identifier: "unused" }]);
|
|
|
|
await Services.search.init();
|
|
await promiseAfterSettings();
|
|
|
|
extension = await SearchTestUtils.installSearchExtension(
|
|
{},
|
|
{ skipUnload: true }
|
|
);
|
|
extensionPostData = await SearchTestUtils.installSearchExtension(
|
|
{
|
|
name: "PostData",
|
|
search_url_post_params: "?q={searchTerms}&post=1",
|
|
},
|
|
{ skipUnload: true }
|
|
);
|
|
await extension.awaitStartup();
|
|
await extensionPostData.awaitStartup();
|
|
|
|
// For these tests, stub-out the removeEngine function, so that when we
|
|
// remove it from the add-on manager, the engine is left in the search
|
|
// settings.
|
|
oldRemoveEngineFunc = Services.search.wrappedJSObject.removeEngine.bind(
|
|
Services.search.wrappedJSObject
|
|
);
|
|
Services.search.wrappedJSObject.removeEngine = () => {};
|
|
|
|
registerCleanupFunction(async () => {
|
|
await extensionPostData.unload();
|
|
});
|
|
});
|
|
|
|
add_task(async function test_valid_extensions_do_nothing() {
|
|
Services.fog.testResetFOG();
|
|
|
|
Assert.ok(
|
|
Services.search.getEngineByName("Example"),
|
|
"Should have installed the engine"
|
|
);
|
|
Assert.ok(
|
|
!!Services.search.getEngineByName("PostData"),
|
|
"Should have installed the PostData engine"
|
|
);
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let labels = ["1", "2", "4", "5", "6"];
|
|
for (let label of labels) {
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[label].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
null,
|
|
`Should not have recorded any issues for label ${label}`
|
|
);
|
|
}
|
|
});
|
|
|
|
add_task(async function test_different_name() {
|
|
Services.fog.testResetFOG();
|
|
|
|
let engine = Services.search.getEngineByName("Example");
|
|
|
|
engine.wrappedJSObject._name = "Example Test";
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extension.id
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
5,
|
|
"Should record an invalid web extension because the addon has a different name"
|
|
);
|
|
|
|
engine.wrappedJSObject._name = "Example";
|
|
});
|
|
|
|
add_task(async function test_different_url() {
|
|
Services.fog.testResetFOG();
|
|
|
|
let engine = Services.search.getEngineByName("Example");
|
|
|
|
engine.wrappedJSObject._urls = [];
|
|
engine.wrappedJSObject._setUrls({
|
|
search_url: "https://example.com/123",
|
|
search_url_get_params: "?q={searchTerms}",
|
|
});
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extension.id
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
6,
|
|
"Should record an invalid web extension because the addon has a different submission url"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_different_url_post_data() {
|
|
Services.fog.testResetFOG();
|
|
|
|
let engine = Services.search.getEngineByName("PostData");
|
|
|
|
engine.wrappedJSObject._urls = [];
|
|
engine.wrappedJSObject._setUrls({
|
|
search_url: "https://example.com/123",
|
|
search_url_post_params: "?q={searchTerms}",
|
|
});
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extensionPostData.id
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
6,
|
|
"Should record an invalid web extension because the addon has different url POST data"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_extension_no_longer_specifies_engine() {
|
|
Services.fog.testResetFOG();
|
|
|
|
let extensionInfo = {
|
|
useAddonManager: "permanent",
|
|
manifest: {
|
|
version: "2.0",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "example@tests.mozilla.org",
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
await extension.upgrade(extensionInfo);
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extension.id
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
4,
|
|
"Should record an invalid web extension because the search engine is no longer specified"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_disabled_extension() {
|
|
// We don't reset Glean across tasks this time, ensuring the metric gets set
|
|
// to the new value, rather than added.
|
|
|
|
// Disable the extension, this won't remove the search engine because we've
|
|
// stubbed removeEngine.
|
|
await extension.addon.disable();
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extension.id
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
2,
|
|
"Should record an invalid web extension because the addon is disabled"
|
|
);
|
|
|
|
extension.addon.enable();
|
|
await extension.awaitStartup();
|
|
});
|
|
|
|
add_task(async function test_missing_extension() {
|
|
// We don't reset Glean across tasks this time, ensuring the metric gets set
|
|
// to the new value, rather than added.
|
|
|
|
let extensionId = extension.id;
|
|
// Remove the extension, this won't remove the search engine because we've
|
|
// stubbed removeEngine.
|
|
await extension.unload();
|
|
|
|
await Services.search.runBackgroundChecks();
|
|
|
|
let recordedQuantity =
|
|
Glean.browserSearchinit.engineInvalidWebextension[
|
|
extensionId
|
|
].testGetValue();
|
|
|
|
Assert.equal(
|
|
recordedQuantity,
|
|
1,
|
|
"Should record an invalid web extension because the addon is no longer installed"
|
|
);
|
|
|
|
await oldRemoveEngineFunc(Services.search.getEngineByName("Example"));
|
|
});
|