mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
bug 1492499: marionette: accept sizemodechange may not always fire; r=automatedtester,whimboo
Unlike the visibilitychange event, sizemodechange appears to fire in a mostly reliable way. However, in the off-chance that sizemodechange should not fire, we need an escape path so that Marionette returns within a timely fashion. Depends on D8414 Differential Revision: https://phabricator.services.mozilla.com/D8415 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
aeb2acfd24
commit
4caae08c48
@ -58,6 +58,7 @@ const {MarionettePrefs} = ChromeUtils.import("chrome://marionette/content/prefs.
|
|||||||
ChromeUtils.import("chrome://marionette/content/proxy.js");
|
ChromeUtils.import("chrome://marionette/content/proxy.js");
|
||||||
ChromeUtils.import("chrome://marionette/content/reftest.js");
|
ChromeUtils.import("chrome://marionette/content/reftest.js");
|
||||||
const {
|
const {
|
||||||
|
DebounceCallback,
|
||||||
IdlePromise,
|
IdlePromise,
|
||||||
PollPromise,
|
PollPromise,
|
||||||
TimedPromise,
|
TimedPromise,
|
||||||
@ -3069,10 +3070,13 @@ GeckoDriver.prototype.maximizeWindow = async function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (WindowState.from(win.windowState) != win.Maximized) {
|
if (WindowState.from(win.windowState) != win.Maximized) {
|
||||||
|
let cb;
|
||||||
await new TimedPromise(resolve => {
|
await new TimedPromise(resolve => {
|
||||||
win.addEventListener("sizemodechange", resolve, {once: true});
|
cb = new DebounceCallback(resolve);
|
||||||
|
win.addEventListener("sizemodechange", cb);
|
||||||
win.maximize();
|
win.maximize();
|
||||||
}, {throws: null});
|
}, {throws: null});
|
||||||
|
win.removeEventListener("sizemodechange", cb);
|
||||||
|
|
||||||
// Transitioning into a window state is asynchronous on Linux,
|
// Transitioning into a window state is asynchronous on Linux,
|
||||||
// and we cannot rely on sizemodechange to accurately tell us when
|
// and we cannot rely on sizemodechange to accurately tell us when
|
||||||
@ -3128,10 +3132,13 @@ GeckoDriver.prototype.fullscreenWindow = async function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (WindowState.from(win.windowState) != WindowState.Fullscreen) {
|
if (WindowState.from(win.windowState) != WindowState.Fullscreen) {
|
||||||
await new Promise(resolve => {
|
let cb;
|
||||||
win.addEventListener("sizemodechange", resolve, {once: true});
|
await new TimedPromise(resolve => {
|
||||||
|
cb = new DebounceCallback(resolve);
|
||||||
|
win.addEventListener("sizemodechange", cb);
|
||||||
win.fullScreen = true;
|
win.fullScreen = true;
|
||||||
});
|
}, {throws: null});
|
||||||
|
win.removeEventListener("sizemodechange", cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.curBrowser.rect;
|
return this.curBrowser.rect;
|
||||||
@ -3632,18 +3639,14 @@ function getOuterWindowId(win) {
|
|||||||
return win.windowUtils.outerWindowID;
|
return win.windowUtils.outerWindowID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Exit fullscreen and wait for `window` to resize.
|
|
||||||
*
|
|
||||||
* @param {ChromeWindow} window
|
|
||||||
* Window to exit fullscreen.
|
|
||||||
*/
|
|
||||||
async function exitFullscreen(window) {
|
async function exitFullscreen(window) {
|
||||||
await new Promise(resolve => {
|
let cb;
|
||||||
window.addEventListener("sizemodechange", () => resolve(), {once: true});
|
await new TimedPromise(resolve => {
|
||||||
|
cb = new DebounceCallback(resolve);
|
||||||
|
window.addEventListener("sizemodechange", cb);
|
||||||
window.fullScreen = false;
|
window.fullScreen = false;
|
||||||
});
|
});
|
||||||
await new IdlePromise(window);
|
window.removeEventListener("sizemodechange", cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
function restoreWindow(window) {
|
function restoreWindow(window) {
|
||||||
|
Loading…
Reference in New Issue
Block a user