Bug 1674034 - Move SetResolutionAndScaleTo to actor. r=calu

Differential Revision: https://phabricator.services.mozilla.com/D133142
This commit is contained in:
Agi Sferro 2021-12-10 23:56:07 +00:00
parent a2e023448b
commit 7957290efd
7 changed files with 25 additions and 35 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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,
});
},

View File

@ -118,6 +118,10 @@
"async": true,
"description": "Invokes nsIDOMWindowUtils.setResolutionAndScaleTo.",
"parameters": [
{
"type": "number",
"name": "tabId"
},
{
"type": "number",
"name": "resolution"

View File

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

View File

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

View File

@ -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);