commit 2e492c742b3e6937cee2ccf66471613023be43be
parent 82f2a69289213c15124bd60ea079c38fecd8e173
Author: canalun <i.am.kanaru.sato@gmail.com>
Date: Mon, 22 Dec 2025 14:17:35 +0000
Bug 2003826 - add a CSS webcompat intervention for tjoy.jp zoom-in on Android. r=webcompat-reviewers,twisniewski
Differential Revision: https://phabricator.services.mozilla.com/D276965
Diffstat:
4 files changed, 87 insertions(+), 1 deletion(-)
diff --git a/browser/extensions/webcompat/data/interventions.json b/browser/extensions/webcompat/data/interventions.json
@@ -6204,6 +6204,23 @@
}
]
},
+ "2003826": {
+ "label": "tjoy.jp",
+ "bugs": {
+ "2003826": {
+ "issue": "broken-zooming",
+ "matches": ["*://tjoy.jp/shinjuku_wald9/reservation/choice_seat"]
+ }
+ },
+ "interventions": [
+ {
+ "platforms": ["android"],
+ "content_scripts": {
+ "css": ["bug2003826-tjoy.jp-fix-broken-zoom.css"]
+ }
+ }
+ ]
+ },
"2004025": {
"label": "chatbot.weixin.qq.com",
"bugs": {
diff --git a/browser/extensions/webcompat/injections/css/bug2003826-tjoy.jp-fix-broken-zoom.css b/browser/extensions/webcompat/injections/css/bug2003826-tjoy.jp-fix-broken-zoom.css
@@ -0,0 +1,14 @@
+/* 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/. */
+
+/**
+ * tjoy.jp - zoom is broken.
+ * Bug #2003826 - https://bugzilla.mozilla.org/show_bug.cgi?id=2003826
+ *
+ * Zoom-in is broken because the page sets '-moz-transform' and 'zoom' together to realize zoom-in.
+ * This CSS corrects that issue.
+ */
+.js-map {
+ -moz-transform: none !important;
+}
diff --git a/browser/extensions/webcompat/manifest.json b/browser/extensions/webcompat/manifest.json
@@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "Web Compatibility Interventions",
"description": "Urgent post-release fixes for web compatibility.",
- "version": "148.2.0",
+ "version": "148.3.0",
"browser_specific_settings": {
"gecko": {
"id": "webcompat@mozilla.org",
diff --git a/testing/webcompat/interventions/tests/test_2003826_tjoy_jp.py b/testing/webcompat/interventions/tests/test_2003826_tjoy_jp.py
@@ -0,0 +1,55 @@
+import asyncio
+
+import pytest
+
+URL = "https://tjoy.jp/shinjuku_wald9#schedule-content"
+
+DATES_CSS = ".calendar-item"
+CARD_CSS = ".card-header"
+RESERVE_CSS = ".schedule-box-body"
+ZOOM_WRAPPER_CSS = ".js-zoom-in"
+MAP_CSS = ".js-map"
+
+
+# It's necessary to navigate to the seat choice screen from the movie list because of the session management.
+async def does_correct_zoom(client):
+ # Open and wait for the movie list to be loaded.
+ await client.navigate(URL, wait="load")
+
+ # Navigate to the seat choice screen.
+ # Display tomorrow's movies and reserve the seat for one of them.
+ # Note that today's movies can be already closed for sale.
+ dates = client.await_css(DATES_CSS, all=True)
+ dates[1].click()
+ tomorrows_movie_card = client.await_css(CARD_CSS, is_displayed=True)
+ tomorrows_movie_card.click()
+ reserve = client.await_css(RESERVE_CSS, is_displayed=True)
+ # The element is overlapped by another one, so we have to use javascript to click it.
+ client.execute_script("arguments[0].click()", reserve)
+
+ # The seat map takes time to be displayed.
+ await asyncio.sleep(4)
+
+ # Zoom in to the seat map and check if it sets only 'zoom' without '-moz-transform'.
+ seat_map_zoom_wrapper = client.await_css(ZOOM_WRAPPER_CSS)
+ client.execute_script("arguments[0].click()", seat_map_zoom_wrapper)
+ seat_map = client.await_css(MAP_CSS)
+ moz_transform = client.execute_script(
+ "return getComputedStyle(arguments[0]).MozTransform", seat_map
+ )
+ zoom = client.execute_script("return getComputedStyle(arguments[0]).zoom", seat_map)
+ return (moz_transform in {"none", ""}) and (zoom not in {"", "none"})
+
+
+@pytest.mark.only_platforms("android")
+@pytest.mark.asyncio
+@pytest.mark.with_interventions
+async def test_enabled(client):
+ assert await does_correct_zoom(client)
+
+
+@pytest.mark.only_platforms("android")
+@pytest.mark.asyncio
+@pytest.mark.without_interventions
+async def test_disabled(client):
+ assert not await does_correct_zoom(client)