diff --git a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportChild.jsm b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportChild.jsm index 4782a48ae81b..0cb0c01aaea7 100644 --- a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportChild.jsm +++ b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/TestSupportChild.jsm @@ -67,6 +67,16 @@ class TestSupportChild extends GeckoViewActorChild { ); return color; } + case "SetResolutionAndScaleTo": { + return new Promise(resolve => { + const window = this.contentWindow; + const { resolution } = aMsg.data; + window.visualViewport.addEventListener("resize", () => resolve(), { + once: true, + }); + window.windowUtils.setResolutionAndScaleTo(resolution); + }); + } } return null; } diff --git a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/background.js b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/background.js index 5f9779fab3ed..d6c6b5dc7594 100644 --- a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/background.js +++ b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/background.js @@ -50,8 +50,8 @@ const APIS = { SetPrefs({ oldPrefs, newPrefs }) { return browser.test.setPrefs(oldPrefs, newPrefs); }, - SetResolutionAndScaleTo({ resolution }) { - return browser.test.setResolutionAndScaleTo(resolution); + SetResolutionAndScaleTo({ tab, resolution }) { + return browser.test.setResolutionAndScaleTo(tab.id, resolution); }, FlushApzRepaints({ tab }) { return browser.test.flushApzRepaints(tab.id); diff --git a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-api.js b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-api.js index 5b431967a8ad..a6feb2829202 100644 --- a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-api.js +++ b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-api.js @@ -14,15 +14,6 @@ const { Preferences } = ChromeUtils.import( "resource://gre/modules/Preferences.jsm" ); -function setResolutionAndScaleToFrameScript(resolution) { - addMessageListener("PanZoomControllerTest:SetResolutionAndScaleTo", () => { - content.window.visualViewport.addEventListener("resize", () => { - sendAsyncMessage("PanZoomControllerTest:SetResolutionAndScaleTo"); - }); - content.windowUtils.setResolutionAndScaleTo(resolution); - }); -} - this.test = class extends ExtensionAPI { onStartup() { ChromeUtils.registerWindowActor("TestSupport", { @@ -140,28 +131,9 @@ this.test = class extends ExtensionAPI { return Services.telemetry.scalarSet(id, value); }, - async setResolutionAndScaleTo(resolution) { - const frameScript = `data:text/javascript,(${encodeURI( - setResolutionAndScaleToFrameScript - )}).call(this, ${resolution})`; - Services.mm.loadFrameScript(frameScript, true); - - return new Promise(resolve => { - const onMessage = () => { - Services.mm.removeMessageListener( - "PanZoomControllerTest:SetResolutionAndScaleTo", - onMessage - ); - resolve(); - }; - - Services.mm.addMessageListener( - "PanZoomControllerTest:SetResolutionAndScaleTo", - onMessage - ); - Services.mm.broadcastAsyncMessage( - "PanZoomControllerTest:SetResolutionAndScaleTo" - ); + async setResolutionAndScaleTo(tabId, resolution) { + return windowActor(tabId).sendQuery("SetResolutionAndScaleTo", { + resolution, }); }, diff --git a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-schema.json b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-schema.json index b774ca4dd80b..f873207e7141 100644 --- a/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-schema.json +++ b/mobile/android/geckoview/src/androidTest/assets/web_extensions/test-support/test-schema.json @@ -118,6 +118,10 @@ "async": true, "description": "Invokes nsIDOMWindowUtils.setResolutionAndScaleTo.", "parameters": [ + { + "type": "number", + "name": "tabId" + }, { "type": "number", "name": "resolution" diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt index ddbaa461d0a7..9af23cfd4442 100644 --- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt +++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/BaseSessionTest.kt @@ -235,6 +235,9 @@ open class BaseSessionTest(noErrorCollector: Boolean = false) { fun GeckoSession.getLinkColor(selector: String) = sessionRule.getLinkColor(this, selector) + fun GeckoSession.setResolutionAndScaleTo(resolution: Float) = + sessionRule.setResolutionAndScaleTo(this, resolution) + var GeckoSession.active: Boolean get() = sessionRule.getActive(this) set(value) = setActive(value) diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PanZoomControllerTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PanZoomControllerTest.kt index a9e7dbad9ff7..80144531803a 100644 --- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PanZoomControllerTest.kt +++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/PanZoomControllerTest.kt @@ -185,7 +185,7 @@ class PanZoomControllerTest : BaseSessionTest() { assertThat("Visual viewport scale is the initial scale", originalScale, closeTo(0.5, 0.01)) // Change the resolution so that the visual viewport will be different from the layout viewport. - sessionRule.setResolutionAndScaleTo(2.0f) + mainSession.setResolutionAndScaleTo(2.0f) val scale = mainSession.evaluateJS("visualViewport.scale") as Double assertThat("Visual viewport scale is now greater than the initial scale", scale, greaterThan(originalScale)) diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/rule/GeckoSessionTestRule.java b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/rule/GeckoSessionTestRule.java index 72e95b44eb10..dee4106598f0 100644 --- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/rule/GeckoSessionTestRule.java +++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/rule/GeckoSessionTestRule.java @@ -2398,8 +2398,9 @@ public class GeckoSessionTestRule implements TestRule { } /** Invokes nsIDOMWindowUtils.setResolutionAndScaleTo. */ - public void setResolutionAndScaleTo(final float resolution) { + public void setResolutionAndScaleTo(final GeckoSession session, final float resolution) { webExtensionApiCall( + session, "SetResolutionAndScaleTo", args -> { args.put("resolution", resolution);