commit 6854b83e2ef14ba08c409f5420b9e94419f9b0db
parent 04cf27582307a9c351e991c740828d54cf786b76
Author: James Teow <jteow@mozilla.com>
Date: Wed, 10 Dec 2025 17:26:53 +0000
Bug 1880021 - Simplify duplicate SearchEngine detection - r=Standard8
Differential Revision: https://phabricator.services.mozilla.com/D275016
Diffstat:
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/toolkit/components/search/OpenSearchEngine.sys.mjs b/toolkit/components/search/OpenSearchEngine.sys.mjs
@@ -196,12 +196,6 @@ export class OpenSearchEngine extends SearchEngine {
*/
#setEngineData(data, originAttributes) {
let name = data.name.trim();
- if (Services.search.getEngineByName(name)) {
- throw Components.Exception(
- "Found a duplicate engine",
- Ci.nsISearchService.ERROR_DUPLICATE_ENGINE
- );
- }
this._name = name;
this._queryCharset = data.queryCharset ?? "UTF-8";
diff --git a/toolkit/components/search/SearchService.sys.mjs b/toolkit/components/search/SearchService.sys.mjs
@@ -2671,7 +2671,7 @@ export class SearchService {
if (!skipDuplicateCheck && this.#getEngineByName(engine.name)) {
throw Components.Exception(
`#addEngineToStore: An engine called ${engine.name} already exists!`,
- Cr.NS_ERROR_FILE_ALREADY_EXISTS
+ Ci.nsISearchService.ERROR_DUPLICATE_ENGINE
);
}
diff --git a/toolkit/components/search/tests/xpcshell/test_userEngine.js b/toolkit/components/search/tests/xpcshell/test_userEngine.js
@@ -240,3 +240,19 @@ add_task(async function test_changeIcon() {
"The icon was re-scaled."
);
});
+
+add_task(async function test_duplicate_engine_error() {
+ let engineData = {
+ name: "Engine Name",
+ url: "https://example.com/search?q={searchTerms}",
+ };
+ let engine = await Services.search.addUserEngine(engineData);
+ Assert.ok(engine, "User engine should be added successfully.");
+ await Assert.rejects(
+ Services.search.addUserEngine(engineData),
+ ex => ex.result == Ci.nsISearchService.ERROR_DUPLICATE_ENGINE,
+ "Adding a user engine with a duplicate name should throw ERROR_DUPLICATE_ENGINE."
+ );
+
+ await Services.search.removeEngine(engine);
+});