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:
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)