ma1 pushed to branch mullvad-browser-115.15.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser
Commits:
5436ef3f by Fatih at 2024-08-31T13:56:21+08:00
Bug 1885101: Match screen and window properties with top window for ScreenRect, ScreenAvailRect and WindowOuterSize. r=timhuang,emilio
This patch removes test_iframe.html. We remove it because the newly introduced test covers the tests done in that test. The reason for removing it in the first place is now that screen properties are inherited/spoofed xorigin, we get a 4px difference. The reasosn for 4px difference is the test runner runs tests in an iframe with a 2px border on each side.
Differential Revision: https://phabricator.services.mozilla.com/D215509
- - - - -
7 changed files:
- docshell/base/BrowsingContext.h
- docshell/base/CanonicalBrowsingContext.cpp
- dom/base/nsGlobalWindowOuter.cpp
- dom/base/nsScreen.cpp
- dom/base/nsScreen.h
- layout/base/nsPresContext.cpp
- layout/base/nsPresContext.h
Changes:
=====================================
docshell/base/BrowsingContext.h
=====================================
@@ -32,6 +32,9 @@
#include "nsILoadInfo.h"
#include "nsILoadContext.h"
#include "nsThreadUtils.h"
+// It seems ESR-115 is missing the definitions of CSSIntSize, so add this
+// header to include it
+#include "Units.h"
class nsDocShellLoadState;
class nsGlobalWindowInner;
@@ -266,7 +269,10 @@ struct EmbedderColorSchemes {
* a content process. */ \
FIELD(EmbeddedInContentDocument, bool) \
/* If true, this browsing context is within a hidden embedded document. */ \
- FIELD(IsUnderHiddenEmbedderElement, bool)
+ FIELD(IsUnderHiddenEmbedderElement, bool) \
+ /* Used to propagate window.top's inner size for RFPTarget::Window* \
+ * protections */ \
+ FIELD(TopInnerSizeForRFP, mozilla::CSSIntSize)
// BrowsingContext, in this context, is the cross process replicated
// environment in which information about documents is stored. In
@@ -1231,6 +1237,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
const bool& aIsUnderHiddenEmbedderElement,
ContentParent* aSource);
+ bool CanSet(FieldIndex<IDX_TopInnerSizeForRFP>, bool, ContentParent*) {
+ return IsTop();
+ }
+
bool CanSet(FieldIndex<IDX_EmbeddedInContentDocument>, bool,
ContentParent* aSource) {
return CheckOnlyEmbedderCanSet(aSource);
=====================================
docshell/base/CanonicalBrowsingContext.cpp
=====================================
@@ -318,6 +318,7 @@ void CanonicalBrowsingContext::ReplacedBy(
txn.SetEmbedderColorSchemes(GetEmbedderColorSchemes());
txn.SetHasRestoreData(GetHasRestoreData());
txn.SetShouldDelayMediaFromStart(GetShouldDelayMediaFromStart());
+ txn.SetTopInnerSizeForRFP(GetTopInnerSizeForRFP());
// Propagate some settings on BrowsingContext replacement so they're not lost
// on bfcached navigations. These are important for GeckoView (see bug
=====================================
dom/base/nsGlobalWindowOuter.cpp
=====================================
@@ -3581,9 +3581,10 @@ CSSIntSize nsGlobalWindowOuter::GetOuterSize(CallerType aCallerType,
ErrorResult& aError) {
if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType,
RFPTarget::Unknown)) {
- CSSSize size;
- aError = GetInnerSize(size);
- return RoundedToInt(size);
+ if (BrowsingContext* bc = GetBrowsingContext()) {
+ return bc->Top()->GetTopInnerSizeForRFP();
+ }
+ return {};
}
// Windows showing documents in RDM panes and any subframes within them
=====================================
dom/base/nsScreen.cpp
=====================================
@@ -81,7 +81,7 @@ nsDeviceContext* nsScreen::GetDeviceContext() const {
nsresult nsScreen::GetRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -113,7 +113,7 @@ nsresult nsScreen::GetRect(CSSIntRect& aRect) {
nsresult nsScreen::GetAvailRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -208,20 +208,14 @@ JSObject* nsScreen::WrapObject(JSContext* aCx,
return Screen_Binding::Wrap(aCx, this, aGivenProto);
}
-nsresult nsScreen::GetWindowInnerRect(CSSIntRect& aRect) {
- aRect.x = 0;
- aRect.y = 0;
- nsCOMPtr<nsPIDOMWindowInner> win = GetOwner();
- if (!win) {
- return NS_ERROR_FAILURE;
+nsresult nsScreen::GetTopWindowInnerRectForRFP(CSSIntRect& aRect) {
+ aRect = {};
+ if (nsPIDOMWindowInner* inner = GetOwner()) {
+ if (BrowsingContext* bc = inner->GetBrowsingContext()) {
+ CSSIntSize size = bc->Top()->GetTopInnerSizeForRFP();
+ aRect = {0, 0, size.width, size.height};
+ }
}
- double width;
- double height;
- nsresult rv = win->GetInnerWidth(&width);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = win->GetInnerHeight(&height);
- NS_ENSURE_SUCCESS(rv, rv);
- aRect.SizeTo(std::round(width), std::round(height));
return NS_OK;
}
=====================================
dom/base/nsScreen.h
=====================================
@@ -127,7 +127,9 @@ class nsScreen : public mozilla::DOMEventTargetHelper {
nsDeviceContext* GetDeviceContext() const;
nsresult GetRect(mozilla::CSSIntRect& aRect);
nsresult GetAvailRect(mozilla::CSSIntRect& aRect);
- nsresult GetWindowInnerRect(mozilla::CSSIntRect& aRect);
+ // Sometime between ESR-115 and ESR-128 the function signature changed, so we
+ // revert to the ESR-115 way of doing things
+ nsresult GetTopWindowInnerRectForRFP(mozilla::CSSIntRect& aRect);
private:
explicit nsScreen(nsPIDOMWindowInner* aWindow);
=====================================
layout/base/nsPresContext.cpp
=====================================
@@ -1448,6 +1448,26 @@ void nsPresContext::SetOverrideDPPX(float aDPPX) {
MediaFeatureChangePropagation::JustThisDocument);
}
+void nsPresContext::UpdateTopInnerSizeForRFP() {
+// RFPTarget::WindowOuterSize does not exist in ESR-115 so use fallback
+ if (!mDocument->ShouldResistFingerprinting(RFPTarget::Unknown) ||
+ !mDocument->GetBrowsingContext() ||
+ !mDocument->GetBrowsingContext()->IsTop()) {
+ return;
+ }
+
+ CSSSize size = CSSPixel::FromAppUnits(GetVisibleArea().Size());
+
+ // The upstream version of this patch had conditional logic based on the
+ // dom.innerSize.rounding pref which does not exist in ESR-115, so we
+ // pick the branch it would have taken for the pref's default value (2)
+ size.width = std::truncf(size.width);
+ size.height = std::truncf(size.height);
+
+ Unused << mDocument->GetBrowsingContext()->SetTopInnerSizeForRFP(
+ CSSIntSize{(int)size.width, (int)size.height});
+}
+
gfxSize nsPresContext::ScreenSizeInchesForFontInflation(bool* aChanged) {
if (aChanged) {
*aChanged = false;
@@ -2979,6 +2999,8 @@ void nsPresContext::SetVisibleArea(const nsRect& r) {
{mozilla::MediaFeatureChangeReason::ViewportChange},
MediaFeatureChangePropagation::JustThisDocument);
}
+
+ UpdateTopInnerSizeForRFP();
}
}
=====================================
layout/base/nsPresContext.h
=====================================
@@ -549,6 +549,7 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
void SetFullZoom(float aZoom);
void SetOverrideDPPX(float);
void SetInRDMPane(bool aInRDMPane);
+ void UpdateTopInnerSizeForRFP();
public:
float GetFullZoom() { return mFullZoom; }
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/543…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/543…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch base-browser-115.15.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
d8af0f3f by Fatih at 2024-08-31T13:56:14+08:00
Bug 1885101: Match screen and window properties with top window for ScreenRect, ScreenAvailRect and WindowOuterSize. r=timhuang,emilio
This patch removes test_iframe.html. We remove it because the newly introduced test covers the tests done in that test. The reason for removing it in the first place is now that screen properties are inherited/spoofed xorigin, we get a 4px difference. The reasosn for 4px difference is the test runner runs tests in an iframe with a 2px border on each side.
Differential Revision: https://phabricator.services.mozilla.com/D215509
- - - - -
7 changed files:
- docshell/base/BrowsingContext.h
- docshell/base/CanonicalBrowsingContext.cpp
- dom/base/nsGlobalWindowOuter.cpp
- dom/base/nsScreen.cpp
- dom/base/nsScreen.h
- layout/base/nsPresContext.cpp
- layout/base/nsPresContext.h
Changes:
=====================================
docshell/base/BrowsingContext.h
=====================================
@@ -32,6 +32,9 @@
#include "nsILoadInfo.h"
#include "nsILoadContext.h"
#include "nsThreadUtils.h"
+// It seems ESR-115 is missing the definitions of CSSIntSize, so add this
+// header to include it
+#include "Units.h"
class nsDocShellLoadState;
class nsGlobalWindowInner;
@@ -266,7 +269,10 @@ struct EmbedderColorSchemes {
* a content process. */ \
FIELD(EmbeddedInContentDocument, bool) \
/* If true, this browsing context is within a hidden embedded document. */ \
- FIELD(IsUnderHiddenEmbedderElement, bool)
+ FIELD(IsUnderHiddenEmbedderElement, bool) \
+ /* Used to propagate window.top's inner size for RFPTarget::Window* \
+ * protections */ \
+ FIELD(TopInnerSizeForRFP, mozilla::CSSIntSize)
// BrowsingContext, in this context, is the cross process replicated
// environment in which information about documents is stored. In
@@ -1231,6 +1237,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
const bool& aIsUnderHiddenEmbedderElement,
ContentParent* aSource);
+ bool CanSet(FieldIndex<IDX_TopInnerSizeForRFP>, bool, ContentParent*) {
+ return IsTop();
+ }
+
bool CanSet(FieldIndex<IDX_EmbeddedInContentDocument>, bool,
ContentParent* aSource) {
return CheckOnlyEmbedderCanSet(aSource);
=====================================
docshell/base/CanonicalBrowsingContext.cpp
=====================================
@@ -318,6 +318,7 @@ void CanonicalBrowsingContext::ReplacedBy(
txn.SetEmbedderColorSchemes(GetEmbedderColorSchemes());
txn.SetHasRestoreData(GetHasRestoreData());
txn.SetShouldDelayMediaFromStart(GetShouldDelayMediaFromStart());
+ txn.SetTopInnerSizeForRFP(GetTopInnerSizeForRFP());
// Propagate some settings on BrowsingContext replacement so they're not lost
// on bfcached navigations. These are important for GeckoView (see bug
=====================================
dom/base/nsGlobalWindowOuter.cpp
=====================================
@@ -3581,9 +3581,10 @@ CSSIntSize nsGlobalWindowOuter::GetOuterSize(CallerType aCallerType,
ErrorResult& aError) {
if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType,
RFPTarget::Unknown)) {
- CSSSize size;
- aError = GetInnerSize(size);
- return RoundedToInt(size);
+ if (BrowsingContext* bc = GetBrowsingContext()) {
+ return bc->Top()->GetTopInnerSizeForRFP();
+ }
+ return {};
}
// Windows showing documents in RDM panes and any subframes within them
=====================================
dom/base/nsScreen.cpp
=====================================
@@ -81,7 +81,7 @@ nsDeviceContext* nsScreen::GetDeviceContext() const {
nsresult nsScreen::GetRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -113,7 +113,7 @@ nsresult nsScreen::GetRect(CSSIntRect& aRect) {
nsresult nsScreen::GetAvailRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -208,20 +208,14 @@ JSObject* nsScreen::WrapObject(JSContext* aCx,
return Screen_Binding::Wrap(aCx, this, aGivenProto);
}
-nsresult nsScreen::GetWindowInnerRect(CSSIntRect& aRect) {
- aRect.x = 0;
- aRect.y = 0;
- nsCOMPtr<nsPIDOMWindowInner> win = GetOwner();
- if (!win) {
- return NS_ERROR_FAILURE;
+nsresult nsScreen::GetTopWindowInnerRectForRFP(CSSIntRect& aRect) {
+ aRect = {};
+ if (nsPIDOMWindowInner* inner = GetOwner()) {
+ if (BrowsingContext* bc = inner->GetBrowsingContext()) {
+ CSSIntSize size = bc->Top()->GetTopInnerSizeForRFP();
+ aRect = {0, 0, size.width, size.height};
+ }
}
- double width;
- double height;
- nsresult rv = win->GetInnerWidth(&width);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = win->GetInnerHeight(&height);
- NS_ENSURE_SUCCESS(rv, rv);
- aRect.SizeTo(std::round(width), std::round(height));
return NS_OK;
}
=====================================
dom/base/nsScreen.h
=====================================
@@ -127,7 +127,9 @@ class nsScreen : public mozilla::DOMEventTargetHelper {
nsDeviceContext* GetDeviceContext() const;
nsresult GetRect(mozilla::CSSIntRect& aRect);
nsresult GetAvailRect(mozilla::CSSIntRect& aRect);
- nsresult GetWindowInnerRect(mozilla::CSSIntRect& aRect);
+ // Sometime between ESR-115 and ESR-128 the function signature changed, so we
+ // revert to the ESR-115 way of doing things
+ nsresult GetTopWindowInnerRectForRFP(mozilla::CSSIntRect& aRect);
private:
explicit nsScreen(nsPIDOMWindowInner* aWindow);
=====================================
layout/base/nsPresContext.cpp
=====================================
@@ -1448,6 +1448,26 @@ void nsPresContext::SetOverrideDPPX(float aDPPX) {
MediaFeatureChangePropagation::JustThisDocument);
}
+void nsPresContext::UpdateTopInnerSizeForRFP() {
+// RFPTarget::WindowOuterSize does not exist in ESR-115 so use fallback
+ if (!mDocument->ShouldResistFingerprinting(RFPTarget::Unknown) ||
+ !mDocument->GetBrowsingContext() ||
+ !mDocument->GetBrowsingContext()->IsTop()) {
+ return;
+ }
+
+ CSSSize size = CSSPixel::FromAppUnits(GetVisibleArea().Size());
+
+ // The upstream version of this patch had conditional logic based on the
+ // dom.innerSize.rounding pref which does not exist in ESR-115, so we
+ // pick the branch it would have taken for the pref's default value (2)
+ size.width = std::truncf(size.width);
+ size.height = std::truncf(size.height);
+
+ Unused << mDocument->GetBrowsingContext()->SetTopInnerSizeForRFP(
+ CSSIntSize{(int)size.width, (int)size.height});
+}
+
gfxSize nsPresContext::ScreenSizeInchesForFontInflation(bool* aChanged) {
if (aChanged) {
*aChanged = false;
@@ -2979,6 +2999,8 @@ void nsPresContext::SetVisibleArea(const nsRect& r) {
{mozilla::MediaFeatureChangeReason::ViewportChange},
MediaFeatureChangePropagation::JustThisDocument);
}
+
+ UpdateTopInnerSizeForRFP();
}
}
=====================================
layout/base/nsPresContext.h
=====================================
@@ -549,6 +549,7 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
void SetFullZoom(float aZoom);
void SetOverrideDPPX(float);
void SetInRDMPane(bool aInRDMPane);
+ void UpdateTopInnerSizeForRFP();
public:
float GetFullZoom() { return mFullZoom; }
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/d8af0f3…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/d8af0f3…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch tor-browser-115.15.0esr-13.5-2 at The Tor Project / Applications / Tor Browser
Commits:
ff2ba9f1 by Fatih at 2024-08-31T13:56:08+08:00
Bug 1885101: Match screen and window properties with top window for ScreenRect, ScreenAvailRect and WindowOuterSize. r=timhuang,emilio
This patch removes test_iframe.html. We remove it because the newly introduced test covers the tests done in that test. The reason for removing it in the first place is now that screen properties are inherited/spoofed xorigin, we get a 4px difference. The reasosn for 4px difference is the test runner runs tests in an iframe with a 2px border on each side.
Differential Revision: https://phabricator.services.mozilla.com/D215509
- - - - -
7 changed files:
- docshell/base/BrowsingContext.h
- docshell/base/CanonicalBrowsingContext.cpp
- dom/base/nsGlobalWindowOuter.cpp
- dom/base/nsScreen.cpp
- dom/base/nsScreen.h
- layout/base/nsPresContext.cpp
- layout/base/nsPresContext.h
Changes:
=====================================
docshell/base/BrowsingContext.h
=====================================
@@ -32,6 +32,9 @@
#include "nsILoadInfo.h"
#include "nsILoadContext.h"
#include "nsThreadUtils.h"
+// It seems ESR-115 is missing the definitions of CSSIntSize, so add this
+// header to include it
+#include "Units.h"
class nsDocShellLoadState;
class nsGlobalWindowInner;
@@ -266,7 +269,10 @@ struct EmbedderColorSchemes {
* a content process. */ \
FIELD(EmbeddedInContentDocument, bool) \
/* If true, this browsing context is within a hidden embedded document. */ \
- FIELD(IsUnderHiddenEmbedderElement, bool)
+ FIELD(IsUnderHiddenEmbedderElement, bool) \
+ /* Used to propagate window.top's inner size for RFPTarget::Window* \
+ * protections */ \
+ FIELD(TopInnerSizeForRFP, mozilla::CSSIntSize)
// BrowsingContext, in this context, is the cross process replicated
// environment in which information about documents is stored. In
@@ -1231,6 +1237,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
const bool& aIsUnderHiddenEmbedderElement,
ContentParent* aSource);
+ bool CanSet(FieldIndex<IDX_TopInnerSizeForRFP>, bool, ContentParent*) {
+ return IsTop();
+ }
+
bool CanSet(FieldIndex<IDX_EmbeddedInContentDocument>, bool,
ContentParent* aSource) {
return CheckOnlyEmbedderCanSet(aSource);
=====================================
docshell/base/CanonicalBrowsingContext.cpp
=====================================
@@ -318,6 +318,7 @@ void CanonicalBrowsingContext::ReplacedBy(
txn.SetEmbedderColorSchemes(GetEmbedderColorSchemes());
txn.SetHasRestoreData(GetHasRestoreData());
txn.SetShouldDelayMediaFromStart(GetShouldDelayMediaFromStart());
+ txn.SetTopInnerSizeForRFP(GetTopInnerSizeForRFP());
// Propagate some settings on BrowsingContext replacement so they're not lost
// on bfcached navigations. These are important for GeckoView (see bug
=====================================
dom/base/nsGlobalWindowOuter.cpp
=====================================
@@ -3582,9 +3582,10 @@ CSSIntSize nsGlobalWindowOuter::GetOuterSize(CallerType aCallerType,
ErrorResult& aError) {
if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType,
RFPTarget::Unknown)) {
- CSSSize size;
- aError = GetInnerSize(size);
- return RoundedToInt(size);
+ if (BrowsingContext* bc = GetBrowsingContext()) {
+ return bc->Top()->GetTopInnerSizeForRFP();
+ }
+ return {};
}
// Windows showing documents in RDM panes and any subframes within them
=====================================
dom/base/nsScreen.cpp
=====================================
@@ -81,7 +81,7 @@ nsDeviceContext* nsScreen::GetDeviceContext() const {
nsresult nsScreen::GetRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -113,7 +113,7 @@ nsresult nsScreen::GetRect(CSSIntRect& aRect) {
nsresult nsScreen::GetAvailRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -208,20 +208,14 @@ JSObject* nsScreen::WrapObject(JSContext* aCx,
return Screen_Binding::Wrap(aCx, this, aGivenProto);
}
-nsresult nsScreen::GetWindowInnerRect(CSSIntRect& aRect) {
- aRect.x = 0;
- aRect.y = 0;
- nsCOMPtr<nsPIDOMWindowInner> win = GetOwner();
- if (!win) {
- return NS_ERROR_FAILURE;
+nsresult nsScreen::GetTopWindowInnerRectForRFP(CSSIntRect& aRect) {
+ aRect = {};
+ if (nsPIDOMWindowInner* inner = GetOwner()) {
+ if (BrowsingContext* bc = inner->GetBrowsingContext()) {
+ CSSIntSize size = bc->Top()->GetTopInnerSizeForRFP();
+ aRect = {0, 0, size.width, size.height};
+ }
}
- double width;
- double height;
- nsresult rv = win->GetInnerWidth(&width);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = win->GetInnerHeight(&height);
- NS_ENSURE_SUCCESS(rv, rv);
- aRect.SizeTo(std::round(width), std::round(height));
return NS_OK;
}
=====================================
dom/base/nsScreen.h
=====================================
@@ -127,7 +127,9 @@ class nsScreen : public mozilla::DOMEventTargetHelper {
nsDeviceContext* GetDeviceContext() const;
nsresult GetRect(mozilla::CSSIntRect& aRect);
nsresult GetAvailRect(mozilla::CSSIntRect& aRect);
- nsresult GetWindowInnerRect(mozilla::CSSIntRect& aRect);
+ // Sometime between ESR-115 and ESR-128 the function signature changed, so we
+ // revert to the ESR-115 way of doing things
+ nsresult GetTopWindowInnerRectForRFP(mozilla::CSSIntRect& aRect);
private:
explicit nsScreen(nsPIDOMWindowInner* aWindow);
=====================================
layout/base/nsPresContext.cpp
=====================================
@@ -1448,6 +1448,26 @@ void nsPresContext::SetOverrideDPPX(float aDPPX) {
MediaFeatureChangePropagation::JustThisDocument);
}
+void nsPresContext::UpdateTopInnerSizeForRFP() {
+// RFPTarget::WindowOuterSize does not exist in ESR-115 so use fallback
+ if (!mDocument->ShouldResistFingerprinting(RFPTarget::Unknown) ||
+ !mDocument->GetBrowsingContext() ||
+ !mDocument->GetBrowsingContext()->IsTop()) {
+ return;
+ }
+
+ CSSSize size = CSSPixel::FromAppUnits(GetVisibleArea().Size());
+
+ // The upstream version of this patch had conditional logic based on the
+ // dom.innerSize.rounding pref which does not exist in ESR-115, so we
+ // pick the branch it would have taken for the pref's default value (2)
+ size.width = std::truncf(size.width);
+ size.height = std::truncf(size.height);
+
+ Unused << mDocument->GetBrowsingContext()->SetTopInnerSizeForRFP(
+ CSSIntSize{(int)size.width, (int)size.height});
+}
+
gfxSize nsPresContext::ScreenSizeInchesForFontInflation(bool* aChanged) {
if (aChanged) {
*aChanged = false;
@@ -2979,6 +2999,8 @@ void nsPresContext::SetVisibleArea(const nsRect& r) {
{mozilla::MediaFeatureChangeReason::ViewportChange},
MediaFeatureChangePropagation::JustThisDocument);
}
+
+ UpdateTopInnerSizeForRFP();
}
}
=====================================
layout/base/nsPresContext.h
=====================================
@@ -549,6 +549,7 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
void SetFullZoom(float aZoom);
void SetOverrideDPPX(float);
void SetInRDMPane(bool aInRDMPane);
+ void UpdateTopInnerSizeForRFP();
public:
float GetFullZoom() { return mFullZoom; }
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/ff2ba9f…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/ff2ba9f…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch tor-browser-115.15.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
fdbe54d5 by Fatih at 2024-08-29T22:23:54+00:00
Bug 1885101: Match screen and window properties with top window for ScreenRect, ScreenAvailRect and WindowOuterSize. r=timhuang,emilio
This patch removes test_iframe.html. We remove it because the newly introduced test covers the tests done in that test. The reason for removing it in the first place is now that screen properties are inherited/spoofed xorigin, we get a 4px difference. The reasosn for 4px difference is the test runner runs tests in an iframe with a 2px border on each side.
Differential Revision: https://phabricator.services.mozilla.com/D215509
- - - - -
7 changed files:
- docshell/base/BrowsingContext.h
- docshell/base/CanonicalBrowsingContext.cpp
- dom/base/nsGlobalWindowOuter.cpp
- dom/base/nsScreen.cpp
- dom/base/nsScreen.h
- layout/base/nsPresContext.cpp
- layout/base/nsPresContext.h
Changes:
=====================================
docshell/base/BrowsingContext.h
=====================================
@@ -32,6 +32,9 @@
#include "nsILoadInfo.h"
#include "nsILoadContext.h"
#include "nsThreadUtils.h"
+// It seems ESR-115 is missing the definitions of CSSIntSize, so add this
+// header to include it
+#include "Units.h"
class nsDocShellLoadState;
class nsGlobalWindowInner;
@@ -266,7 +269,10 @@ struct EmbedderColorSchemes {
* a content process. */ \
FIELD(EmbeddedInContentDocument, bool) \
/* If true, this browsing context is within a hidden embedded document. */ \
- FIELD(IsUnderHiddenEmbedderElement, bool)
+ FIELD(IsUnderHiddenEmbedderElement, bool) \
+ /* Used to propagate window.top's inner size for RFPTarget::Window* \
+ * protections */ \
+ FIELD(TopInnerSizeForRFP, mozilla::CSSIntSize)
// BrowsingContext, in this context, is the cross process replicated
// environment in which information about documents is stored. In
@@ -1231,6 +1237,10 @@ class BrowsingContext : public nsILoadContext, public nsWrapperCache {
const bool& aIsUnderHiddenEmbedderElement,
ContentParent* aSource);
+ bool CanSet(FieldIndex<IDX_TopInnerSizeForRFP>, bool, ContentParent*) {
+ return IsTop();
+ }
+
bool CanSet(FieldIndex<IDX_EmbeddedInContentDocument>, bool,
ContentParent* aSource) {
return CheckOnlyEmbedderCanSet(aSource);
=====================================
docshell/base/CanonicalBrowsingContext.cpp
=====================================
@@ -318,6 +318,7 @@ void CanonicalBrowsingContext::ReplacedBy(
txn.SetEmbedderColorSchemes(GetEmbedderColorSchemes());
txn.SetHasRestoreData(GetHasRestoreData());
txn.SetShouldDelayMediaFromStart(GetShouldDelayMediaFromStart());
+ txn.SetTopInnerSizeForRFP(GetTopInnerSizeForRFP());
// Propagate some settings on BrowsingContext replacement so they're not lost
// on bfcached navigations. These are important for GeckoView (see bug
=====================================
dom/base/nsGlobalWindowOuter.cpp
=====================================
@@ -3582,9 +3582,10 @@ CSSIntSize nsGlobalWindowOuter::GetOuterSize(CallerType aCallerType,
ErrorResult& aError) {
if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType,
RFPTarget::Unknown)) {
- CSSSize size;
- aError = GetInnerSize(size);
- return RoundedToInt(size);
+ if (BrowsingContext* bc = GetBrowsingContext()) {
+ return bc->Top()->GetTopInnerSizeForRFP();
+ }
+ return {};
}
// Windows showing documents in RDM panes and any subframes within them
=====================================
dom/base/nsScreen.cpp
=====================================
@@ -81,7 +81,7 @@ nsDeviceContext* nsScreen::GetDeviceContext() const {
nsresult nsScreen::GetRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -113,7 +113,7 @@ nsresult nsScreen::GetRect(CSSIntRect& aRect) {
nsresult nsScreen::GetAvailRect(CSSIntRect& aRect) {
// Return window inner rect to prevent fingerprinting.
if (ShouldResistFingerprinting()) {
- return GetWindowInnerRect(aRect);
+ return GetTopWindowInnerRectForRFP(aRect);
}
// Here we manipulate the value of aRect to represent the screen size,
@@ -208,20 +208,14 @@ JSObject* nsScreen::WrapObject(JSContext* aCx,
return Screen_Binding::Wrap(aCx, this, aGivenProto);
}
-nsresult nsScreen::GetWindowInnerRect(CSSIntRect& aRect) {
- aRect.x = 0;
- aRect.y = 0;
- nsCOMPtr<nsPIDOMWindowInner> win = GetOwner();
- if (!win) {
- return NS_ERROR_FAILURE;
+nsresult nsScreen::GetTopWindowInnerRectForRFP(CSSIntRect& aRect) {
+ aRect = {};
+ if (nsPIDOMWindowInner* inner = GetOwner()) {
+ if (BrowsingContext* bc = inner->GetBrowsingContext()) {
+ CSSIntSize size = bc->Top()->GetTopInnerSizeForRFP();
+ aRect = {0, 0, size.width, size.height};
+ }
}
- double width;
- double height;
- nsresult rv = win->GetInnerWidth(&width);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = win->GetInnerHeight(&height);
- NS_ENSURE_SUCCESS(rv, rv);
- aRect.SizeTo(std::round(width), std::round(height));
return NS_OK;
}
=====================================
dom/base/nsScreen.h
=====================================
@@ -127,7 +127,9 @@ class nsScreen : public mozilla::DOMEventTargetHelper {
nsDeviceContext* GetDeviceContext() const;
nsresult GetRect(mozilla::CSSIntRect& aRect);
nsresult GetAvailRect(mozilla::CSSIntRect& aRect);
- nsresult GetWindowInnerRect(mozilla::CSSIntRect& aRect);
+ // Sometime between ESR-115 and ESR-128 the function signature changed, so we
+ // revert to the ESR-115 way of doing things
+ nsresult GetTopWindowInnerRectForRFP(mozilla::CSSIntRect& aRect);
private:
explicit nsScreen(nsPIDOMWindowInner* aWindow);
=====================================
layout/base/nsPresContext.cpp
=====================================
@@ -1448,6 +1448,26 @@ void nsPresContext::SetOverrideDPPX(float aDPPX) {
MediaFeatureChangePropagation::JustThisDocument);
}
+void nsPresContext::UpdateTopInnerSizeForRFP() {
+// RFPTarget::WindowOuterSize does not exist in ESR-115 so use fallback
+ if (!mDocument->ShouldResistFingerprinting(RFPTarget::Unknown) ||
+ !mDocument->GetBrowsingContext() ||
+ !mDocument->GetBrowsingContext()->IsTop()) {
+ return;
+ }
+
+ CSSSize size = CSSPixel::FromAppUnits(GetVisibleArea().Size());
+
+ // The upstream version of this patch had conditional logic based on the
+ // dom.innerSize.rounding pref which does not exist in ESR-115, so we
+ // pick the branch it would have taken for the pref's default value (2)
+ size.width = std::truncf(size.width);
+ size.height = std::truncf(size.height);
+
+ Unused << mDocument->GetBrowsingContext()->SetTopInnerSizeForRFP(
+ CSSIntSize{(int)size.width, (int)size.height});
+}
+
gfxSize nsPresContext::ScreenSizeInchesForFontInflation(bool* aChanged) {
if (aChanged) {
*aChanged = false;
@@ -2979,6 +2999,8 @@ void nsPresContext::SetVisibleArea(const nsRect& r) {
{mozilla::MediaFeatureChangeReason::ViewportChange},
MediaFeatureChangePropagation::JustThisDocument);
}
+
+ UpdateTopInnerSizeForRFP();
}
}
=====================================
layout/base/nsPresContext.h
=====================================
@@ -549,6 +549,7 @@ class nsPresContext : public nsISupports, public mozilla::SupportsWeakPtr {
void SetFullZoom(float aZoom);
void SetOverrideDPPX(float);
void SetInRDMPane(bool aInRDMPane);
+ void UpdateTopInnerSizeForRFP();
public:
float GetFullZoom() { return mFullZoom; }
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/fdbe54d…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/fdbe54d…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch mullvad-browser-115.15.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser
Commits:
0dab02ba by Sam Foster at 2024-08-31T13:05:25+08:00
Bug 1909099 - Always clean up old session restore and sync log files. r=markh,sessionstore-reviewers,dao
Differential Revision: https://phabricator.services.mozilla.com/D217520
- - - - -
1 changed file:
- services/common/logmanager.sys.mjs
Changes:
=====================================
services/common/logmanager.sys.mjs
=====================================
@@ -363,12 +363,7 @@ LogManager.prototype = {
filename,
this._log
);
- // It's not completely clear to markh why we only do log cleanups
- // for errors, but for now the Sync semantics have been copied...
- // (one theory is that only cleaning up on error makes it less
- // likely old error logs would be removed, but that's not true if
- // there are occasional errors - let's address this later!)
- if (reason == this.ERROR_LOG_WRITTEN && !this._cleaningUpFileLogs) {
+ if (!this._cleaningUpFileLogs) {
this._log.trace("Running cleanup.");
try {
await this.cleanupLogs();
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/0da…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/0da…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch base-browser-115.15.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
37d1cbad by Sam Foster at 2024-08-31T13:05:16+08:00
Bug 1909099 - Always clean up old session restore and sync log files. r=markh,sessionstore-reviewers,dao
Differential Revision: https://phabricator.services.mozilla.com/D217520
- - - - -
1 changed file:
- services/common/logmanager.sys.mjs
Changes:
=====================================
services/common/logmanager.sys.mjs
=====================================
@@ -363,12 +363,7 @@ LogManager.prototype = {
filename,
this._log
);
- // It's not completely clear to markh why we only do log cleanups
- // for errors, but for now the Sync semantics have been copied...
- // (one theory is that only cleaning up on error makes it less
- // likely old error logs would be removed, but that's not true if
- // there are occasional errors - let's address this later!)
- if (reason == this.ERROR_LOG_WRITTEN && !this._cleaningUpFileLogs) {
+ if (!this._cleaningUpFileLogs) {
this._log.trace("Running cleanup.");
try {
await this.cleanupLogs();
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/37d1cba…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/37d1cba…
You're receiving this email because of your account on gitlab.torproject.org.
ma1 pushed to branch tor-browser-115.15.0esr-13.5-2 at The Tor Project / Applications / Tor Browser
Commits:
699a06bf by Sam Foster at 2024-08-31T13:05:09+08:00
Bug 1909099 - Always clean up old session restore and sync log files. r=markh,sessionstore-reviewers,dao
Differential Revision: https://phabricator.services.mozilla.com/D217520
- - - - -
1 changed file:
- services/common/logmanager.sys.mjs
Changes:
=====================================
services/common/logmanager.sys.mjs
=====================================
@@ -363,12 +363,7 @@ LogManager.prototype = {
filename,
this._log
);
- // It's not completely clear to markh why we only do log cleanups
- // for errors, but for now the Sync semantics have been copied...
- // (one theory is that only cleaning up on error makes it less
- // likely old error logs would be removed, but that's not true if
- // there are occasional errors - let's address this later!)
- if (reason == this.ERROR_LOG_WRITTEN && !this._cleaningUpFileLogs) {
+ if (!this._cleaningUpFileLogs) {
this._log.trace("Running cleanup.");
try {
await this.cleanupLogs();
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/699a06b…
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/699a06b…
You're receiving this email because of your account on gitlab.torproject.org.