tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 6e59880af8c043aec21bc53a84e027a92acd876f
parent bfd03fe6ef59dd43ddfaec248300e703cdbcfe19
Author: Thomas Wisniewski <twisniewski@mozilla.com>
Date:   Fri, 17 Oct 2025 21:03:00 +0000

Bug 1959598 - add a desktop-only JS webcompat intervention for www.signal-tech.com; r=webcompat-reviewers,ksenia

Differential Revision: https://phabricator.services.mozilla.com/D269112

Diffstat:
Mbrowser/extensions/webcompat/data/interventions.json | 17+++++++++++++++++
Abrowser/extensions/webcompat/injections/js/bug1959598-www.signal-tech.com-round-pageYOffset.js | 21+++++++++++++++++++++
Mtesting/webcompat/client.py | 11+++++++++++
Atesting/webcompat/interventions/tests/test_1959598_signal-tech_com.py | 29+++++++++++++++++++++++++++++
4 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/browser/extensions/webcompat/data/interventions.json b/browser/extensions/webcompat/data/interventions.json @@ -4721,6 +4721,23 @@ } ] }, + "1959598": { + "label": "signal-tech.com", + "bugs": { + "1959598": { + "issue": "broken-scrolling", + "matches": ["*://www.signal-tech.com/*"] + } + }, + "interventions": [ + { + "platforms": ["desktop"], + "content_scripts": { + "js": ["bug1959598-www.signal-tech.com-round-pageYOffset.js"] + } + } + ] + }, "1960316": { "label": "wms.sso.biglobe.ne.jp", "bugs": { diff --git a/browser/extensions/webcompat/injections/js/bug1959598-www.signal-tech.com-round-pageYOffset.js b/browser/extensions/webcompat/injections/js/bug1959598-www.signal-tech.com-round-pageYOffset.js @@ -0,0 +1,21 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +/** + * Bug 1959598 - new products do not load in while scrolling at certain zoom values + * + * The page's logic seems to rely on integer values being returned by window.pageYOffset. + */ + +/* globals exportFunction */ + +const win = window.wrappedJSObject; +const pyo = Object.getOwnPropertyDescriptor(win, "pageYOffset"); +const pyoGet = pyo.get; +pyo.get = exportFunction(function () { + return Math.round(pyoGet.call(this)); +}, window); +Object.defineProperty(win, "pageYOffset", pyo); diff --git a/testing/webcompat/client.py b/testing/webcompat/client.py @@ -35,6 +35,17 @@ class Client: self._start_collecting_alerts() + async def set_page_zoom_level(self, level): + with self.using_context("chrome"): + self.execute_script( + r""" + const [ level ] = arguments; + const win = browser.ownerGlobal; + win.ZoomManager.setZoomForBrowser(win.gBrowser.selectedTab.linkedBrowser, level); + """, + level, + ) + async def maybe_override_platform(self): if hasattr(self, "_platform_override_checked"): return diff --git a/testing/webcompat/interventions/tests/test_1959598_signal-tech_com.py b/testing/webcompat/interventions/tests/test_1959598_signal-tech_com.py @@ -0,0 +1,29 @@ +import pytest + +URL = "https://www.signal-tech.com/products/bank/open_closed" +PRODUCTS_CSS = ".sub-cat-box" + + +async def do_more_products_load_while_scrolling(client): + await client.navigate(URL, wait="none") + await client.set_page_zoom_level(1.2) + initial_products = client.await_css(PRODUCTS_CSS, is_displayed=True, all=True) + for _ in range(20): + client.apz_scroll(client.await_css("body"), dy=500) + await client.stall(0.1) + final_products = client.await_css(PRODUCTS_CSS, is_displayed=True, all=True) + return len(final_products) > len(initial_products) + + +@pytest.mark.skip_platforms("android") +@pytest.mark.asyncio +@pytest.mark.with_interventions +async def test_enabled(client): + assert await do_more_products_load_while_scrolling(client) + + +@pytest.mark.skip_platforms("android") +@pytest.mark.asyncio +@pytest.mark.without_interventions +async def test_disabled(client): + assert not await do_more_products_load_while_scrolling(client)