ma1 pushed to branch mullvad-browser-128.9.0esr-14.5-1 at The Tor Project / Applications / Mullvad Browser
Commits:
-
8e3b1f41
by hackademix at 2025-04-08T00:13:48+02:00
3 changed files:
- browser/components/tabbrowser/content/tabbrowser.js
- browser/themes/shared/tabbrowser/content-area.css
- toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
Changes:
| ... | ... | @@ -7513,6 +7513,7 @@ var StatusPanel = { |
| 7513 | 7513 | if (XULBrowserWindow.busyUI) {
|
| 7514 | 7514 | types.push("status");
|
| 7515 | 7515 | }
|
| 7516 | + types.push("letterboxingStatus");
|
|
| 7516 | 7517 | types.push("defaultStatus");
|
| 7517 | 7518 | for (type of types) {
|
| 7518 | 7519 | if ((text = XULBrowserWindow[type])) {
|
| ... | ... | @@ -115,6 +115,7 @@ |
| 115 | 115 | min-width: min(23em, 33%);
|
| 116 | 116 | }
|
| 117 | 117 | |
| 118 | + &[type=letterboxingStatus],
|
|
| 118 | 119 | &[type=overLink] {
|
| 119 | 120 | transition: opacity 120ms ease-out, visibility 120ms;
|
| 120 | 121 | }
|
| ... | ... | @@ -123,12 +124,14 @@ |
| 123 | 124 | direction: ltr;
|
| 124 | 125 | }
|
| 125 | 126 | |
| 127 | + .exclude-letterboxing &[type=letterboxingStatus],
|
|
| 126 | 128 | &[inactive],
|
| 127 | 129 | :root[inDOMFullscreen] &:not([type=overLink]) {
|
| 128 | 130 | transition: none;
|
| 129 | 131 | opacity: 0;
|
| 130 | 132 | visibility: hidden;
|
| 131 | 133 | |
| 134 | + &[previoustype=letterboxingStatus],
|
|
| 132 | 135 | &[previoustype=overLink] {
|
| 133 | 136 | transition: opacity 200ms ease-out, visibility 200ms;
|
| 134 | 137 | }
|
| ... | ... | @@ -177,6 +180,21 @@ |
| 177 | 180 | }
|
| 178 | 181 | }
|
| 179 | 182 | |
| 183 | +#statuspanel[type=letterboxingStatus] > #statuspanel-label,
|
|
| 184 | +#statuspanel[previoustype=letterboxingStatus][inactive] > #statuspanel-label {
|
|
| 185 | + background-image: url("chrome://browser/skin/window.svg");
|
|
| 186 | + background-size: 1em;
|
|
| 187 | + background-repeat: no-repeat;
|
|
| 188 | + background-position-x: .5em;
|
|
| 189 | + background-position-y: center;
|
|
| 190 | + padding-inline-start: 2em;
|
|
| 191 | + -moz-context-properties: fill;
|
|
| 192 | + fill: var(--color-accent-primary);
|
|
| 193 | + @media (forced-colors) {
|
|
| 194 | + fill: var(--icon-color);
|
|
| 195 | + }
|
|
| 196 | +}
|
|
| 197 | + |
|
| 180 | 198 | /**
|
| 181 | 199 | * Dialogs
|
| 182 | 200 | */
|
| ... | ... | @@ -245,7 +245,7 @@ class _RFPHelper { |
| 245 | 245 | switch (aMessage.type) {
|
| 246 | 246 | case "TabOpen": {
|
| 247 | 247 | let browser = aMessage.target.linkedBrowser;
|
| 248 | - this._roundOrResetContentSize(browser, /* isNewTab = */ true);
|
|
| 248 | + this._roundOrResetContentSize(browser, { isNewTab: true });
|
|
| 249 | 249 | browser.ownerGlobal._rfpResizeObserver.observe(browser.parentElement);
|
| 250 | 250 | break;
|
| 251 | 251 | }
|
| ... | ... | @@ -509,7 +509,7 @@ class _RFPHelper { |
| 509 | 509 | );
|
| 510 | 510 | }
|
| 511 | 511 | |
| 512 | - _roundOrResetContentSize(aBrowser, isNewTab = false) {
|
|
| 512 | + _roundOrResetContentSize(aBrowser, context = {}) {
|
|
| 513 | 513 | // We won't do anything for lazy browsers.
|
| 514 | 514 | if (!aBrowser?.isConnected) {
|
| 515 | 515 | return;
|
| ... | ... | @@ -518,7 +518,7 @@ class _RFPHelper { |
| 518 | 518 | // this tab doesn't need letterboxing
|
| 519 | 519 | this._resetContentSize(aBrowser);
|
| 520 | 520 | } else {
|
| 521 | - this._roundContentSize(aBrowser, isNewTab);
|
|
| 521 | + this._roundContentSize(aBrowser, context);
|
|
| 522 | 522 | }
|
| 523 | 523 | }
|
| 524 | 524 | |
| ... | ... | @@ -544,7 +544,8 @@ class _RFPHelper { |
| 544 | 544 | /**
|
| 545 | 545 | * The function will round the given browser size
|
| 546 | 546 | */
|
| 547 | - async _roundContentSize(aBrowser, isNewTab = false) {
|
|
| 547 | + async _roundContentSize(aBrowser, context) {
|
|
| 548 | + const { isResize, isNewTab } = context;
|
|
| 548 | 549 | let logPrefix = `_roundContentSize[${Math.random()}]`;
|
| 549 | 550 | log(logPrefix);
|
| 550 | 551 | let win = aBrowser.ownerGlobal;
|
| ... | ... | @@ -716,6 +717,26 @@ class _RFPHelper { |
| 716 | 717 | borderRadius === 0 ? "hidden" : "",
|
| 717 | 718 | "--letterboxing-border-radius": borderRadius,
|
| 718 | 719 | });
|
| 720 | + |
|
| 721 | + if (
|
|
| 722 | + isResize &&
|
|
| 723 | + this.letterboxingEnabled &&
|
|
| 724 | + (parentWidth > lastRoundedSize.width ||
|
|
| 725 | + parentHeight > lastRoundedSize.height)
|
|
| 726 | + ) {
|
|
| 727 | + const updateStatus = async args => {
|
|
| 728 | + win.XULBrowserWindow.letterboxingStatus = args
|
|
| 729 | + ? await win.document.l10n.formatValue(
|
|
| 730 | + "letterboxing-size-status",
|
|
| 731 | + args
|
|
| 732 | + )
|
|
| 733 | + : "";
|
|
| 734 | + win.StatusPanel.update();
|
|
| 735 | + };
|
|
| 736 | + updateStatus(lastRoundedSize);
|
|
| 737 | + win.clearTimeout(win._letterboxingStatusTimeout);
|
|
| 738 | + win._letterboxingStatusTimeout = win.setTimeout(updateStatus, 1000);
|
|
| 739 | + }
|
|
| 719 | 740 | }
|
| 720 | 741 | |
| 721 | 742 | // If the size of the content is already quantized, we do nothing.
|
| ... | ... | @@ -818,8 +839,12 @@ class _RFPHelper { |
| 818 | 839 | aWindow.addEventListener("TabOpen", this);
|
| 819 | 840 | const resizeObserver = (aWindow._rfpResizeObserver =
|
| 820 | 841 | new aWindow.ResizeObserver(entries => {
|
| 842 | + const context = { isResize: true };
|
|
| 821 | 843 | for (let { target } of entries) {
|
| 822 | - this._roundOrResetContentSize(target.querySelector("browser"));
|
|
| 844 | + this._roundOrResetContentSize(
|
|
| 845 | + target.querySelector("browser"),
|
|
| 846 | + context
|
|
| 847 | + );
|
|
| 823 | 848 | }
|
| 824 | 849 | }));
|
| 825 | 850 | // observe resizing of each browser's parent (gets rid of RPC from content windows)
|