[tor-commits] [Git][tpo/applications/tor-browser][tor-browser-115.9.0esr-13.5-1] fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations

richard (@richard) git at gitlab.torproject.org
Mon Apr 8 19:50:20 UTC 2024



richard pushed to branch tor-browser-115.9.0esr-13.5-1 at The Tor Project / Applications / Tor Browser


Commits:
f2f79405 by hackademix at 2024-04-08T19:10:15+00:00
fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations

Bug 42192: Correctly round new windows when bookmarks toolbar is set to "Only Show on New Tab"

- - - - -


1 changed file:

- toolkit/components/resistfingerprinting/RFPHelper.sys.mjs


Changes:

=====================================
toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
=====================================
@@ -537,27 +537,17 @@ class _RFPHelper {
       ])
     );
 
-    if (
-      !win._rfpSizeOffset ||
-      (win._rfpOriginalSize &&
-        win.outerWidth === win._rfpOriginalSize.width &&
-        win.outerHeight === win._rfpOriginalSize.height)
-    ) {
-      const BASELINE_ROUNDING = 10;
-      const offset = s =>
-        s - Math.round(s / BASELINE_ROUNDING) * BASELINE_ROUNDING;
+    const isInitialSize =
+      win._rfpOriginalSize &&
+      win.outerWidth === win._rfpOriginalSize.width &&
+      win.outerHeight === win._rfpOriginalSize.height;
+
+    // We may need to shrink this window to rounded size if the browser container
+    // area is taller than the original, meaning extra chrome (like the optional
+    // "Only Show on New Tab" bookmarks toobar) was present and now gone.
+    const needToShrink =
+      isInitialSize && containerHeight > win._rfpOriginalSize.containerHeight;
 
-      win._rfpSizeOffset = {
-        width: offset(parentWidth),
-        height: offset(parentHeight),
-      };
-      log(
-        `${logPrefix} Window size offsets %o (from %s, %s)`,
-        win._rfpSizeOffset,
-        parentWidth,
-        parentHeight
-      );
-    }
     log(
       `${logPrefix} contentWidth=${contentWidth} contentHeight=${contentHeight} parentWidth=${parentWidth} parentHeight=${parentHeight} containerWidth=${containerWidth} containerHeight=${containerHeight}${
         isNewTab ? " (new tab)." : "."
@@ -573,33 +563,27 @@ class _RFPHelper {
 
     const roundDimensions = (aWidth, aHeight) => {
       const r = (width, height) => {
-        lastRoundedSize = {width, height};
+        lastRoundedSize = { width, height };
+        log(
+          `${logPrefix} roundDimensions(${aWidth}, ${aHeight}) = ${width} x ${height}`
+        );
         return {
           "--letterboxing-width": `var(--rdm-width, ${width}px)`,
           "--letterboxing-height": `var(--rdm-height, ${height}px)`,
-        }
+        };
       };
 
-      let result;
+      log(`${logPrefix} roundDimensions(${aWidth}, ${aHeight})`);
 
-      if (!this.letterboxingEnabled) {
-        const offset = win._rfpSizeOffset;
-        result = r(aWidth - offset.width, aHeight - offset.height);
-        log(
-          `${logPrefix} Letterboxing disabled, applying baseline rounding offsets: (${aWidth}, ${aHeight}) => ${result.width} x ${result.height})`
-        );
-        return result;
+      if (!(isInitialSize || this.letterboxingEnabled)) {
+        // just round size to int
+        return r(aWidth, aHeight);
       }
 
-      log(`${logPrefix} roundDimensions(${aWidth}, ${aHeight})`);
       // If the set is empty, we will round the content with the default
       // stepping size.
       if (!this._letterboxingDimensions.length) {
-        result = r(this.steppedSize(aWidth, true), this.steppedSize(aHeight));
-        log(
-          `${logPrefix} roundDimensions(${aWidth}, ${aHeight}) = ${result.width} x ${result.height}`
-        );
-        return result;
+        return r(this.steppedSize(aWidth, true), this.steppedSize(aHeight));
       }
 
       let matchingArea = aWidth * aHeight;
@@ -625,14 +609,9 @@ class _RFPHelper {
       // If we cannot find any dimensions match to the real content window, this
       // means the content area is smaller the smallest size in the set. In this
       // case, we won't round the size and default to the max.
-      result = targetDimensions
+      return targetDimensions
         ? r(targetDimensions.width, targetDimensions.height)
         : r(aWidth, aHeight);
-
-      log(
-        `${logPrefix} roundDimensions(${aWidth}, ${aHeight}) = ${result.width} x ${result.height}`
-      );
-      return result;
     };
 
     const styleChanges = Object.assign([], {
@@ -654,6 +633,10 @@ class _RFPHelper {
               lazy.logConsole.error(e);
             }
           }
+          if (needToShrink) {
+            win.shrinkToLetterbox();
+            this._recordWindowSize(win);
+          }
         });
       },
     });
@@ -741,15 +724,20 @@ class _RFPHelper {
     aWindow.setTimeout(() => {
       tabBrowser.tabpanels?.classList.add("letterboxing-ready");
       if (!aWindow._rfpOriginalSize) {
-        aWindow._rfpOriginalSize = {
-          width: aWindow.outerWidth,
-          height: aWindow.outerHeight,
-        };
-        log("Recording original window size", aWindow._rfpOriginalSize);
+        this._recordWindowSize(aWindow);
       }
     });
   }
 
+  _recordWindowSize(aWindow) {
+    aWindow._rfpOriginalSize = {
+      width: aWindow.outerWidth,
+      height: aWindow.outerHeight,
+      containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight,
+    };
+    log("Recording original window size", aWindow._rfpOriginalSize);
+  }
+
   // We will attach this method to each browser window. When called
   // it will instantly resize the window to exactly fit the selected
   // (possibly letterboxed) browser.



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/f2f794054eb6bb5c362f4e06afd877ae6df98812

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/f2f794054eb6bb5c362f4e06afd877ae6df98812
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20240408/d9462ff8/attachment-0001.htm>


More information about the tor-commits mailing list