Commits:
-
71a835d4
by Pier Angelo Vendrame at 2025-11-24T16:42:17+01:00
fixup! BB 43140: Tighten up fonts on Linux.
BB 44315: Fix the fonts on the updater.
-
2e8e285c
by Pier Angelo Vendrame at 2025-11-24T16:44:40+01:00
fixup! BB 43525: Skip Remote Settings for search engine customization.
MB 483: Ship DDG without AI as a bundled search engine.
MB 487: Use custom order for search engines.
-
77434824
by Pier Angelo Vendrame at 2025-11-24T16:47:37+01:00
fixup! MB 213: Customize the search engines list.
MB 487: Use custom order for search engines.
-
4e498e75
by Beatriz Rizental at 2025-11-24T16:47:37+01:00
fixup! Tweaks to the build system
Skip downloading WPT artifacts when generating test artifacts.
-
e9ded521
by Henry Wilkes at 2025-11-24T16:47:38+01:00
fixup! MB 39: Add home page about:mullvad-browser
MB 486: Delay the update data for preloaded about:mullvad-browser pages.
-
d4f44eea
by Henry Wilkes at 2025-11-24T16:47:59+01:00
fixup! MB 213: Customize the search engines list.
MB 488: Drop Mullvad Leta search engine.
-
ba68b6de
by Henry Wilkes at 2025-11-24T16:50:04+01:00
MB 488: Adjust search engine removal notification for Mullvad Leta.
-
157bb4f4
by Pier Angelo Vendrame at 2025-11-24T17:36:30+01:00
fixup! BB 43615: Add Gitlab Issue and Merge Request templates
Update GitLab templates.
Avoid mentioning existing issues/MRs, and update the channels.
14 changed files:
Changes:
.gitlab/issue_templates/040 Feature.md
| ... |
... |
@@ -18,11 +18,11 @@ Provide an overview of the technical/implementation aspects of this feature |
|
18
|
18
|
|
|
19
|
19
|
### Proposal
|
|
20
|
20
|
<!-- Add links to associated proposal issues (or delete block) -->
|
|
21
|
|
-- mullvad-browser#123
|
|
|
21
|
+- mullvad-browser#xyz
|
|
22
|
22
|
|
|
23
|
23
|
### Design
|
|
24
|
24
|
<!-- Add links to associated design issues (or delete block) -->
|
|
25
|
|
-- tpo/UX/Design#123
|
|
|
25
|
+- tpo/UX/Design#xyz
|
|
26
|
26
|
|
|
27
|
27
|
<!-- Do not edit beneath this line <3 -->
|
|
28
|
28
|
|
.gitlab/issue_templates/050 Backport.md
| ... |
... |
@@ -13,12 +13,12 @@ please ensure the title has the following format: |
|
13
|
13
|
## Bookkeeping
|
|
14
|
14
|
|
|
15
|
15
|
### Issue(s)
|
|
16
|
|
-- tor-browser#12345
|
|
17
|
|
-- mullvad-browser#123
|
|
18
|
|
-- https://bugzilla.mozilla.org/show_bug.cgi?id=1234567
|
|
|
16
|
+- tor-browser#xxxxx
|
|
|
17
|
+- mullvad-browser#xyz
|
|
|
18
|
+- https://bugzilla.mozilla.org/show_bug.cgi?id=xxxxxxx
|
|
19
|
19
|
|
|
20
|
20
|
### Merge Request(s)
|
|
21
|
|
-- tor-browser!123
|
|
|
21
|
+- tor-browser!xxxx
|
|
22
|
22
|
|
|
23
|
23
|
### Target Channels
|
|
24
|
24
|
|
.gitlab/merge_request_templates/Default.md
| ... |
... |
@@ -27,8 +27,8 @@ |
|
27
|
27
|
|
|
28
|
28
|
#### Target Channels
|
|
29
|
29
|
|
|
30
|
|
-- [ ] **Alpha**: esr140-15.0
|
|
31
|
|
-- [ ] **Stable**: esr128-14.5
|
|
|
30
|
+- [ ] **Alpha**: rapid release, 16.0
|
|
|
31
|
+- [ ] **Stable**: esr140-15.0
|
|
32
|
32
|
|
|
33
|
33
|
### Backporting
|
|
34
|
34
|
|
browser/components/mullvad-browser/AboutMullvadBrowserChild.sys.mjs
| ... |
... |
@@ -5,13 +5,34 @@ export class AboutMullvadBrowserChild extends JSWindowActorChild { |
|
5
|
5
|
handleEvent(event) {
|
|
6
|
6
|
switch (event.type) {
|
|
7
|
7
|
case "DOMContentLoaded":
|
|
8
|
|
- this.sendQuery("AboutMullvadBrowser:GetUpdateData").then(data => {
|
|
9
|
|
- const updateEvent = new this.contentWindow.CustomEvent("UpdateData", {
|
|
10
|
|
- detail: Cu.cloneInto(data, this.contentWindow),
|
|
11
|
|
- });
|
|
12
|
|
- this.contentWindow.dispatchEvent(updateEvent);
|
|
|
8
|
+ this.sendQuery("AboutMullvadBrowser:GetUpdateData").then(response => {
|
|
|
9
|
+ if (response.delayed) {
|
|
|
10
|
+ // Wait for DelayedUpdateData.
|
|
|
11
|
+ return;
|
|
|
12
|
+ }
|
|
|
13
|
+ this.#dispatchUpdateData(response.updateData);
|
|
13
|
14
|
});
|
|
14
|
15
|
break;
|
|
15
|
16
|
}
|
|
16
|
17
|
}
|
|
|
18
|
+
|
|
|
19
|
+ receiveMessage(message) {
|
|
|
20
|
+ switch (message.name) {
|
|
|
21
|
+ case "AboutMullvadBrowser:DelayedUpdateData":
|
|
|
22
|
+ this.#dispatchUpdateData(message.data);
|
|
|
23
|
+ break;
|
|
|
24
|
+ }
|
|
|
25
|
+ }
|
|
|
26
|
+
|
|
|
27
|
+ /**
|
|
|
28
|
+ * Send the update data to the page.
|
|
|
29
|
+ *
|
|
|
30
|
+ * @param {object} data - The data to send.
|
|
|
31
|
+ */
|
|
|
32
|
+ #dispatchUpdateData(data) {
|
|
|
33
|
+ const updateEvent = new this.contentWindow.CustomEvent("UpdateData", {
|
|
|
34
|
+ detail: Cu.cloneInto(data, this.contentWindow),
|
|
|
35
|
+ });
|
|
|
36
|
+ this.contentWindow.dispatchEvent(updateEvent);
|
|
|
37
|
+ }
|
|
17
|
38
|
} |
browser/components/mullvad-browser/AboutMullvadBrowserParent.sys.mjs
| ... |
... |
@@ -2,30 +2,73 @@ |
|
2
|
2
|
* Actor parent class for the about:mullvad-browser page.
|
|
3
|
3
|
*/
|
|
4
|
4
|
export class AboutMullvadBrowserParent extends JSWindowActorParent {
|
|
5
|
|
- receiveMessage(message) {
|
|
|
5
|
+ /**
|
|
|
6
|
+ * Whether this instance has a preloaded browser.
|
|
|
7
|
+ *
|
|
|
8
|
+ * @type {boolean}
|
|
|
9
|
+ */
|
|
|
10
|
+ #preloaded = false;
|
|
|
11
|
+
|
|
|
12
|
+ /**
|
|
|
13
|
+ * Method to be called when the browser corresponding to this actor has its
|
|
|
14
|
+ * preloadedState attribute removed.
|
|
|
15
|
+ */
|
|
|
16
|
+ preloadedRemoved() {
|
|
|
17
|
+ if (!this.#preloaded) {
|
|
|
18
|
+ return;
|
|
|
19
|
+ }
|
|
|
20
|
+ this.#preloaded = false;
|
|
|
21
|
+ // Send in the initial data now that the page is actually going to be
|
|
|
22
|
+ // visible.
|
|
|
23
|
+ this.sendAsyncMessage(
|
|
|
24
|
+ "AboutMullvadBrowser:DelayedUpdateData",
|
|
|
25
|
+ this.#getUpdateData()
|
|
|
26
|
+ );
|
|
|
27
|
+ }
|
|
|
28
|
+
|
|
|
29
|
+ /**
|
|
|
30
|
+ * Get the update data for the page.
|
|
|
31
|
+ *
|
|
|
32
|
+ * @returns {object?} - The update data, or `null` if no update should be
|
|
|
33
|
+ * shown.
|
|
|
34
|
+ */
|
|
|
35
|
+ #getUpdateData() {
|
|
6
|
36
|
const shouldNotifyPref = "mullvadbrowser.post_update.shouldNotify";
|
|
|
37
|
+ if (!Services.prefs.getBoolPref(shouldNotifyPref, false)) {
|
|
|
38
|
+ return null;
|
|
|
39
|
+ }
|
|
|
40
|
+ Services.prefs.clearUserPref(shouldNotifyPref);
|
|
|
41
|
+ // Try use the same URL as the about dialog. See mullvad-browser#411.
|
|
|
42
|
+ let updateURL = Services.urlFormatter.formatURLPref(
|
|
|
43
|
+ "app.releaseNotesURL.aboutDialog"
|
|
|
44
|
+ );
|
|
|
45
|
+ if (updateURL === "about:blank") {
|
|
|
46
|
+ updateURL = Services.urlFormatter.formatURLPref(
|
|
|
47
|
+ "startup.homepage_override_url"
|
|
|
48
|
+ );
|
|
|
49
|
+ }
|
|
|
50
|
+
|
|
|
51
|
+ return {
|
|
|
52
|
+ version: Services.prefs.getCharPref(
|
|
|
53
|
+ "browser.startup.homepage_override.mullvadbrowser.version"
|
|
|
54
|
+ ),
|
|
|
55
|
+ url: updateURL,
|
|
|
56
|
+ };
|
|
|
57
|
+ }
|
|
|
58
|
+
|
|
|
59
|
+ receiveMessage(message) {
|
|
7
|
60
|
switch (message.name) {
|
|
8
|
61
|
case "AboutMullvadBrowser:GetUpdateData": {
|
|
9
|
|
- if (!Services.prefs.getBoolPref(shouldNotifyPref, false)) {
|
|
10
|
|
- return Promise.resolve(null);
|
|
11
|
|
- }
|
|
12
|
|
- Services.prefs.clearUserPref(shouldNotifyPref);
|
|
13
|
|
- // Try use the same URL as the about dialog. See mullvad-browser#411.
|
|
14
|
|
- let updateURL = Services.urlFormatter.formatURLPref(
|
|
15
|
|
- "app.releaseNotesURL.aboutDialog"
|
|
16
|
|
- );
|
|
17
|
|
- if (updateURL === "about:blank") {
|
|
18
|
|
- updateURL = Services.urlFormatter.formatURLPref(
|
|
19
|
|
- "startup.homepage_override_url"
|
|
20
|
|
- );
|
|
|
62
|
+ const browser = this.browsingContext.top.embedderElement;
|
|
|
63
|
+ if (browser?.getAttribute("preloadedState") === "preloaded") {
|
|
|
64
|
+ // Wait until the page is actually about to be shown before sending
|
|
|
65
|
+ // the initial data.
|
|
|
66
|
+ // Otherwise the preloaded page might grab the updateData even though
|
|
|
67
|
+ // it won't be shown as the landing page. See mullvad-browser#486.
|
|
|
68
|
+ this.#preloaded = true;
|
|
|
69
|
+ return Promise.resolve({ delayed: true });
|
|
21
|
70
|
}
|
|
22
|
|
-
|
|
23
|
|
- return Promise.resolve({
|
|
24
|
|
- version: Services.prefs.getCharPref(
|
|
25
|
|
- "browser.startup.homepage_override.mullvadbrowser.version"
|
|
26
|
|
- ),
|
|
27
|
|
- url: updateURL,
|
|
28
|
|
- });
|
|
|
71
|
+ return Promise.resolve({ updateData: this.#getUpdateData() });
|
|
29
|
72
|
}
|
|
30
|
73
|
}
|
|
31
|
74
|
return undefined;
|
browser/components/search/SearchUIUtils.sys.mjs
| ... |
... |
@@ -86,8 +86,12 @@ export var SearchUIUtils = { |
|
86
|
86
|
* name of the engine to be moved and replaced.
|
|
87
|
87
|
* @param {string} newEngine
|
|
88
|
88
|
* name of the application default engine to replaced the removed engine.
|
|
|
89
|
+ * @param {object} [details]
|
|
|
90
|
+ * Additional details about the removed search engine.
|
|
|
91
|
+ * @param {boolean} [details.removedMullvadLeta]
|
|
|
92
|
+ * Whether we removed Mullvad Leta.
|
|
89
|
93
|
*/
|
|
90
|
|
- async removalOfSearchEngineNotificationBox(oldEngine, newEngine) {
|
|
|
94
|
+ async removalOfSearchEngineNotificationBox(oldEngine, newEngine, details) {
|
|
91
|
95
|
let win = lazy.BrowserWindowTracker.getTopWindow({
|
|
92
|
96
|
allowFromInactiveWorkspace: true,
|
|
93
|
97
|
});
|
| ... |
... |
@@ -103,9 +107,14 @@ export var SearchUIUtils = { |
|
103
|
107
|
win.gNotificationBox.removeNotification(notificationBox);
|
|
104
|
108
|
},
|
|
105
|
109
|
},
|
|
106
|
|
- {
|
|
107
|
|
- supportPage: "search-engine-removal",
|
|
108
|
|
- },
|
|
|
110
|
+ details?.removedMullvadLeta
|
|
|
111
|
+ ? {
|
|
|
112
|
+ link: "https://leta.mullvad.net/mullvad-browser",
|
|
|
113
|
+ "l10n-id": "moz-support-link-text",
|
|
|
114
|
+ }
|
|
|
115
|
+ : {
|
|
|
116
|
+ supportPage: "search-engine-removal",
|
|
|
117
|
+ },
|
|
109
|
118
|
];
|
|
110
|
119
|
|
|
111
|
120
|
await win.gNotificationBox.appendNotification(
|
browser/components/tabbrowser/NewTabPagePreloading.sys.mjs
| ... |
... |
@@ -178,6 +178,17 @@ export let NewTabPagePreloading = { |
|
178
|
178
|
this.browserCounts[countKey]--;
|
|
179
|
179
|
browser.removeAttribute("preloadedState");
|
|
180
|
180
|
browser.setAttribute("autocompletepopup", "PopupAutoComplete");
|
|
|
181
|
+ // Copied from tor-browser. See mullvad-browser#486.
|
|
|
182
|
+ // Let a preloaded about:mullvad-browser page know that it is no longer
|
|
|
183
|
+ // preloaded (about to be shown).
|
|
|
184
|
+ try {
|
|
|
185
|
+ browser.browsingContext?.currentWindowGlobal
|
|
|
186
|
+ ?.getActor("AboutMullvadBrowser")
|
|
|
187
|
+ .preloadedRemoved();
|
|
|
188
|
+ } catch {
|
|
|
189
|
+ // Not an about:mullvad-browser page with an AboutMullvadBrowserParent
|
|
|
190
|
+ // instance.
|
|
|
191
|
+ }
|
|
181
|
192
|
}
|
|
182
|
193
|
|
|
183
|
194
|
return browser;
|
testing/testsuite-targets.mk
| ... |
... |
@@ -151,7 +151,7 @@ download-wpt-manifest: |
|
151
|
151
|
$(call py_action,download_wpt_manifest)
|
|
152
|
152
|
|
|
153
|
153
|
define package_archive
|
|
154
|
|
-package-tests-$(1): stage-all package-tests-prepare-dest download-wpt-manifest
|
|
|
154
|
+package-tests-$(1): stage-all package-tests-prepare-dest
|
|
155
|
155
|
$$(call py_action,test_archive, \
|
|
156
|
156
|
$(1) \
|
|
157
|
157
|
'$$(abspath $$(test_archive_dir))/$$(PKG_BASENAME).$(1).tests.$(2)')
|
toolkit/components/search/SearchService.sys.mjs
| ... |
... |
@@ -1849,7 +1849,11 @@ export class SearchService { |
|
1849
|
1849
|
|
|
1850
|
1850
|
this._showRemovalOfSearchEngineNotificationBox(
|
|
1851
|
1851
|
prevCurrentEngineName || prevAppDefaultEngineName,
|
|
1852
|
|
- newCurrentEngineName
|
|
|
1852
|
+ newCurrentEngineName,
|
|
|
1853
|
+ {
|
|
|
1854
|
+ removedMullvadLeta:
|
|
|
1855
|
+ (prevCurrentEngineId || prevAppDefaultEngineId) === "mullvad-leta",
|
|
|
1856
|
+ }
|
|
1853
|
1857
|
);
|
|
1854
|
1858
|
}
|
|
1855
|
1859
|
}
|
| ... |
... |
@@ -1927,7 +1931,13 @@ export class SearchService { |
|
1927
|
1931
|
// the user changes their locale it causes a change in engines.
|
|
1928
|
1932
|
// If there is no update to settings metadata then the engine change was
|
|
1929
|
1933
|
// caused by an update to config rather than a user changing their locale.
|
|
1930
|
|
- if (!this.#didSettingsMetaDataUpdate(prevMetaData)) {
|
|
|
1934
|
+ //
|
|
|
1935
|
+ // For the removal of Mullvad Leta, we show the notification even if the
|
|
|
1936
|
+ // locale also changed because this change is not locale-dependant.
|
|
|
1937
|
+ if (
|
|
|
1938
|
+ (prevCurrentEngineId || prevAppDefaultEngineId) === "mullvad-leta" ||
|
|
|
1939
|
+ !this.#didSettingsMetaDataUpdate(prevMetaData)
|
|
|
1940
|
+ ) {
|
|
1931
|
1941
|
return true;
|
|
1932
|
1942
|
}
|
|
1933
|
1943
|
}
|
| ... |
... |
@@ -3821,16 +3831,22 @@ export class SearchService { |
|
3821
|
3831
|
* The name of the previous default engine that will be replaced.
|
|
3822
|
3832
|
* @param {string} newCurrentEngineName
|
|
3823
|
3833
|
* The name of the engine that will be the new default engine.
|
|
|
3834
|
+ * @param {object} [details]
|
|
|
3835
|
+ * Additional details about the removed search engine.
|
|
|
3836
|
+ * @param {boolean} [details.removedMullvadLeta]
|
|
|
3837
|
+ * Whether we removed Mullvad Leta.
|
|
3824
|
3838
|
*/
|
|
3825
|
3839
|
_showRemovalOfSearchEngineNotificationBox(
|
|
3826
|
3840
|
prevCurrentEngineName,
|
|
3827
|
|
- newCurrentEngineName
|
|
|
3841
|
+ newCurrentEngineName,
|
|
|
3842
|
+ details
|
|
3828
|
3843
|
) {
|
|
3829
|
3844
|
lazy.BrowserUtils.callModulesFromCategory(
|
|
3830
|
3845
|
{ categoryName: "search-service-notification" },
|
|
3831
|
3846
|
"search-engine-removal",
|
|
3832
|
3847
|
prevCurrentEngineName,
|
|
3833
|
|
- newCurrentEngineName
|
|
|
3848
|
+ newCurrentEngineName,
|
|
|
3849
|
+ details
|
|
3834
|
3850
|
);
|
|
3835
|
3851
|
}
|
|
3836
|
3852
|
|
toolkit/components/search/content/base-browser-search-engine-icons.json
| ... |
... |
@@ -5,11 +5,8 @@ |
|
5
|
5
|
"ddg-html": [
|
|
6
|
6
|
{ "url": "chrome://global/content/search/duckduckgo.ico", "imageSize": 32 }
|
|
7
|
7
|
],
|
|
8
|
|
- "mullvad-leta": [
|
|
9
|
|
- {
|
|
10
|
|
- "url": "chrome://global/content/search/mullvad-leta.svg",
|
|
11
|
|
- "imageSize": 16
|
|
12
|
|
- }
|
|
|
8
|
+ "ddg-noai": [
|
|
|
9
|
+ { "url": "chrome://global/content/search/duckduckgo.ico", "imageSize": 32 }
|
|
13
|
10
|
],
|
|
14
|
11
|
"mojeek": [
|
|
15
|
12
|
{ "url": "chrome://global/content/search/mojeek.ico", "imageSize": 32 }
|
toolkit/components/search/content/base-browser-search-engines.json
|
1
|
1
|
[
|
|
2
|
2
|
{
|
|
3
|
3
|
"base": {
|
|
4
|
|
- "aliases": ["mullvad-leta", "leta", "mullvad", "ml"],
|
|
|
4
|
+ "aliases": ["duckduckgo", "ddg"],
|
|
5
|
5
|
"classification": "general",
|
|
6
|
|
- "name": "Mullvad Leta",
|
|
|
6
|
+ "name": "DuckDuckGo",
|
|
7
|
7
|
"urls": {
|
|
8
|
8
|
"search": {
|
|
9
|
|
- "base": "https://leta.mullvad.net/",
|
|
|
9
|
+ "base": "https://duckduckgo.com/",
|
|
10
|
10
|
"params": [],
|
|
11
|
11
|
"searchTermParamName": "q"
|
|
12
|
12
|
}
|
|
13
|
13
|
}
|
|
14
|
14
|
},
|
|
15
|
|
- "id": "ee88d691-6d7a-4adb-9fec-5a205565505a",
|
|
16
|
|
- "identifier": "mullvad-leta",
|
|
|
15
|
+ "id": "04e99a38-13ee-47d8-8aa4-64482b3dea99",
|
|
|
16
|
+ "identifier": "ddg",
|
|
17
|
17
|
"recordType": "engine",
|
|
18
|
18
|
"variants": [{ "environment": { "allRegionsAndLocales": true } }]
|
|
19
|
19
|
},
|
|
20
|
20
|
{
|
|
21
|
21
|
"base": {
|
|
22
|
|
- "aliases": ["duckduckgo", "ddg"],
|
|
|
22
|
+ "aliases": ["ddg-html", "duckduckgohtml", "ddgh"],
|
|
23
|
23
|
"classification": "general",
|
|
24
|
|
- "name": "DuckDuckGo",
|
|
|
24
|
+ "name": "DuckDuckGo (HTML)",
|
|
25
|
25
|
"urls": {
|
|
26
|
26
|
"search": {
|
|
27
|
|
- "base": "https://duckduckgo.com/",
|
|
|
27
|
+ "base": "https://html.duckduckgo.com/html/",
|
|
28
|
28
|
"params": [],
|
|
29
|
29
|
"searchTermParamName": "q"
|
|
30
|
30
|
}
|
|
31
|
31
|
}
|
|
32
|
32
|
},
|
|
33
|
|
- "id": "04e99a38-13ee-47d8-8aa4-64482b3dea99",
|
|
34
|
|
- "identifier": "ddg",
|
|
|
33
|
+ "id": "98d8c84b-7455-431d-98b9-890e7bcc0041",
|
|
|
34
|
+ "identifier": "ddg-html",
|
|
35
|
35
|
"recordType": "engine",
|
|
36
|
36
|
"variants": [{ "environment": { "allRegionsAndLocales": true } }]
|
|
37
|
37
|
},
|
|
38
|
38
|
{
|
|
39
|
39
|
"base": {
|
|
40
|
|
- "aliases": ["ddg-html", "duckduckgohtml", "ddgh"],
|
|
|
40
|
+ "aliases": ["ddgnoai"],
|
|
41
|
41
|
"classification": "general",
|
|
42
|
|
- "name": "DuckDuckGo (HTML)",
|
|
|
42
|
+ "name": "DuckDuckGo (no AI)",
|
|
43
|
43
|
"urls": {
|
|
44
|
44
|
"search": {
|
|
45
|
|
- "base": "https://html.duckduckgo.com/html/",
|
|
|
45
|
+ "base": "https://noai.duckduckgo.com/",
|
|
46
|
46
|
"params": [],
|
|
47
|
47
|
"searchTermParamName": "q"
|
|
48
|
48
|
}
|
|
49
|
49
|
}
|
|
50
|
50
|
},
|
|
51
|
|
- "id": "98d8c84b-7455-431d-98b9-890e7bcc0041",
|
|
52
|
|
- "identifier": "ddg-html",
|
|
|
51
|
+ "id": "91687f02-56dd-4fef-ba26-bf139dff3166",
|
|
|
52
|
+ "identifier": "ddg-noai",
|
|
53
|
53
|
"recordType": "engine",
|
|
54
|
54
|
"variants": [{ "environment": { "allRegionsAndLocales": true } }]
|
|
55
|
55
|
},
|
| ... |
... |
@@ -109,7 +109,16 @@ |
|
109
|
109
|
},
|
|
110
|
110
|
{
|
|
111
|
111
|
"recordType": "defaultEngines",
|
|
112
|
|
- "globalDefault": "mullvad-leta",
|
|
113
|
|
- "globalDefaultPrivate": "mullvad-leta"
|
|
|
112
|
+ "globalDefault": "ddg",
|
|
|
113
|
+ "globalDefaultPrivate": "dgg"
|
|
|
114
|
+ },
|
|
|
115
|
+ {
|
|
|
116
|
+ "recordType": "engineOrders",
|
|
|
117
|
+ "orders": [
|
|
|
118
|
+ {
|
|
|
119
|
+ "environment": { "allRegionsAndLocales": true },
|
|
|
120
|
+ "order": ["ddg", "ddg-html", "ddg-noai", "mojeek", "brave", "startpage"]
|
|
|
121
|
+ }
|
|
|
122
|
+ ]
|
|
114
|
123
|
}
|
|
115
|
124
|
] |
toolkit/components/search/content/mullvad-leta.svg
deleted
|
1
|
|
-<svg xmlns="http://www.w3.org/2000/svg" id="Mullvad_VPN_Logo_Positive" x="0" y="0" version="1.1"
|
|
2
|
|
- viewBox="0 0 252.70001 252.6" xml:space="preserve">
|
|
3
|
|
- <g id="Logo" transform="translate(-566.2 -73.7)">
|
|
4
|
|
- <path id="bg" fill="#192e45" fill-rule="evenodd"
|
|
5
|
|
- d="M566.2 200c0 69.8 56.6 126.3 126.3 126.3 69.7 0 126.4-56.5 126.4-126.3S762.3 73.7 692.5 73.7c-69.8 0-126.3 56.5-126.3 126.3z"
|
|
6
|
|
- clip-rule="evenodd" />
|
|
7
|
|
- <path id="Mullvad_Fur" fill="#d0933a" fill-rule="evenodd"
|
|
8
|
|
- d="M583.1 184.9l9.6-13.4c0 .1-.6 19.3-.6 19.3l2.7-14.5c8 16.2 27.6 38.6 45.5 50.6 1.9 1.3 3.5 2.7 4.6 4.1 2.3.9 4.6 1.4 6.9 1.8 1.2.2 2.5.3 3.7.4 1.2.1 2.5.1 3.7.1 1.2 0 2.4-.1 3.6-.2 1.2-.1 2.4-.3 3.6-.5 1.2-.2 2.4-.4 3.5-.8 1.2-.3 2.3-.6 3.5-1 1.1-.3 2.3-.8 3.4-1.2 1.1-.5 2.2-.9 3.3-1.5 1.1-.6 2.2-1.1 3.2-1.7 1.1-.5 2.1-1.2 3.2-1.8 1.1-.6 2.1-1.3 3.2-1.9 1.1-.6 2.1-1.3 3.1-1.9 1-.7 2.1-1.3 3.1-2s2.1-1.3 3.2-2l1-.6.5.3 7.2 4.8-7.3-1.9c-.7.8-1.4 1.6-2.2 2.4-.9.9-1.9 1.8-2.8 2.7-1 .8-2 1.7-3.1 2.4-1.1.8-2.1 1.5-3.3 2.2-2.2 1.4-4.6 2.6-7.1 3.6-1.2.5-2.5 1-3.7 1.4-1.3.4-2.5.8-3.8 1.1-1.3.3-2.6.6-3.9.8-1.3.2-2.6.3-3.9.5-2.6.1-5.3.1-7.9-.3-1.3-.2-2.6-.4-3.9-.7-1.3-.3-2.5-.7-3.7-1.1-2.1-.8-4.2-1.8-6.1-3 0 0-6.9 1-4.1 6.2 2.8 5.2 7 4.7 5 10.8-1.4 3.3-3.4 6.5-5.6 9.5-4.6 6.2-11.8 11.7-11.1 15 32.7 40.3 106.4 34.7 134.4-1.3-.4-5.2-8.6-7.7-14.3-20.4 1.6.5 4 1.2 4 1.1 0-.1-6.8-11.1-7.1-12.2l4.4.3s-5.8-7.2-6-7.9l5.9-.8s-7.4-8.5-7.5-9.2l7.5 1.2-8.2-9.9h3.9l-4.6-6.7c-.8-.3-1.6-.5-2.4-.7l-3-.9c-11.2-3.5-21.8-6.7-32-13.1-14.3-8.9-27.1-19.8-36.7-28.3l-19.3-9.4c-18.5-1.4-35.9-.9-46.5 1.2l6.8-11.6-10.4 12.5c-.7-.2-.9-.6-.9-.6l.7-15.4-3.3 13.9c-1-.5-2.2-.7-3.4-.7-4.6 0-8.3 3.7-8.3 8.3 0 4.2 3.1 7.7 7.2 8.2l-7.1 14.4z"
|
|
9
|
|
- clip-rule="evenodd" />
|
|
10
|
|
- <path id="Mullvad_Nose" fill="#ffcc86" fill-rule="evenodd"
|
|
11
|
|
- d="M594.8 154.5c-1-.4-2.2-.7-3.3-.7-4.6 0-8.3 3.7-8.3 8.3 0 4 2.9 7.4 6.7 8.2h.2c2.5-.8 7.5-7.5 6.7-11.7-.4-1.5-1-2.9-2-4.1z"
|
|
12
|
|
- clip-rule="evenodd" />
|
|
13
|
|
- <path id="Mullvad_Helmet" fill="#fdd321" fill-rule="evenodd"
|
|
14
|
|
- d="M667.6 143.8c-1.5-4.1-1.1-9.4 1-14.4 3-6.9 8.7-11.5 14.1-11.5 1.1 0 2.1.2 3.1.6 3.1-2.8 6.7-5.1 10.7-6.7 22.1-8.8 54.4 6.9 62.7 28.6 4 10.5 2.8 22-.6 32.5-2.8 8.6-13 21-9.2 30.4-1.5-.4-33.1-10.2-41.9-15.8-14.1-8.8-26.8-19.6-36.3-28l-.3-.3-32.1-15.2c-.4-.2-.8-.4-1.1-.6 4.6 0 22.1 2.1 29.9.4"
|
|
15
|
|
- clip-rule="evenodd" />
|
|
16
|
|
- <g id="Helmet_Lamp">
|
|
17
|
|
- <path id="path113" fill="#fff"
|
|
18
|
|
- d="M677.1 147.4c-.9 0-1.6-.2-2.3-.5-1.6-.7-2.8-2-3.6-4-1.4-3.4-1-8.1.9-12.5 2.5-5.6 7.3-9.7 11.5-9.7.8 0 1.6.2 2.4.5 2.1.9 3.6 3 4.1 6 .6 3.2.1 6.9-1.5 10.4-2.4 5.7-7.3 9.8-11.5 9.8z" />
|
|
19
|
|
- <g id="g117">
|
|
20
|
|
- <path id="path115" fill="#1d2a3a"
|
|
21
|
|
- d="M683.6 122.3c.6 0 1.2.1 1.8.4 1.6.7 2.8 2.5 3.2 4.9.5 2.9.1 6.3-1.4 9.5-2.2 5.1-6.5 8.8-10.1 8.8-.6 0-1.2-.1-1.7-.3-1.5-.6-2.3-2-2.7-3.1-1.2-3-.9-7.4.8-11.4 2.2-5.1 6.5-8.8 10.1-8.8m0-3c-4.8 0-10.1 4.4-12.9 10.7-2.1 4.7-2.4 9.8-.9 13.7.9 2.3 2.4 3.9 4.3 4.8.9.4 1.9.6 3 .6 4.8 0 10.1-4.4 12.8-10.7 1.7-3.8 2.2-7.8 1.6-11.3-.6-3.5-2.4-6-5-7.1-.9-.5-1.9-.7-2.9-.7z" />
|
|
22
|
|
- </g>
|
|
23
|
|
- </g>
|
|
24
|
|
- </g>
|
|
25
|
|
-</svg> |
toolkit/components/search/tests/xpcshell/test_base_browser.js
| ... |
... |
@@ -4,19 +4,21 @@ |
|
4
|
4
|
/**
|
|
5
|
5
|
* This tests the SearchService to check our override of the remote settings is
|
|
6
|
6
|
* working as expected.
|
|
|
7
|
+ *
|
|
|
8
|
+ * When adding new engines, it should be enough to change expectedURLs below.
|
|
7
|
9
|
*/
|
|
8
|
10
|
|
|
9
|
11
|
"use strict";
|
|
10
|
12
|
|
|
11
|
13
|
const expectedURLs = {
|
|
12
|
|
- leta: "https://leta.mullvad.net/?q=test",
|
|
13
|
|
- ddg: "https://duckduckgo.com/html/?q=test",
|
|
14
|
|
- "ddg-html": "https://html.duckduckgo.com/html?q=test",
|
|
|
14
|
+ ddg: "https://duckduckgo.com/?q=test",
|
|
|
15
|
+ "ddg-html": "https://html.duckduckgo.com/html/?q=test",
|
|
|
16
|
+ "ddg-noai": "https://noai.duckduckgo.com/?q=test",
|
|
15
|
17
|
mojeek: "https://www.mojeek.com/search?q=test",
|
|
16
|
18
|
brave: "https://search.brave.com/search?q=test",
|
|
17
|
19
|
startpage: "https://www.startpage.com/sp/search?q=test",
|
|
18
|
20
|
};
|
|
19
|
|
-const defaultEngine = "leta";
|
|
|
21
|
+const defaultEngine = "ddg";
|
|
20
|
22
|
|
|
21
|
23
|
add_setup(async function setup() {
|
|
22
|
24
|
await Services.search.init();
|
| ... |
... |
@@ -49,3 +51,11 @@ add_task(function test_checkSearchURLs() { |
|
49
|
51
|
Assert.equal(foundUrl, url, `The URL of ${engine.name} is not altered.`);
|
|
50
|
52
|
}
|
|
51
|
53
|
});
|
|
|
54
|
+
|
|
|
55
|
+add_task(async function test_iconsDoesNotFail() {
|
|
|
56
|
+ for (const id of Object.keys(expectedURLs)) {
|
|
|
57
|
+ const engine = Services.search.getEngineById(id);
|
|
|
58
|
+ // No need to assert anything, as in case of error this method should throw.
|
|
|
59
|
+ await engine.getIconURL();
|
|
|
60
|
+ }
|
|
|
61
|
+}); |
toolkit/mozapps/update/updater/updater.cpp
| ... |
... |
@@ -3326,6 +3326,10 @@ int NS_main(int argc, NS_tchar** argv) { |
|
3326
|
3326
|
putenv(const_cast<char*>("MOZ_USING_SERVICE="));
|
|
3327
|
3327
|
#endif
|
|
3328
|
3328
|
|
|
|
3329
|
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
|
|
|
3330
|
+ unsetenv("FONTCONFIG_PATH");
|
|
|
3331
|
+#endif
|
|
|
3332
|
+
|
|
3329
|
3333
|
if (argc == 2 && NS_tstrcmp(argv[1], NS_T("--channels-allowed")) == 0) {
|
|
3330
|
3334
|
#ifdef MOZ_VERIFY_MAR_SIGNATURE
|
|
3331
|
3335
|
int rv = PopulategMARStrings();
|
|