Commits:
-
b17d862b
by Pier Angelo Vendrame at 2025-09-23T11:34:13+02:00
dropme! TB 42891: Set the bundled search engine for Tor Browser.
Temporarily restore the Base Browser search engine configuration for
running tests on it.
-
b1f4f5aa
by Pier Angelo Vendrame at 2025-09-23T11:34:16+02:00
fixup! BB 43525: Skip Remote Settings for search engine customization.
BB 44153: Add tests.
-
030d4788
by Pier Angelo Vendrame at 2025-09-23T11:34:17+02:00
fixup! BB 40925: Implemented the Security Level component
BB 44153: Add search engine customization tests.
-
cb434512
by Pier Angelo Vendrame at 2025-09-23T11:34:18+02:00
fixup! TB 42891: Set the bundled search engine for Tor Browser.
BB 44153: Add search engine customization tests.
-
2901ed30
by Pier Angelo Vendrame at 2025-09-23T11:34:19+02:00
fixup! BB 31740: Remove some unnecessary RemoteSettings instances
BB 44153: Add search engine customization tests.
Change where we ignore upstream's block lists as the previous mechanism
made tests timeout.
5 changed files:
Changes:
toolkit/components/search/SearchService.sys.mjs
| ... |
... |
@@ -4,6 +4,7 @@ |
|
4
|
4
|
|
|
5
|
5
|
/* eslint no-shadow: error, mozilla/no-aArgs: error */
|
|
6
|
6
|
|
|
|
7
|
+import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
|
|
7
|
8
|
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
|
8
|
9
|
|
|
9
|
10
|
const lazy = {};
|
| ... |
... |
@@ -1426,6 +1427,10 @@ export class SearchService { |
|
1426
|
1427
|
// start listening straight away.
|
|
1427
|
1428
|
Services.obs.addObserver(this, lazy.Region.REGION_TOPIC);
|
|
1428
|
1429
|
|
|
|
1430
|
+ this.#getIgnoreListAndSubscribe().catch(ex =>
|
|
|
1431
|
+ console.error(ex, "Search Service could not get the ignore list.")
|
|
|
1432
|
+ );
|
|
|
1433
|
+
|
|
1429
|
1434
|
this.#engineSelector = new lazy.SearchEngineSelector(
|
|
1430
|
1435
|
this.#handleConfigurationUpdated.bind(this)
|
|
1431
|
1436
|
);
|
| ... |
... |
@@ -1568,7 +1573,6 @@ export class SearchService { |
|
1568
|
1573
|
* handled via a sync listener.
|
|
1569
|
1574
|
*
|
|
1570
|
1575
|
*/
|
|
1571
|
|
- // eslint-disable-next-line no-unused-private-class-members
|
|
1572
|
1576
|
async #getIgnoreListAndSubscribe() {
|
|
1573
|
1577
|
let listener = this.#handleIgnoreListUpdated.bind(this);
|
|
1574
|
1578
|
const current = await lazy.IgnoreLists.getAndSubscribe(listener);
|
| ... |
... |
@@ -1593,6 +1597,10 @@ export class SearchService { |
|
1593
|
1597
|
* The event in the format received from RemoteSettings.
|
|
1594
|
1598
|
*/
|
|
1595
|
1599
|
async #handleIgnoreListUpdated(eventData) {
|
|
|
1600
|
+ if (AppConstants.BASE_BROWSER_VERSION) {
|
|
|
1601
|
+ return;
|
|
|
1602
|
+ }
|
|
|
1603
|
+
|
|
1596
|
1604
|
lazy.logConsole.debug("#handleIgnoreListUpdated");
|
|
1597
|
1605
|
const {
|
|
1598
|
1606
|
data: { current },
|
toolkit/components/search/content/base-browser-search-engines.json
| ... |
... |
@@ -37,7 +37,7 @@ |
|
37
|
37
|
},
|
|
38
|
38
|
{
|
|
39
|
39
|
"base": {
|
|
40
|
|
- "aliases": ["startpage"],
|
|
|
40
|
+ "aliases": ["startpage", "sp"],
|
|
41
|
41
|
"classification": "general",
|
|
42
|
42
|
"name": "Startpage",
|
|
43
|
43
|
"urls": {
|
toolkit/components/search/tests/xpcshell/test_base_browser.js
|
|
1
|
+/* Any copyright is dedicated to the Public Domain.
|
|
|
2
|
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
3
|
+
|
|
|
4
|
+/**
|
|
|
5
|
+ * This tests the SearchService to check our override of the remote settings is
|
|
|
6
|
+ * working as expected.
|
|
|
7
|
+ */
|
|
|
8
|
+
|
|
|
9
|
+"use strict";
|
|
|
10
|
+
|
|
|
11
|
+const expectedURLs = {
|
|
|
12
|
+ ddg: "https://duckduckgo.com/?q=test",
|
|
|
13
|
+ "ddg-onion":
|
|
|
14
|
+ "https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/?q=test",
|
|
|
15
|
+ startpage: "https://www.startpage.com/sp/search?q=test",
|
|
|
16
|
+ "startpage-onion":
|
|
|
17
|
+ "http://startpagel6srwcjlue4zgq3zevrujfaow726kjytqbbjyrswwmjzcqd.onion/sp/search?q=test",
|
|
|
18
|
+ wikipedia: "https://en.wikipedia.org/wiki/Special:Search?search=test",
|
|
|
19
|
+};
|
|
|
20
|
+const defaultEngine = "ddg";
|
|
|
21
|
+
|
|
|
22
|
+add_setup(async function setup() {
|
|
|
23
|
+ await Services.search.init();
|
|
|
24
|
+});
|
|
|
25
|
+
|
|
|
26
|
+add_task(async function test_listEngines() {
|
|
|
27
|
+ const { engines } =
|
|
|
28
|
+ await Services.search.wrappedJSObject._fetchEngineSelectorEngines();
|
|
|
29
|
+ const foundIdentifiers = engines.map(e => e.identifier);
|
|
|
30
|
+ Assert.deepEqual(foundIdentifiers, Object.keys(expectedURLs));
|
|
|
31
|
+});
|
|
|
32
|
+
|
|
|
33
|
+add_task(async function test_default() {
|
|
|
34
|
+ Assert.equal(
|
|
|
35
|
+ (await Services.search.getDefault()).id,
|
|
|
36
|
+ defaultEngine,
|
|
|
37
|
+ `${defaultEngine} is our default search engine in normal mode.`
|
|
|
38
|
+ );
|
|
|
39
|
+ Assert.equal(
|
|
|
40
|
+ (await Services.search.getDefaultPrivate()).id,
|
|
|
41
|
+ defaultEngine,
|
|
|
42
|
+ `${defaultEngine} is our default search engine in PBM.`
|
|
|
43
|
+ );
|
|
|
44
|
+});
|
|
|
45
|
+
|
|
|
46
|
+add_task(function test_checkSearchURLs() {
|
|
|
47
|
+ for (const [id, url] of Object.entries(expectedURLs)) {
|
|
|
48
|
+ const engine = Services.search.getEngineById(id);
|
|
|
49
|
+ const foundUrl = engine.getSubmission("test").uri.spec;
|
|
|
50
|
+ Assert.equal(foundUrl, url, `The URL of ${engine.name} is not altered.`);
|
|
|
51
|
+ }
|
|
|
52
|
+}); |
toolkit/components/search/tests/xpcshell/test_security_level.js
|
|
1
|
+/* Any copyright is dedicated to the Public Domain.
|
|
|
2
|
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
3
|
+
|
|
|
4
|
+/**
|
|
|
5
|
+ * This tests that we use the HTML version of DuckDuckGo when in the safest
|
|
|
6
|
+ * security level.
|
|
|
7
|
+ */
|
|
|
8
|
+
|
|
|
9
|
+"use strict";
|
|
|
10
|
+
|
|
|
11
|
+const expectedURLs = {
|
|
|
12
|
+ ddg: "https://html.duckduckgo.com/html?q=test",
|
|
|
13
|
+ "ddg-onion":
|
|
|
14
|
+ "https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/html?q=test",
|
|
|
15
|
+};
|
|
|
16
|
+
|
|
|
17
|
+add_task(async function test_securityLevel() {
|
|
|
18
|
+ await Services.search.init();
|
|
|
19
|
+ for (const [id, url] of Object.entries(expectedURLs)) {
|
|
|
20
|
+ const engine = Services.search.getEngineById(id);
|
|
|
21
|
+ const foundUrl = engine.getSubmission("test").uri.spec;
|
|
|
22
|
+ Assert.equal(foundUrl, url, `${engine.name} is in HTML mode.`);
|
|
|
23
|
+ }
|
|
|
24
|
+}); |
toolkit/components/search/tests/xpcshell/xpcshell.toml
| ... |
... |
@@ -38,6 +38,8 @@ tags = "remote-settings" |
|
38
|
38
|
|
|
39
|
39
|
["test_async.js"]
|
|
40
|
40
|
|
|
|
41
|
+["test_base_browser.js"]
|
|
|
42
|
+
|
|
41
|
43
|
["test_configExpansion.js"]
|
|
42
|
44
|
support-files = [
|
|
43
|
45
|
"../../schema/search-config-v2-schema.json",
|
| ... |
... |
@@ -199,6 +201,9 @@ support-files = [ |
|
199
|
201
|
|
|
200
|
202
|
["test_searchUrlDomain.js"]
|
|
201
|
203
|
|
|
|
204
|
+["test_security_level.js"]
|
|
|
205
|
+prefs = ["browser.security_level.security_slider=1"]
|
|
|
206
|
+
|
|
202
|
207
|
["test_selectedEngine.js"]
|
|
203
|
208
|
|
|
204
|
209
|
["test_sendSubmissionURL.js"]
|
|