ma1 pushed to branch mullvad-browser-115.8.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser
Commits:
-
bbf5383c
by hackademix at 2024-03-06T18:20:36+01:00
6 changed files:
- browser/app/profile/001-base-profile.js
- dom/base/nsContentUtils.cpp
- dom/base/nsContentUtils.h
- toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
- toolkit/components/windowwatcher/nsWindowWatcher.cpp
- xpfe/appshell/AppWindow.cpp
Changes:
... | ... | @@ -379,6 +379,8 @@ pref("privacy.resistFingerprinting.letterboxing", true); |
379 | 379 | pref("privacy.resistFingerprinting.letterboxing.vcenter", true);
|
380 | 380 | // tor-browser#41917 letterboxing gradient background
|
381 | 381 | pref("privacy.resistFingerprinting.letterboxing.gradient", true);
|
382 | +// tor-browser#41918: should we reuse last window sizes if letterboxing is enabled
|
|
383 | +pref("privacy.resistFingerprinting.letterboxing.rememberSize", false);
|
|
382 | 384 | // tor-browser#41695: how many warnings we show if user closes them without restoring the window size
|
383 | 385 | pref("privacy.resistFingerprinting.resizeWarnings", 3);
|
384 | 386 | // tor-browser#33282: new windows start at 1400x900 when there's enough screen space, otherwise down by 200x100 blocks
|
... | ... | @@ -2663,6 +2663,18 @@ void nsContentUtils::CalcRoundedWindowSizeForResistingFingerprinting( |
2663 | 2663 | *aOutputHeight = resultHeight;
|
2664 | 2664 | }
|
2665 | 2665 | |
2666 | +bool nsContentUtils::ShouldRoundWindowSizeForResistingFingerprinting() {
|
|
2667 | + return !(
|
|
2668 | + Preferences::GetBool("privacy.resistFingerprinting.letterboxing",
|
|
2669 | + false) &&
|
|
2670 | + // We want to round window size at least once in the browser's life time:
|
|
2671 | + // AppWindow::ForceRoundedDimensions() will set this preference to true.
|
|
2672 | + Preferences::GetBool(
|
|
2673 | + "privacy.resistFingerprinting.letterboxing.didForceSize", false) &&
|
|
2674 | + Preferences::GetBool(
|
|
2675 | + "privacy.resistFingerprinting.letterboxing.rememberSize", false));
|
|
2676 | +}
|
|
2677 | + |
|
2666 | 2678 | bool nsContentUtils::ThreadsafeIsCallerChrome() {
|
2667 | 2679 | return NS_IsMainThread() ? IsCallerChrome()
|
2668 | 2680 | : IsCurrentThreadRunningChromeWorker();
|
... | ... | @@ -406,6 +406,10 @@ class nsContentUtils { |
406 | 406 | bool aSetOuterWidth, bool aSetOuterHeight, int32_t* aOutputWidth,
|
407 | 407 | int32_t* aOutputHeight);
|
408 | 408 | |
409 | + // Tell if we actually want to round size of new windows for RFP,
|
|
410 | + // depending on letterboxing status and user's preference.
|
|
411 | + static bool ShouldRoundWindowSizeForResistingFingerprinting();
|
|
412 | + |
|
409 | 413 | /**
|
410 | 414 | * Returns the parent node of aChild crossing document boundaries, but skips
|
411 | 415 | * any cross-process parent frames and continues with the nearest in-process
|
... | ... | @@ -18,6 +18,8 @@ const kPrefLetterboxingVcenter = |
18 | 18 | "privacy.resistFingerprinting.letterboxing.vcenter";
|
19 | 19 | const kPrefLetterboxingGradient =
|
20 | 20 | "privacy.resistFingerprinting.letterboxing.gradient";
|
21 | +const kPrefLetterboxingDidForceSize =
|
|
22 | + "privacy.resistFingerprinting.letterboxing.didForceSize";
|
|
21 | 23 | |
22 | 24 | const kTopicDOMWindowOpened = "domwindowopened";
|
23 | 25 | |
... | ... | @@ -221,6 +223,7 @@ class _RFPHelper { |
221 | 223 | _handlePrefChanged(data) {
|
222 | 224 | switch (data) {
|
223 | 225 | case kPrefResistFingerprinting:
|
226 | + Service.prefs.clearUserPref(kPrefLetterboxingDidForceSize);
|
|
224 | 227 | this._handleResistFingerprintingChanged();
|
225 | 228 | break;
|
226 | 229 | case kPrefSpoofEnglish:
|
... | ... | @@ -228,6 +231,7 @@ class _RFPHelper { |
228 | 231 | this._handleSpoofEnglishChanged();
|
229 | 232 | break;
|
230 | 233 | case kPrefLetterboxing:
|
234 | + Service.prefs.clearUserPref(kPrefLetterboxingDidForceSize);
|
|
231 | 235 | case kPrefLetterboxingVcenter:
|
232 | 236 | case kPrefLetterboxingGradient:
|
233 | 237 | this._handleLetterboxingPrefChanged();
|
... | ... | @@ -2333,7 +2333,9 @@ static void SizeOpenedWindow(nsIDocShellTreeOwner* aTreeOwner, |
2333 | 2333 | screenDesktopRect.Size() / screenCssToDesktopScale;
|
2334 | 2334 | |
2335 | 2335 | if (aSizeSpec.SizeSpecified()) {
|
2336 | - if (!nsContentUtils::ShouldResistFingerprinting()) {
|
|
2336 | + if (!(nsContentUtils::ShouldResistFingerprinting() &&
|
|
2337 | + nsContentUtils::
|
|
2338 | + ShouldRoundWindowSizeForResistingFingerprinting())) {
|
|
2337 | 2339 | /* Unlike position, force size out-of-bounds check only if
|
2338 | 2340 | size actually was specified. Otherwise, intrinsically sized
|
2339 | 2341 | windows are broken. */
|
... | ... | @@ -1123,8 +1123,9 @@ NS_IMETHODIMP AppWindow::GetAvailScreenSize(int32_t* aAvailWidth, |
1123 | 1123 | return NS_OK;
|
1124 | 1124 | }
|
1125 | 1125 | |
1126 | -// Rounds window size to 1000x1000, or, if there isn't enough available
|
|
1127 | -// screen space, to a multiple of 200x100.
|
|
1126 | +// Rounds window size to privacy.window.maxInnerWidth x
|
|
1127 | +// privacy.window.maxInnerWidth, or, if there isn't enough available screen
|
|
1128 | +// space, to a multiple of 200x100.
|
|
1128 | 1129 | NS_IMETHODIMP AppWindow::ForceRoundedDimensions() {
|
1129 | 1130 | if (mIsHiddenWindow) {
|
1130 | 1131 | return NS_OK;
|
... | ... | @@ -1164,6 +1165,11 @@ NS_IMETHODIMP AppWindow::ForceRoundedDimensions() { |
1164 | 1165 | |
1165 | 1166 | SetPrimaryContentSize(targetSizeDev.width, targetSizeDev.height);
|
1166 | 1167 | |
1168 | + // Ensure we force initial rounded size at least once, as checked by
|
|
1169 | + // nsContentUtils::ShouldRoundWindowSizeForResistingFingerprinting().
|
|
1170 | + Preferences::SetBool("privacy.resistFingerprinting.letterboxing.didForceSize",
|
|
1171 | + true);
|
|
1172 | + |
|
1167 | 1173 | return NS_OK;
|
1168 | 1174 | }
|
1169 | 1175 | |
... | ... | @@ -2703,7 +2709,8 @@ void AppWindow::SizeShell() { |
2703 | 2709 | if (nsContentUtils::ShouldResistFingerprinting(
|
2704 | 2710 | "if RFP is enabled we want to round the dimensions of the new"
|
2705 | 2711 | "new pop up window regardless of their origin") &&
|
2706 | - windowType.EqualsLiteral("navigator:browser")) {
|
|
2712 | + windowType.EqualsLiteral("navigator:browser") &&
|
|
2713 | + nsContentUtils::ShouldRoundWindowSizeForResistingFingerprinting()) {
|
|
2707 | 2714 | // Once we've got primary content, force dimensions.
|
2708 | 2715 | if (mPrimaryContentShell || mPrimaryBrowserParent) {
|
2709 | 2716 | ForceRoundedDimensions();
|