[tor-commits] [Git][tpo/applications/tor-browser][base-browser-115.2.0esr-13.0-1] 2 commits: Revert "Bug 42022: Prevent extension search engines from breaking the whole search system"

Pier Angelo Vendrame (@pierov) git at gitlab.torproject.org
Tue Sep 12 13:02:19 UTC 2023



Pier Angelo Vendrame pushed to branch base-browser-115.2.0esr-13.0-1 at The Tor Project / Applications / Tor Browser


Commits:
a4d48a95 by Pier Angelo Vendrame at 2023-09-12T15:02:03+02:00
Revert "Bug 42022: Prevent extension search engines from breaking the whole search system"

This reverts commit 9d7a9a7969394bc9503cc22ad9324666ca72cecc.

- - - - -
92026016 by Pier Angelo Vendrame at 2023-09-12T15:02:04+02:00
Bug 1849129: Prevent exceptions caused by extensions from interrupting the SearchService initialization. r=search-reviewers,Standard8

Differential Revision: https://phabricator.services.mozilla.com/D186456
- - - - -


3 changed files:

- toolkit/components/search/SearchService.sys.mjs
- + toolkit/components/search/tests/xpcshell/test_webextensions_startup_duplicate.js
- toolkit/components/search/tests/xpcshell/xpcshell.ini


Changes:

=====================================
toolkit/components/search/SearchService.sys.mjs
=====================================
@@ -1574,11 +1574,18 @@ export class SearchService {
       "engines reported by AddonManager startup"
     );
     for (let extension of this.#startupExtensions) {
-      await this.#installExtensionEngine(
-        extension,
-        [lazy.SearchUtils.DEFAULT_TAG],
-        true
-      );
+      try {
+        await this.#installExtensionEngine(
+          extension,
+          [lazy.SearchUtils.DEFAULT_TAG],
+          true
+        );
+      } catch (ex) {
+        lazy.logConsole.error(
+          `#installExtensionEngine failed for ${extension.id}`,
+          ex
+        );
+      }
     }
     this.#startupExtensions.clear();
 
@@ -2715,7 +2722,6 @@ export class SearchService {
     };
 
     let engines = [];
-    let revert = false;
     for (let locale of locales) {
       lazy.logConsole.debug(
         "addEnginesFromExtension: installing:",
@@ -2723,28 +2729,7 @@ export class SearchService {
         ":",
         locale
       );
-      try {
-        engines.push(await installLocale(locale));
-      } catch (err) {
-        lazy.logConsole.error(
-          `Could not install the search engine of ${extension.id}`,
-          err
-        );
-        revert = true;
-        break;
-      }
-    }
-    if (revert) {
-      for (let engine of engines) {
-        try {
-          this.removeEngine(engine);
-        } catch (err) {
-          lazy.logConsole.warn(
-            "Failed to revert the addition of a search engine",
-            err
-          );
-        }
-      }
+      engines.push(await installLocale(locale));
     }
     return engines;
   }


=====================================
toolkit/components/search/tests/xpcshell/test_webextensions_startup_duplicate.js
=====================================
@@ -0,0 +1,59 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const lazy = {};
+
+const { promiseShutdownManager, promiseStartupManager } = AddonTestUtils;
+
+ChromeUtils.defineESModuleGetters(lazy, {
+  ExtensionTestUtils:
+    "resource://testing-common/ExtensionXPCShellUtils.sys.mjs",
+});
+
+add_setup(async function () {
+  let server = useHttpServer();
+  server.registerContentType("sjs", "sjs");
+  await SearchTestUtils.useTestEngines("test-extensions");
+  await promiseStartupManager();
+
+  registerCleanupFunction(async () => {
+    await promiseShutdownManager();
+  });
+});
+
+add_task(async function test_install_duplicate_engine_startup() {
+  let name = "Plain";
+  let id = "plain at tests.mozilla.org";
+  consoleAllowList.push(
+    `#installExtensionEngine failed for ${id}`,
+    `An engine called ${name} already exists`
+  );
+  // 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,
+      search_url: "https://example.com/plain",
+    }),
+  };
+
+  let extension = lazy.ExtensionTestUtils.loadExtension(extensionInfo);
+  await extension.startup();
+
+  await Services.search.init();
+
+  await AddonTestUtils.waitForSearchProviderStartup(extension);
+  let engine = await Services.search.getEngineByName(name);
+  let submission = engine.getSubmission("foo");
+  Assert.equal(
+    submission.uri.spec,
+    "https://duckduckgo.com/?q=foo&t=ffsb",
+    "Should have not changed the app provided engine."
+  );
+
+  await extension.unload();
+});


=====================================
toolkit/components/search/tests/xpcshell/xpcshell.ini
=====================================
@@ -191,6 +191,7 @@ support-files = data/search_ignorelist.json
 [test_webextensions_migrate_to.js]
 support-files = data/search-migration.json
 [test_webextensions_normandy_upgrade.js]
+[test_webextensions_startup_duplicate.js]
 [test_webextensions_startup_remove.js]
 [test_webextensions_upgrade.js]
 [test_webextensions_valid.js]



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/44ffc800c98607bf7652b1e56f765e925b47f9dd...920260162c614477f80fce6d0bfe96830a3ebc51

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/44ffc800c98607bf7652b1e56f765e925b47f9dd...920260162c614477f80fce6d0bfe96830a3ebc51
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20230912/230ecaca/attachment-0001.htm>


More information about the tor-commits mailing list