Commits:
-
e7b0489a
by Pier Angelo Vendrame at 2026-06-01T18:06:43+02:00
fixup! TB 40933: Add tor-launcher functionality
TB 44991: Improve the no-authentication handling on the control port.
-
7309a181
by Dan Ballard at 2026-06-01T18:13:33+02:00
fixup! [android] Disable features and functionality
TB 44323: Audit prefs 128-140 in android
-
14c9fd38
by Dan Ballard at 2026-06-01T18:13:36+02:00
fixup! TB 41972: [android] Disable Mozilla onboarding
TB 44323: Audit prefs 128 to 140
-
8a8b65ed
by Dan Ballard at 2026-06-03T10:18:19+02:00
fixup! TB 44027: [android] Update PBM lockscreen
TB 44323: Audit prefs 2128 to 140
-
b3b67947
by clairehurst at 2026-06-03T10:18:23+02:00
fixup! [android] Implement Android-native Connection Assist UI
Fix colors and bold text
-
7f21c905
by clairehurst at 2026-06-03T10:18:24+02:00
fixup! TB 40026: [android] Implement Security Level settings on Android.
-
5c3bfce1
by Beatriz Rizental at 2026-06-03T10:18:29+02:00
fixup! Add CI for Base Browser
Bug 44990: Fix dubious ownership CI issue
-
23d5b38e
by Beatriz Rizental at 2026-06-03T10:18:29+02:00
fixup! Add CI for Tor Browser
Bug 44990: Fix permissions issues in container
-
239f4b05
by Beatriz Rizental at 2026-06-03T10:18:30+02:00
fixup! Add CI for Base Browser
No bug: Drop logic that fetches pipelines from forks. That is not
supported anymore after https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42594#note_3411352
-
dc70ecda
by Beatriz Rizental at 2026-06-03T10:18:30+02:00
fixup! Add CI for Tor Browser
Update build-image container
-
d0e9391d
by Beatriz Rizental at 2026-06-03T10:18:31+02:00
fixup! Add CI for Base Browser
This reverts commit 1d1ea9c7bfa8930b5bbc928a70054c4971562347.
-
1f29f770
by Beatriz Rizental at 2026-06-03T10:18:31+02:00
fixup! [android] Override settings
Bug 44917: Disable ads client for all channels
-
e7971e7d
by Pier Angelo Vendrame at 2026-06-03T10:18:31+02:00
fixup! TB 40562: Added Tor Browser preferences to 000-tor-browser.js
TB 42436: Support multi-fronts for Moat.
-
1f0e24f2
by Pier Angelo Vendrame at 2026-06-03T10:18:32+02:00
fixup! Lox integration
TB 42436: Support multi-fronts for Moat.
-
612d5910
by Pier Angelo Vendrame at 2026-06-03T10:18:32+02:00
fixup! TB 40597: Implement TorSettings module
TB 42436: Support multi-fronts for Moat.
-
f3d3808f
by Henry Wilkes at 2026-06-03T10:18:33+02:00
fixup! TB 40701: Add security warning when downloading a file
TB 45005: Rename arrowpanel CSS variable.
-
b3ce8889
by Henry Wilkes at 2026-06-03T10:18:33+02:00
fixup! TB 41600: Add a tor circuit display panel.
TB 45005: Rename arrowpanel CSS variable.
-
c5061ebc
by clairehurst at 2026-06-03T10:18:34+02:00
fixup! [android] Disable features and functionality
Bug 45031: Disable AI features for android
-
07ea23e2
by clairehurst at 2026-06-03T10:25:02+02:00
fixup! [android] Rename as Tor Browser
Bug 45031: Disable AI features on Android
-
fcc28e78
by hackademix at 2026-06-03T10:50:46+02:00
fixup! BB 41459: WebRTC fails to build under mingw (Part 5)
Fix for 151 bustage from Bug 2023271
30 changed files:
Changes:
.gitlab/ci/containers/base/Containerfile
| ... |
... |
@@ -22,18 +22,27 @@ RUN cd tor-browser && \ |
|
22
|
22
|
yes | MOZBUILD_STATE_PATH=/var/tmp/mozbuild ./mach bootstrap --application-choice "$APPLICATION_CHOICE" && \
|
|
23
|
23
|
cd ..
|
|
24
|
24
|
|
|
25
|
|
-ENV PATH="/var/tmp/mozbuild/clang/bin:/root/.cargo/bin:$PATH"
|
|
|
25
|
+RUN rm -rf tor-browser && \
|
|
|
26
|
+ rm -rf /var/lib/apt/lists/* && \
|
|
|
27
|
+ apt-get clean && \
|
|
|
28
|
+ rm -rf /var/tmp/mozbuild/toolchains && \
|
|
|
29
|
+ rm -rf /var/tmp/mozbuild/indices && \
|
|
|
30
|
+ rm -rf /var/tmp/mozbuild/android-device && \
|
|
|
31
|
+ rm -rf /var/root/.cargo && \
|
|
|
32
|
+ rm -rf /var/root/.rustup
|
|
|
33
|
+
|
|
|
34
|
+RUN adduser --uid 1000 --disabled-password --gecos "" gitlab-runner && \
|
|
|
35
|
+ chown -R 1000:1000 /var/tmp/mozbuild/
|
|
|
36
|
+
|
|
|
37
|
+USER gitlab-runner
|
|
|
38
|
+WORKDIR /home/gitlab-runner
|
|
26
|
39
|
|
|
|
40
|
+# Install Rust for the gitlab-runner user.
|
|
|
41
|
+RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
|
42
|
+ENV PATH="/var/tmp/mozbuild/clang/bin:/home/gitlab-runner/.cargo/bin:$PATH"
|
|
27
|
43
|
RUN echo "$APPLICATION_CHOICE" | grep -qi android && \
|
|
28
|
44
|
rustup target add armv7-linux-androideabi \
|
|
29
|
45
|
aarch64-linux-android \
|
|
30
|
46
|
i686-linux-android \
|
|
31
|
47
|
x86_64-linux-android \
|
|
32
|
48
|
|| true |
|
33
|
|
-
|
|
34
|
|
-RUN rm -rf tor-browser && \
|
|
35
|
|
- apt-get clean && \
|
|
36
|
|
- rm -rf /var/lib/apt/lists/* && \
|
|
37
|
|
- rm -rf /var/tmp/mozbuild/toolchains && \
|
|
38
|
|
- rm -rf /var/tmp/mozbuild/indices && \
|
|
39
|
|
- rm -rf /var/tmp/mozbuild/android-device |
.gitlab/ci/jobs/update-containers.yml
|
1
|
1
|
build-image:
|
|
2
|
2
|
stage: update-container-images
|
|
3
|
3
|
interruptible: true
|
|
4
|
|
- image: containers.torproject.org/tpo/tpa/base-images/podman:bookworm
|
|
|
4
|
+ image: containers.torproject.org/tpo/tpa/base-images/podman:trixie
|
|
5
|
5
|
parallel:
|
|
6
|
6
|
matrix:
|
|
7
|
7
|
- PLATFORM: desktop
|
.gitlab/ci/mixins.yml
| ... |
... |
@@ -2,7 +2,12 @@ |
|
2
|
2
|
variables:
|
|
3
|
3
|
GIT_STRATEGY: "none"
|
|
4
|
4
|
FETCH_TIMEOUT: 180 # 3 minutes
|
|
|
5
|
+
|
|
|
6
|
+ GIT_CONFIG_GLOBAL: "/tmp/gitconfig"
|
|
5
|
7
|
before_script:
|
|
|
8
|
+ - |
|
|
|
9
|
+ echo "[safe]" > "$GIT_CONFIG_GLOBAL"
|
|
|
10
|
+ echo " directory = *" >> "$GIT_CONFIG_GLOBAL"
|
|
6
|
11
|
- git init
|
|
7
|
12
|
- git remote add local "$LOCAL_REPO_PATH"
|
|
8
|
13
|
- |
|
browser/app/profile/000-tor-browser.js
| ... |
... |
@@ -126,8 +126,7 @@ pref("extensions.torlauncher.torrc_path", ""); |
|
126
|
126
|
pref("extensions.torlauncher.tordatadir_path", "");
|
|
127
|
127
|
|
|
128
|
128
|
// BridgeDB-related preferences (used for Moat).
|
|
129
|
|
-pref("extensions.torlauncher.bridgedb_front", "vuejs.org");
|
|
130
|
|
-pref("extensions.torlauncher.bridgedb_reflector", "https://bespoke-strudel-c243cc.netlify.app");
|
|
|
129
|
+pref("extensions.torlauncher.bridgedb_targets", "https://1723079976.rsc.cdn77.org|cdn.zk.mk+www.cdn77.com");
|
|
131
|
130
|
pref("extensions.torlauncher.moat_service", "https://bridges.torproject.org/moat");
|
|
132
|
131
|
|
|
133
|
132
|
// Log levels
|
browser/components/downloads/content/downloads.css
| ... |
... |
@@ -96,7 +96,7 @@ |
|
96
|
96
|
}
|
|
97
|
97
|
|
|
98
|
98
|
#downloadsPanelTorWarning {
|
|
99
|
|
- margin-block-end: var(--arrowpanel-menuitem-padding-block);
|
|
|
99
|
+ margin-block-end: var(--panel-menuitem-padding-block);
|
|
100
|
100
|
}
|
|
101
|
101
|
|
|
102
|
102
|
#downloadsPanelTorWarningWrapper {
|
browser/components/torcircuit/content/torCircuitPanel.css
| ... |
... |
@@ -61,7 +61,7 @@ |
|
61
|
61
|
|
|
62
|
62
|
#tor-circuit-alias:not([hidden]) {
|
|
63
|
63
|
/* Same as padding for .panel-header */
|
|
64
|
|
- margin-block-start: var(--arrowpanel-menuitem-margin-inline);
|
|
|
64
|
+ margin-block-start: var(--panel-menuitem-margin-inline);
|
|
65
|
65
|
display: flex;
|
|
66
|
66
|
align-items: center;
|
|
67
|
67
|
}
|
| ... |
... |
@@ -84,9 +84,9 @@ |
|
84
|
84
|
/* May grow larger than 480px if we have a long domain name or ip address. */
|
|
85
|
85
|
min-width: 480px;
|
|
86
|
86
|
/* Line up with the button at the bottom of the panel. */
|
|
87
|
|
- margin: var(--arrowpanel-menuitem-margin);
|
|
88
|
|
- padding: var(--arrowpanel-menuitem-padding);
|
|
89
|
|
- gap: var(--arrowpanel-menuitem-padding-block);
|
|
|
87
|
+ margin: var(--panel-menuitem-margin);
|
|
|
88
|
+ padding: var(--panel-menuitem-padding);
|
|
|
89
|
+ gap: var(--panel-menuitem-padding-block);
|
|
90
|
90
|
}
|
|
91
|
91
|
|
|
92
|
92
|
#tor-circuit-node-list-name,
|
| ... |
... |
@@ -96,7 +96,7 @@ |
|
96
|
96
|
|
|
97
|
97
|
#tor-circuit-node-list {
|
|
98
|
98
|
list-style: none;
|
|
99
|
|
- padding-inline-start: var(--arrowpanel-menuitem-margin-inline);
|
|
|
99
|
+ padding-inline-start: var(--panel-menuitem-margin-inline);
|
|
100
|
100
|
/* Do not allow an item to wrap since this would break the circuit diagram. */
|
|
101
|
101
|
white-space: nowrap;
|
|
102
|
102
|
}
|
dom/media/webrtc/transport/nricestunaddr.cpp
| ... |
... |
@@ -27,8 +27,8 @@ NrIceStunAddr::NrIceStunAddr(const nr_local_addr* addr) |
|
27
|
27
|
fqdn_(addr->addr.fqdn),
|
|
28
|
28
|
is_proxied_(addr->addr.is_proxied),
|
|
29
|
29
|
tls_(addr->addr.tls),
|
|
30
|
|
- interface_type_(static_cast<InterfaceType>(addr->interface.type)),
|
|
31
|
|
- estimated_speed_(addr->interface.estimated_speed),
|
|
|
30
|
+ interface_type_(static_cast<InterfaceType>(addr->iface.type)),
|
|
|
31
|
+ estimated_speed_(addr->iface.estimated_speed),
|
|
32
|
32
|
temporary_((addr->flags & NR_ADDR_FLAG_TEMPORARY) != 0) {}
|
|
33
|
33
|
|
|
34
|
34
|
NrIceStunAddr::Protocol NrIceStunAddr::protocolFromNrTransportAddr(
|
| ... |
... |
@@ -101,8 +101,8 @@ void NrIceStunAddr::toNrLocalAddr(nr_local_addr& addr) const { |
|
101
|
101
|
// generate as_string
|
|
102
|
102
|
nr_transport_addr_fmt_addr_string(&addr.addr);
|
|
103
|
103
|
|
|
104
|
|
- addr.interface.type = static_cast<int>(interface_type_);
|
|
105
|
|
- addr.interface.estimated_speed = estimated_speed_;
|
|
|
104
|
+ addr.iface.type = static_cast<int>(interface_type_);
|
|
|
105
|
+ addr.iface.estimated_speed = estimated_speed_;
|
|
106
|
106
|
|
|
107
|
107
|
if (temporary_) {
|
|
108
|
108
|
addr.flags |= NR_ADDR_FLAG_TEMPORARY;
|
mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt
| ... |
... |
@@ -25,7 +25,7 @@ import mozilla.components.concept.engine.translate.TranslationSupport |
|
25
|
25
|
* See [TranslationsState.translationError] for session level errors.
|
|
26
|
26
|
*/
|
|
27
|
27
|
data class TranslationsBrowserState(
|
|
28
|
|
- val isTranslationsEnabled: Boolean = true,
|
|
|
28
|
+ val isTranslationsEnabled: Boolean = false,
|
|
29
|
29
|
val isEngineSupported: Boolean? = null,
|
|
30
|
30
|
val offerTranslation: Boolean? = null,
|
|
31
|
31
|
val supportedLanguages: TranslationSupport? = null,
|
mobile/android/android-components/components/concept/ai-controls/src/main/java/mozilla/components/concept/ai/controls/AIFeatureBlock.kt
| ... |
... |
@@ -32,7 +32,7 @@ interface AIFeatureBlock { |
|
32
|
32
|
}
|
|
33
|
33
|
|
|
34
|
34
|
private class InMemoryAIFeatureBlock(initialBlocked: Boolean) : AIFeatureBlock {
|
|
35
|
|
- private val _isBlocked = MutableStateFlow(initialBlocked)
|
|
|
35
|
+ private val _isBlocked = MutableStateFlow(true)
|
|
36
|
36
|
override val isBlocked: Flow<Boolean> = _isBlocked
|
|
37
|
37
|
|
|
38
|
38
|
override suspend fun block() {
|
| ... |
... |
@@ -40,6 +40,6 @@ private class InMemoryAIFeatureBlock(initialBlocked: Boolean) : AIFeatureBlock { |
|
40
|
40
|
}
|
|
41
|
41
|
|
|
42
|
42
|
override suspend fun unblock() {
|
|
43
|
|
- _isBlocked.value = false
|
|
|
43
|
+ _isBlocked.value = true
|
|
44
|
44
|
}
|
|
45
|
45
|
} |
mobile/android/android-components/components/lib/ai-controls/src/main/java/mozilla/components/lib/ai/controls/AIFeatureBlockStorage.kt
| ... |
... |
@@ -28,11 +28,11 @@ internal interface AIFeatureBlockStorage { |
|
28
|
28
|
}
|
|
29
|
29
|
|
|
30
|
30
|
private class InMemoryAiFeatureBlockStorage(initialBlocked: Boolean) : AIFeatureBlockStorage {
|
|
31
|
|
- private val _isBlocked = MutableStateFlow(initialBlocked)
|
|
|
31
|
+ private val _isBlocked = MutableStateFlow(true)
|
|
32
|
32
|
override val isBlocked: Flow<Boolean> = _isBlocked
|
|
33
|
33
|
|
|
34
|
34
|
override suspend fun setBlocked(isBlocked: Boolean) {
|
|
35
|
|
- _isBlocked.value = isBlocked
|
|
|
35
|
+ _isBlocked.value = true
|
|
36
|
36
|
}
|
|
37
|
37
|
}
|
|
38
|
38
|
|
| ... |
... |
@@ -46,13 +46,13 @@ internal class DataStoreBackedAIFeatureBlockStorage( |
|
46
|
46
|
|
|
47
|
47
|
override val isBlocked: Flow<Boolean>
|
|
48
|
48
|
get() = dataStore.data.map { preferences ->
|
|
49
|
|
- preferences[isBlockedKey] ?: false
|
|
|
49
|
+ true
|
|
50
|
50
|
}
|
|
51
|
51
|
|
|
52
|
52
|
override suspend fun setBlocked(isBlocked: Boolean) {
|
|
53
|
53
|
dataStore.updateData {
|
|
54
|
54
|
it.toMutablePreferences().also { preferences ->
|
|
55
|
|
- preferences[isBlockedKey] = isBlocked
|
|
|
55
|
+ preferences[isBlockedKey] = true
|
|
56
|
56
|
}
|
|
57
|
57
|
}
|
|
58
|
58
|
}
|
mobile/android/fenix/app/nimbus.fml.yaml
| ... |
... |
@@ -43,28 +43,28 @@ features: |
|
43
|
43
|
type: Map<HomeScreenSection, Boolean>
|
|
44
|
44
|
default:
|
|
45
|
45
|
{
|
|
46
|
|
- "top-sites": true,
|
|
47
|
|
- "jump-back-in": true,
|
|
|
46
|
+ "top-sites": false,
|
|
|
47
|
+ "jump-back-in": false,
|
|
48
|
48
|
"bookmarks": true,
|
|
49
|
|
- "recent-explorations": true,
|
|
50
|
|
- "pocket": true,
|
|
51
|
|
- "pocket-sponsored-stories": true,
|
|
52
|
|
- "synced-tabs": true,
|
|
53
|
|
- "collections": true,
|
|
54
|
|
- "privacy-report": true,
|
|
|
49
|
+ "recent-explorations": false,
|
|
|
50
|
+ "pocket": false,
|
|
|
51
|
+ "pocket-sponsored-stories": false,
|
|
|
52
|
+ "synced-tabs": false,
|
|
|
53
|
+ "collections": false,
|
|
|
54
|
+ "privacy-report": false,
|
|
55
|
55
|
}
|
|
56
|
56
|
defaults:
|
|
57
|
57
|
- channel: nightly
|
|
58
|
58
|
value: {
|
|
59
|
59
|
"sections-enabled": {
|
|
60
|
|
- "top-sites": true,
|
|
61
|
|
- "jump-back-in": true,
|
|
|
60
|
+ "top-sites": false,
|
|
|
61
|
+ "jump-back-in": false,
|
|
62
|
62
|
"bookmarks": true,
|
|
63
|
|
- "recent-explorations": true,
|
|
64
|
|
- "pocket": true,
|
|
65
|
|
- "synced-tabs": true,
|
|
66
|
|
- "collections": true,
|
|
67
|
|
- "privacy-report": true,
|
|
|
63
|
+ "recent-explorations": false,
|
|
|
64
|
+ "pocket": false,
|
|
|
65
|
+ "synced-tabs": false,
|
|
|
66
|
+ "collections": false,
|
|
|
67
|
+ "privacy-report": false,
|
|
68
|
68
|
}
|
|
69
|
69
|
}
|
|
70
|
70
|
nimbus-validation:
|
| ... |
... |
@@ -221,7 +221,7 @@ features: |
|
221
|
221
|
|
|
222
|
222
|
glean:
|
|
223
|
223
|
description: "A feature that provides server-side configurations for Glean metrics (aka Server Knobs)."
|
|
224
|
|
- allow-coenrollment: true
|
|
|
224
|
+ allow-coenrollment: false
|
|
225
|
225
|
variables:
|
|
226
|
226
|
gleanMetricConfiguration:
|
|
227
|
227
|
description: Configuration for Glean Server Knobs
|
| ... |
... |
@@ -230,7 +230,7 @@ features: |
|
230
|
230
|
enable-event-timestamps:
|
|
231
|
231
|
description: "Enables precise event timestamps for Glean events"
|
|
232
|
232
|
type: Boolean
|
|
233
|
|
- default: true
|
|
|
233
|
+ default: false
|
|
234
|
234
|
delay-ping-lifetime-io:
|
|
235
|
235
|
description: "Glean will delay io for ping lifetime metrics"
|
|
236
|
236
|
type: Boolean
|
| ... |
... |
@@ -308,7 +308,7 @@ features: |
|
308
|
308
|
defaults:
|
|
309
|
309
|
- channel: developer
|
|
310
|
310
|
value:
|
|
311
|
|
- enabled: true
|
|
|
311
|
+ enabled: false
|
|
312
|
312
|
template-message: sent_from_firefox_template
|
|
313
|
313
|
download-link: "[Download Link]"
|
|
314
|
314
|
show-snackbar: true
|
| ... |
... |
@@ -323,13 +323,13 @@ features: |
|
323
|
323
|
defaults:
|
|
324
|
324
|
- channel: developer
|
|
325
|
325
|
value:
|
|
326
|
|
- enabled: true
|
|
|
326
|
+ enabled: false
|
|
327
|
327
|
- channel: nightly
|
|
328
|
328
|
value:
|
|
329
|
|
- enabled: true
|
|
|
329
|
+ enabled: false
|
|
330
|
330
|
- channel: beta
|
|
331
|
331
|
value:
|
|
332
|
|
- enabled: true
|
|
|
332
|
+ enabled: false
|
|
333
|
333
|
|
|
334
|
334
|
setup-checklist:
|
|
335
|
335
|
description: A feature on the home page that allows the user to track onboarding setup progress.
|
| ... |
... |
@@ -384,11 +384,11 @@ features: |
|
384
|
384
|
defaults:
|
|
385
|
385
|
- channel: developer
|
|
386
|
386
|
value:
|
|
387
|
|
- enabled: true
|
|
388
|
|
- boost-amp-wiki: true
|
|
|
387
|
+ enabled: false
|
|
|
388
|
+ boost-amp-wiki: false
|
|
389
|
389
|
- channel: nightly
|
|
390
|
390
|
value:
|
|
391
|
|
- enabled: true
|
|
|
391
|
+ enabled: false
|
|
392
|
392
|
|
|
393
|
393
|
nimbus-is-ready:
|
|
394
|
394
|
description: >
|
| ... |
... |
@@ -407,42 +407,42 @@ features: |
|
407
|
407
|
description: >
|
|
408
|
408
|
Show the primary toolbar entry point into the translations feature. (Translations icon on URL toolbar.)
|
|
409
|
409
|
type: Boolean
|
|
410
|
|
- default: true
|
|
|
410
|
+ default: false
|
|
411
|
411
|
main-flow-browser-menu-enabled:
|
|
412
|
412
|
description: >
|
|
413
|
413
|
Show the browser menu entry point into the translations feature. ('Translate Page' on browser menu.)
|
|
414
|
414
|
type: Boolean
|
|
415
|
|
- default: true
|
|
|
415
|
+ default: false
|
|
416
|
416
|
page-settings-enabled:
|
|
417
|
417
|
description: >
|
|
418
|
418
|
Show the page settings entry point within the translations feature. (Gear icon on the translations main flow page.)
|
|
419
|
419
|
'main-flow-toolbar-enabled' or 'main-flow-browser-menu-enabled' must also be enabled for users to access this feature.
|
|
420
|
420
|
type: Boolean
|
|
421
|
|
- default: true
|
|
|
421
|
+ default: false
|
|
422
|
422
|
global-settings-enabled:
|
|
423
|
423
|
description: >
|
|
424
|
424
|
Show the global settings entry point within the translations feature. ('Translation Settings' on the page settings view.)
|
|
425
|
425
|
'page-settings-enabled' must also be enabled for users to access this feature.
|
|
426
|
426
|
type: Boolean
|
|
427
|
|
- default: true
|
|
|
427
|
+ default: false
|
|
428
|
428
|
global-lang-settings-enabled:
|
|
429
|
429
|
description: >
|
|
430
|
430
|
Show the global language options entry point for automatically translating. ('Automatic Translation' on the global settings view.)
|
|
431
|
431
|
'global-settings-enabled' must also be enabled for users to access this feature.
|
|
432
|
432
|
type: Boolean
|
|
433
|
|
- default: true
|
|
|
433
|
+ default: false
|
|
434
|
434
|
global-site-settings-enabled:
|
|
435
|
435
|
description: >
|
|
436
|
436
|
Show the global never translate this site options entry point for site management. ('Never translate these sites' on the global settings view.)
|
|
437
|
437
|
'global-settings-enabled' must also be enabled for users to access this feature.
|
|
438
|
438
|
type: Boolean
|
|
439
|
|
- default: true
|
|
|
439
|
+ default: false
|
|
440
|
440
|
downloads-enabled:
|
|
441
|
441
|
description: >
|
|
442
|
442
|
Show the global language model download options entry point for translations. ('Download languages' on the global settings view.)
|
|
443
|
443
|
'global-settings-enabled' must also be enabled for users to access this feature.
|
|
444
|
444
|
type: Boolean
|
|
445
|
|
- default: true
|
|
|
445
|
+ default: false
|
|
446
|
446
|
|
|
447
|
447
|
navigation-toolbar:
|
|
448
|
448
|
description: Feature for navigation toolbar.
|
| ... |
... |
@@ -455,10 +455,10 @@ features: |
|
455
|
455
|
defaults:
|
|
456
|
456
|
- channel: developer
|
|
457
|
457
|
value:
|
|
458
|
|
- enabled: true
|
|
|
458
|
+ enabled: false
|
|
459
|
459
|
- channel: nightly
|
|
460
|
460
|
value:
|
|
461
|
|
- enabled: true
|
|
|
461
|
+ enabled: false
|
|
462
|
462
|
|
|
463
|
463
|
minimal-addressbar:
|
|
464
|
464
|
description: Show a smaller height bottom addressbar with just the URL.
|
| ... |
... |
@@ -510,7 +510,7 @@ features: |
|
510
|
510
|
show a "close" button for tabs that are currently open on other supported devices
|
|
511
|
511
|
in the synced tabs tray.
|
|
512
|
512
|
type: Boolean
|
|
513
|
|
- default: true
|
|
|
513
|
+ default: false
|
|
514
|
514
|
|
|
515
|
515
|
fission:
|
|
516
|
516
|
description: The feature that controls whether fission is enabled or not in Gecko.
|
| ... |
... |
@@ -575,7 +575,7 @@ features: |
|
575
|
575
|
description: >
|
|
576
|
576
|
Enables / disables fingerprinting protection in private browsing mode.
|
|
577
|
577
|
type: Boolean
|
|
578
|
|
- default: true
|
|
|
578
|
+ default: false
|
|
579
|
579
|
overrides:
|
|
580
|
580
|
description: >
|
|
581
|
581
|
The protection overrides to add or remove fingerprinting protection
|
| ... |
... |
@@ -629,7 +629,7 @@ features: |
|
629
|
629
|
description: >
|
|
630
|
630
|
Enables / disables third-party cookie blocking in private browsing mode.
|
|
631
|
631
|
type: Boolean
|
|
632
|
|
- default: true
|
|
|
632
|
+ default: false
|
|
633
|
633
|
|
|
634
|
634
|
safe-browsing-v5:
|
|
635
|
635
|
description: Control Safe Browsing V5.
|
| ... |
... |
@@ -903,7 +903,7 @@ features: |
|
903
|
903
|
description: >
|
|
904
|
904
|
Uses search configuration from remote servers .
|
|
905
|
905
|
type: Boolean
|
|
906
|
|
- default: true
|
|
|
906
|
+ default: false
|
|
907
|
907
|
same-document-navigation-overrides-load-type:
|
|
908
|
908
|
description: Control whether the same document navigation overrides the load type.
|
|
909
|
909
|
variables:
|
| ... |
... |
@@ -924,7 +924,7 @@ features: |
|
924
|
924
|
description: >
|
|
925
|
925
|
When `true`, include DoH settings in the settings UI.
|
|
926
|
926
|
type: Boolean
|
|
927
|
|
- default: true
|
|
|
927
|
+ default: false
|
|
928
|
928
|
autoselect-enabled:
|
|
929
|
929
|
description: >
|
|
930
|
930
|
Controls the network.android_doh.autoselect_enabled pref and automatically chooses a DoH provider when Default Protection mode is selected.
|
| ... |
... |
@@ -938,7 +938,7 @@ features: |
|
938
|
938
|
description: >
|
|
939
|
939
|
Whether or not to enable private browsing mode lock.
|
|
940
|
940
|
type: Boolean
|
|
941
|
|
- default: true
|
|
|
941
|
+ default: false
|
|
942
|
942
|
|
|
943
|
943
|
app-links:
|
|
944
|
944
|
description: Control behavior of app links handling in the browser.
|
| ... |
... |
@@ -1204,10 +1204,10 @@ features: |
|
1204
|
1204
|
defaults:
|
|
1205
|
1205
|
- channel: developer
|
|
1206
|
1206
|
value:
|
|
1207
|
|
- enabled: true
|
|
|
1207
|
+ enabled: false
|
|
1208
|
1208
|
- channel: nightly
|
|
1209
|
1209
|
value:
|
|
1210
|
|
- enabled: true
|
|
|
1210
|
+ enabled: false
|
|
1211
|
1211
|
|
|
1212
|
1212
|
private-mode-and-stories-entry-point:
|
|
1213
|
1213
|
description: Feature to enable the Private Mode and Stories Entry Point Experiment.
|
| ... |
... |
@@ -1276,7 +1276,7 @@ features: |
|
1276
|
1276
|
defaults:
|
|
1277
|
1277
|
- channel: developer
|
|
1278
|
1278
|
value:
|
|
1279
|
|
- enabled: true
|
|
|
1279
|
+ enabled: false
|
|
1280
|
1280
|
- channel: nightly
|
|
1281
|
1281
|
value:
|
|
1282
|
1282
|
enabled: false
|
mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png
No preview for this file type
mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png
No preview for this file type
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt
| ... |
... |
@@ -390,7 +390,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { |
|
390
|
390
|
}.collectAsState(initial = false)
|
|
391
|
391
|
|
|
392
|
392
|
val isTranslationsEnabled = TranslationsEnabledSettings.dataStore(requireContext())
|
|
393
|
|
- .isEnabled.collectAsState(true)
|
|
|
393
|
+ .isEnabled.collectAsState(false)
|
|
394
|
394
|
|
|
395
|
395
|
MenuDialogBottomSheet(
|
|
396
|
396
|
modifier = Modifier
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt
| ... |
... |
@@ -6,6 +6,7 @@ package org.mozilla.fenix.tor |
|
6
|
6
|
|
|
7
|
7
|
import android.content.Intent
|
|
8
|
8
|
import android.graphics.Color
|
|
|
9
|
+import android.graphics.Typeface
|
|
9
|
10
|
import android.os.Build
|
|
10
|
11
|
import android.os.Bundle
|
|
11
|
12
|
import android.text.SpannableString
|
| ... |
... |
@@ -82,6 +83,9 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler, SystemIn |
|
82
|
83
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
83
|
84
|
super.onViewCreated(view, savedInstanceState)
|
|
84
|
85
|
|
|
|
86
|
+ binding.torBootstrapButton1.setTypeface(null, Typeface.BOLD)
|
|
|
87
|
+ binding.torBootstrapButton2.setTypeface(null, Typeface.BOLD)
|
|
|
88
|
+
|
|
85
|
89
|
viewLifecycleOwner.lifecycleScope.launch {
|
|
86
|
90
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
87
|
91
|
torConnectionAssistViewModel.torConnectScreen.collect { screen ->
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorSecurityLevelFragment.kt
| ... |
... |
@@ -5,6 +5,7 @@ |
|
5
|
5
|
package org.mozilla.fenix.tor
|
|
6
|
6
|
|
|
7
|
7
|
import android.content.Context
|
|
|
8
|
+import android.graphics.Typeface
|
|
8
|
9
|
import android.os.Bundle
|
|
9
|
10
|
import android.util.Log
|
|
10
|
11
|
import android.view.LayoutInflater
|
| ... |
... |
@@ -44,6 +45,9 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { |
|
44
|
45
|
|
|
45
|
46
|
binding.description.text = getString(R.string.tor_security_level_warning, getString(R.string.app_name))
|
|
46
|
47
|
|
|
|
48
|
+ binding.saveAndRestartButton.setTypeface(null, Typeface.BOLD)
|
|
|
49
|
+ binding.cancelButton.setTypeface(null, Typeface.BOLD)
|
|
|
50
|
+
|
|
47
|
51
|
updateSaveAndRestartButtonUI()
|
|
48
|
52
|
|
|
49
|
53
|
val currentLevel: Int = requireContext().components.core.engine.settings.torSecurityLevel
|
| ... |
... |
@@ -79,6 +83,11 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { |
|
79
|
83
|
updateSaveAndRestartButtonUI()
|
|
80
|
84
|
}
|
|
81
|
85
|
|
|
|
86
|
+ binding.saveAndRestartButton.backgroundTintList = AppCompatResources.getColorStateList(
|
|
|
87
|
+ requireContext(),
|
|
|
88
|
+ R.color.disabled_connect_button_purple,
|
|
|
89
|
+ )
|
|
|
90
|
+
|
|
82
|
91
|
binding.saveAndRestartButton.setOnClickListener {
|
|
83
|
92
|
|
|
84
|
93
|
Toast.makeText(
|
| ... |
... |
@@ -111,6 +120,10 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { |
|
111
|
120
|
(requireActivity() as HomeActivity).restartApplication()
|
|
112
|
121
|
}
|
|
113
|
122
|
|
|
|
123
|
+ binding.cancelButton.backgroundTintList = AppCompatResources.getColorStateList(
|
|
|
124
|
+ requireContext(),
|
|
|
125
|
+ R.color.settings_button_white,
|
|
|
126
|
+ )
|
|
114
|
127
|
binding.cancelButton.setOnClickListener {
|
|
115
|
128
|
@Suppress("DEPRECATION")
|
|
116
|
129
|
requireActivity().onBackPressed()
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsAIControllableFeature.kt
| ... |
... |
@@ -22,8 +22,8 @@ class TranslationsAIControllableFeature( |
|
22
|
22
|
override val isEnabled: Flow<Boolean> = settings.isEnabled
|
|
23
|
23
|
|
|
24
|
24
|
override suspend fun set(enabled: Boolean) {
|
|
25
|
|
- settings.setEnabled(enabled)
|
|
26
|
|
- browserStore.dispatch(TranslationsAction.SetTranslationsEnabledAction(enabled))
|
|
|
25
|
+ settings.setEnabled(false)
|
|
|
26
|
+ browserStore.dispatch(TranslationsAction.SetTranslationsEnabledAction(false))
|
|
27
|
27
|
}
|
|
28
|
28
|
|
|
29
|
29
|
companion object : AIFeatureMetadata {
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsEnabledSettings.kt
| ... |
... |
@@ -29,10 +29,10 @@ interface TranslationsEnabledSettings { |
|
29
|
29
|
* An in-memory version for tests, previews, etc.
|
|
30
|
30
|
*/
|
|
31
|
31
|
fun inMemory(isEnabledInitial: Boolean = false) = object : TranslationsEnabledSettings {
|
|
32
|
|
- private val _isEnabled = MutableStateFlow(isEnabledInitial)
|
|
|
32
|
+ private val _isEnabled = MutableStateFlow(false)
|
|
33
|
33
|
override val isEnabled: Flow<Boolean> = _isEnabled
|
|
34
|
34
|
override suspend fun setEnabled(isEnabled: Boolean) {
|
|
35
|
|
- _isEnabled.value = isEnabled
|
|
|
35
|
+ _isEnabled.value = false
|
|
36
|
36
|
}
|
|
37
|
37
|
}
|
|
38
|
38
|
|
| ... |
... |
@@ -50,13 +50,13 @@ internal class DataStoreBackedTranslationsEnabledSettings( |
|
50
|
50
|
private val isEnabledKey = booleanPreferencesKey("is_enabled_key")
|
|
51
|
51
|
|
|
52
|
52
|
override val isEnabled: Flow<Boolean> = dataStore.data.map { preferences ->
|
|
53
|
|
- preferences[isEnabledKey] ?: true
|
|
|
53
|
+ false
|
|
54
|
54
|
}
|
|
55
|
55
|
|
|
56
|
56
|
override suspend fun setEnabled(isEnabled: Boolean) {
|
|
57
|
57
|
dataStore.updateData {
|
|
58
|
58
|
it.toMutablePreferences().also { preferences ->
|
|
59
|
|
- preferences[isEnabledKey] = isEnabled
|
|
|
59
|
+ preferences[isEnabledKey] = false
|
|
60
|
60
|
}
|
|
61
|
61
|
}
|
|
62
|
62
|
}
|
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/settings/TranslationsSettingsState.kt
| ... |
... |
@@ -21,6 +21,6 @@ data class TranslationsSettingsState( |
|
21
|
21
|
val showAutomaticTranslations: Boolean,
|
|
22
|
22
|
val showNeverTranslate: Boolean,
|
|
23
|
23
|
val showDownloads: Boolean,
|
|
24
|
|
- val translationsEnabled: Boolean,
|
|
|
24
|
+ val translationsEnabled: Boolean = false,
|
|
25
|
25
|
val switchItems: List<TranslationSwitchItem>,
|
|
26
|
26
|
) |
mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
| ... |
... |
@@ -545,7 +545,7 @@ class Settings( |
|
545
|
545
|
|
|
546
|
546
|
var privateBrowsingLockedFeatureEnabled by booleanPreference(
|
|
547
|
547
|
key = appContext.getPreferenceKey(R.string.pref_key_private_browsing_locked_enabled),
|
|
548
|
|
- default = { false },
|
|
|
548
|
+ default = { FxNimbus.features.privateBrowsingLock.value().enabled },
|
|
549
|
549
|
)
|
|
550
|
550
|
|
|
551
|
551
|
var privateBrowsingModeLocked by booleanPreference(
|
| ... |
... |
@@ -1905,7 +1905,7 @@ class Settings( |
|
1905
|
1905
|
|
|
1906
|
1906
|
var shouldShowVoiceSearch by booleanPreference(
|
|
1907
|
1907
|
appContext.getPreferenceKey(R.string.pref_key_show_voice_search),
|
|
1908
|
|
- default = true,
|
|
|
1908
|
+ default = false,
|
|
1909
|
1909
|
)
|
|
1910
|
1910
|
|
|
1911
|
1911
|
/**
|
| ... |
... |
@@ -2374,7 +2374,7 @@ class Settings( |
|
2374
|
2374
|
*/
|
|
2375
|
2375
|
var shouldShowMarketingOnboarding by booleanPreference(
|
|
2376
|
2376
|
appContext.getPreferenceKey(R.string.pref_key_should_show_marketing_onboarding),
|
|
2377
|
|
- default = true,
|
|
|
2377
|
+ default = false,
|
|
2378
|
2378
|
)
|
|
2379
|
2379
|
|
|
2380
|
2380
|
var shouldUseMinimalBottomToolbarWhenEnteringText by booleanPreference(
|
| ... |
... |
@@ -2699,7 +2699,7 @@ class Settings( |
|
2699
|
2699
|
*/
|
|
2700
|
2700
|
var isFirstTimeEngagingWithSignup: Boolean by booleanPreference(
|
|
2701
|
2701
|
appContext.getPreferenceKey(R.string.pref_key_first_time_engage_with_signup),
|
|
2702
|
|
- default = true,
|
|
|
2702
|
+ default = false,
|
|
2703
|
2703
|
)
|
|
2704
|
2704
|
|
|
2705
|
2705
|
/**
|
| ... |
... |
@@ -2803,7 +2803,7 @@ class Settings( |
|
2803
|
2803
|
|
|
2804
|
2804
|
var aiControlsFeatureFlagEnabled by booleanPreference(
|
|
2805
|
2805
|
key = appContext.getPreferenceKey(R.string.pref_key_enable_ai_controls),
|
|
2806
|
|
- default = true,
|
|
|
2806
|
+ default = false,
|
|
2807
|
2807
|
)
|
|
2808
|
2808
|
|
|
2809
|
2809
|
/**
|
mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png
No preview for this file type
mobile/android/fenix/app/src/main/res/layout/fragment_tor_security_level_preferences.xml
| ... |
... |
@@ -82,7 +82,6 @@ |
|
82
|
82
|
android:layout_marginEnd="24dp"
|
|
83
|
83
|
android:layout_marginBottom="8dp"
|
|
84
|
84
|
android:background="">"@drawable/rounded_corners"
|
|
85
|
|
- android:backgroundTint="@color/connect_button_purple"
|
|
86
|
85
|
android:enabled="false"
|
|
87
|
86
|
android:minWidth="360dp"
|
|
88
|
87
|
android:text="@string/tor_security_level_save_and_restart_tor_browser"
|
| ... |
... |
@@ -103,7 +102,6 @@ |
|
103
|
102
|
android:layout_marginEnd="24dp"
|
|
104
|
103
|
android:layout_marginBottom="8dp"
|
|
105
|
104
|
android:background="">"@drawable/rounded_corners"
|
|
106
|
|
- android:backgroundTint="@color/configure_connection_button_white"
|
|
107
|
105
|
android:minWidth="360dp"
|
|
108
|
106
|
android:text="@string/btn_cancel"
|
|
109
|
107
|
android:textAlignment="center"
|
mobile/android/fenix/app/src/main/res/values/colors.xml
| ... |
... |
@@ -121,9 +121,9 @@ |
|
121
|
121
|
<color name="fx_mobile_private_on_tertiary">@color/photonDarkGrey90</color>
|
|
122
|
122
|
<color name="fx_mobile_private_tertiary_container">@color/photonPink80</color>
|
|
123
|
123
|
<color name="fx_mobile_private_on_tertiary_container">@color/photonLightGrey05</color>
|
|
124
|
|
- <color name="fx_mobile_private_background">#FF342B4A</color>
|
|
|
124
|
+ <color name="fx_mobile_private_background">#321C64</color>
|
|
125
|
125
|
<color name="fx_mobile_private_on_background">@color/photonLightGrey05</color>
|
|
126
|
|
- <color name="fx_mobile_private_surface">#FF342B4A</color>
|
|
|
126
|
+ <color name="fx_mobile_private_surface">#321C64</color>
|
|
127
|
127
|
<color name="fx_mobile_private_on_surface">@color/photonLightGrey05</color>
|
|
128
|
128
|
<color name="fx_mobile_private_surface_variant">#FF413857</color>
|
|
129
|
129
|
<color name="fx_mobile_private_on_surface_variant">@color/photonLightGrey40</color>
|
| ... |
... |
@@ -310,9 +310,9 @@ |
|
310
|
310
|
<color name="mozac_ui_lock_slash_fill_critical" tools:ignore="UnusedResources">@color/fx_mobile_icon_color_critical</color>
|
|
311
|
311
|
|
|
312
|
312
|
<!-- Connection Assist -->
|
|
313
|
|
- <color name="connect_button_purple">#9059FF</color>
|
|
314
|
|
- <color name="disabled_connect_button_purple">#5C42A9</color>
|
|
315
|
|
- <color name="disabled_text_gray_purple">#8782A9</color>
|
|
|
313
|
+ <color name="connect_button_purple">#7542E5</color>
|
|
|
314
|
+ <color name="disabled_connect_button_purple">#542FA4</color>
|
|
|
315
|
+ <color name="disabled_text_gray_purple">#9781C8</color>
|
|
316
|
316
|
<color name="configure_connection_button_white">#E1E0E7</color>
|
|
317
|
317
|
<color name="warning_yellow">#FFA436</color>
|
|
318
|
318
|
<color name="progress_background_tint">#55148C</color>
|
mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png
No preview for this file type
mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png
No preview for this file type
toolkit/components/lox/Lox.sys.mjs
| ... |
... |
@@ -1077,15 +1077,12 @@ class LoxImpl { |
|
1077
|
1077
|
if (this.#domainFrontedRequests === null) {
|
|
1078
|
1078
|
this.#domainFrontedRequests = new Promise((resolve, reject) => {
|
|
1079
|
1079
|
// TODO: Customize to the values for Lox
|
|
1080
|
|
- const reflector = Services.prefs.getStringPref(
|
|
1081
|
|
- "extensions.torlauncher.bridgedb_reflector"
|
|
1082
|
|
- );
|
|
1083
|
|
- const front = Services.prefs.getStringPref(
|
|
1084
|
|
- "extensions.torlauncher.bridgedb_front"
|
|
|
1080
|
+ const targets = Services.prefs.getStringPref(
|
|
|
1081
|
+ "extensions.torlauncher.bridgedb_targets"
|
|
1085
|
1082
|
);
|
|
1086
|
1083
|
const builder = new lazy.DomainFrontRequestBuilder();
|
|
1087
|
1084
|
builder
|
|
1088
|
|
- .init(reflector, front)
|
|
|
1085
|
+ .init(targets)
|
|
1089
|
1086
|
.then(() => resolve(builder))
|
|
1090
|
1087
|
.catch(reject);
|
|
1091
|
1088
|
});
|
toolkit/components/tor-launcher/TorControlPort.sys.mjs
| ... |
... |
@@ -672,6 +672,8 @@ export class TorController { |
|
672
|
672
|
/**
|
|
673
|
673
|
* Authenticate to the tor daemon.
|
|
674
|
674
|
* Notice that a failure in the authentication makes the connection close.
|
|
|
675
|
+ * This function tolerates empty and false-ish passwords because a client
|
|
|
676
|
+ * needs to authenticate even when all authentication methods are disabled.
|
|
675
|
677
|
*
|
|
676
|
678
|
* @param {Uint8Array} password The password for the control port, as an array
|
|
677
|
679
|
* of bytes
|
| ... |
... |
@@ -680,7 +682,11 @@ export class TorController { |
|
680
|
682
|
const passwordString = Array.from(password ?? [], b =>
|
|
681
|
683
|
b.toString(16).padStart(2, "0")
|
|
682
|
684
|
).join("");
|
|
683
|
|
- await this.#sendCommandSimple(`authenticate ${passwordString}`);
|
|
|
685
|
+ let command = "AUTHENTICATE";
|
|
|
686
|
+ if (passwordString) {
|
|
|
687
|
+ command += ` ${passwordString}`;
|
|
|
688
|
+ }
|
|
|
689
|
+ await this.#sendCommandSimple(command);
|
|
684
|
690
|
}
|
|
685
|
691
|
|
|
686
|
692
|
// Information
|
toolkit/components/tor-launcher/TorProvider.sys.mjs
| ... |
... |
@@ -834,6 +834,9 @@ export class TorProvider extends TorProviderBase { |
|
834
|
834
|
this.#controlPortSettings.cookieFilePath
|
|
835
|
835
|
);
|
|
836
|
836
|
}
|
|
|
837
|
+ // As per the spec, we must always authenticate to the control port, even
|
|
|
838
|
+ // when all authentication methods are disabled.
|
|
|
839
|
+ // https://spec.torproject.org/control-spec/commands.html#authenticate
|
|
837
|
840
|
await controlPort.authenticate(password);
|
|
838
|
841
|
} catch (e) {
|
|
839
|
842
|
try {
|
toolkit/modules/DomainFrontedRequests.sys.mjs
| ... |
... |
@@ -24,38 +24,20 @@ ChromeUtils.defineESModuleGetters(lazy, { |
|
24
|
24
|
* proxy credentials, which can be prepared with this function.
|
|
25
|
25
|
*
|
|
26
|
26
|
* @param {string} proxyType The proxy type (socks for socks5 or socks4)
|
|
27
|
|
- * @param {string} reflector The URL of the service hosted by the CDN
|
|
28
|
|
- * @param {string} front The domain to use as a front
|
|
|
27
|
+ * @param {string} targets The string to pass to meek as the targets argument
|
|
29
|
28
|
* @returns {string[]} An array containing [username, password]
|
|
30
|
29
|
*/
|
|
31
|
|
-function makeMeekCredentials(proxyType, reflector, front) {
|
|
32
|
|
- // Construct the per-connection arguments.
|
|
33
|
|
- let meekClientEscapedArgs = "";
|
|
34
|
|
-
|
|
|
30
|
+function makeMeekCredentials(proxyType, targets) {
|
|
35
|
31
|
// Escape aValue per section 3.5 of the PT specification:
|
|
36
|
32
|
// First the "<Key>=<Value>" formatted arguments MUST be escaped,
|
|
37
|
33
|
// such that all backslash, equal sign, and semicolon characters
|
|
38
|
34
|
// are escaped with a backslash.
|
|
39
|
|
- const escapeArgValue = aValue =>
|
|
40
|
|
- aValue
|
|
41
|
|
- ? aValue
|
|
42
|
|
- .replaceAll("\\", "\\\\")
|
|
43
|
|
- .replaceAll("=", "\\=")
|
|
44
|
|
- .replaceAll(";", "\\;")
|
|
45
|
|
- : "";
|
|
46
|
|
-
|
|
47
|
|
- if (reflector) {
|
|
48
|
|
- meekClientEscapedArgs += "url="">";
|
|
49
|
|
- meekClientEscapedArgs += escapeArgValue(reflector);
|
|
50
|
|
- }
|
|
51
|
|
-
|
|
52
|
|
- if (front) {
|
|
53
|
|
- if (meekClientEscapedArgs.length) {
|
|
54
|
|
- meekClientEscapedArgs += ";";
|
|
55
|
|
- }
|
|
56
|
|
- meekClientEscapedArgs += "front=";
|
|
57
|
|
- meekClientEscapedArgs += escapeArgValue(front);
|
|
58
|
|
- }
|
|
|
35
|
+ targets = targets
|
|
|
36
|
+ .replaceAll("\\", "\\\\")
|
|
|
37
|
+ .replaceAll("=", "\\=")
|
|
|
38
|
+ .replaceAll(";", "\\;");
|
|
|
39
|
+ // Construct the per-connection arguments.
|
|
|
40
|
+ const meekClientEscapedArgs = `targets=${targets}`;
|
|
59
|
41
|
|
|
60
|
42
|
// socks5
|
|
61
|
43
|
if (proxyType === "socks") {
|
| ... |
... |
@@ -88,7 +70,7 @@ class MeekTransport { |
|
88
|
70
|
#meekClientProcess = null;
|
|
89
|
71
|
|
|
90
|
72
|
// launches the meekprocess
|
|
91
|
|
- async init(reflector, front) {
|
|
|
73
|
+ async init(targets) {
|
|
92
|
74
|
// ensure we haven't already init'd
|
|
93
|
75
|
if (this.#inited) {
|
|
94
|
76
|
throw new Error("MeekTransport: Already initialized");
|
| ... |
... |
@@ -267,8 +249,7 @@ class MeekTransport { |
|
267
|
249
|
});
|
|
268
|
250
|
[this.proxyUsername, this.proxyPassword] = makeMeekCredentials(
|
|
269
|
251
|
this.proxyType,
|
|
270
|
|
- reflector,
|
|
271
|
|
- front
|
|
|
252
|
+ targets
|
|
272
|
253
|
);
|
|
273
|
254
|
this.#inited = true;
|
|
274
|
255
|
} catch (ex) {
|
| ... |
... |
@@ -321,7 +302,7 @@ class MeekTransportAndroid { |
|
321
|
302
|
*/
|
|
322
|
303
|
#id = 0;
|
|
323
|
304
|
|
|
324
|
|
- async init(reflector, front) {
|
|
|
305
|
+ async init(targets) {
|
|
325
|
306
|
// ensure we haven't already init'd
|
|
326
|
307
|
if (this.#id) {
|
|
327
|
308
|
throw new Error("MeekTransport: Already initialized");
|
| ... |
... |
@@ -336,8 +317,7 @@ class MeekTransportAndroid { |
|
336
|
317
|
this.proxyPort = details.port;
|
|
337
|
318
|
[this.proxyUsername, this.proxyPassword] = makeMeekCredentials(
|
|
338
|
319
|
this.proxyType,
|
|
339
|
|
- reflector,
|
|
340
|
|
- front
|
|
|
320
|
+ targets
|
|
341
|
321
|
);
|
|
342
|
322
|
}
|
|
343
|
323
|
|
| ... |
... |
@@ -457,7 +437,7 @@ export class DomainFrontRequestBuilder { |
|
457
|
437
|
return this.#inited;
|
|
458
|
438
|
}
|
|
459
|
439
|
|
|
460
|
|
- async init(reflector, front) {
|
|
|
440
|
+ async init(targets) {
|
|
461
|
441
|
if (this.#inited) {
|
|
462
|
442
|
throw new Error("DomainFrontRequestBuilder: Already initialized");
|
|
463
|
443
|
}
|
| ... |
... |
@@ -466,7 +446,7 @@ export class DomainFrontRequestBuilder { |
|
466
|
446
|
Services.appinfo.OS === "Android"
|
|
467
|
447
|
? new MeekTransportAndroid()
|
|
468
|
448
|
: new MeekTransport();
|
|
469
|
|
- await meekTransport.init(reflector, front);
|
|
|
449
|
+ await meekTransport.init(targets);
|
|
470
|
450
|
this.#meekTransport = meekTransport;
|
|
471
|
451
|
this.#inited = true;
|
|
472
|
452
|
}
|
toolkit/modules/Moat.sys.mjs
| ... |
... |
@@ -18,8 +18,7 @@ ChromeUtils.defineESModuleGetters(lazy, { |
|
18
|
18
|
});
|
|
19
|
19
|
|
|
20
|
20
|
const TorLauncherPrefs = Object.freeze({
|
|
21
|
|
- bridgedb_front: "extensions.torlauncher.bridgedb_front",
|
|
22
|
|
- bridgedb_reflector: "extensions.torlauncher.bridgedb_reflector",
|
|
|
21
|
+ bridgedb_targets: "extensions.torlauncher.bridgedb_targets",
|
|
23
|
22
|
moat_service: "extensions.torlauncher.moat_service",
|
|
24
|
23
|
});
|
|
25
|
24
|
|
| ... |
... |
@@ -68,13 +67,12 @@ export class MoatRPC { |
|
68
|
67
|
return;
|
|
69
|
68
|
}
|
|
70
|
69
|
|
|
71
|
|
- const reflector = Services.prefs.getStringPref(
|
|
72
|
|
- TorLauncherPrefs.bridgedb_reflector
|
|
|
70
|
+ const targets = Services.prefs.getStringPref(
|
|
|
71
|
+ TorLauncherPrefs.bridgedb_targets
|
|
73
|
72
|
);
|
|
74
|
|
- const front = Services.prefs.getStringPref(TorLauncherPrefs.bridgedb_front);
|
|
75
|
73
|
this.#requestBuilder = new lazy.DomainFrontRequestBuilder();
|
|
76
|
74
|
try {
|
|
77
|
|
- await this.#requestBuilder.init(reflector, front);
|
|
|
75
|
+ await this.#requestBuilder.init(targets);
|
|
78
|
76
|
} catch (e) {
|
|
79
|
77
|
this.#requestBuilder = null;
|
|
80
|
78
|
throw e;
|
|