mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +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/reftest.js");
|
||||
const {
|
||||
DebounceCallback,
|
||||
IdlePromise,
|
||||
PollPromise,
|
||||
TimedPromise,
|
||||
@ -3069,10 +3070,13 @@ GeckoDriver.prototype.maximizeWindow = async function() {
|
||||
}
|
||||
|
||||
if (WindowState.from(win.windowState) != win.Maximized) {
|
||||
let cb;
|
||||
await new TimedPromise(resolve => {
|
||||
win.addEventListener("sizemodechange", resolve, {once: true});
|
||||
cb = new DebounceCallback(resolve);
|
||||
win.addEventListener("sizemodechange", cb);
|
||||
win.maximize();
|
||||
}, {throws: null});
|
||||
win.removeEventListener("sizemodechange", cb);
|
||||
|
||||
// Transitioning into a window state is asynchronous on Linux,
|
||||
// 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) {
|
||||
await new Promise(resolve => {
|
||||
win.addEventListener("sizemodechange", resolve, {once: true});
|
||||
let cb;
|
||||
await new TimedPromise(resolve => {
|
||||
cb = new DebounceCallback(resolve);
|
||||
win.addEventListener("sizemodechange", cb);
|
||||
win.fullScreen = true;
|
||||
});
|
||||
}, {throws: null});
|
||||
win.removeEventListener("sizemodechange", cb);
|
||||
}
|
||||
|
||||
return this.curBrowser.rect;
|
||||
@ -3632,18 +3639,14 @@ function getOuterWindowId(win) {
|
||||
return win.windowUtils.outerWindowID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit fullscreen and wait for `window` to resize.
|
||||
*
|
||||
* @param {ChromeWindow} window
|
||||
* Window to exit fullscreen.
|
||||
*/
|
||||
async function exitFullscreen(window) {
|
||||
await new Promise(resolve => {
|
||||
window.addEventListener("sizemodechange", () => resolve(), {once: true});
|
||||
let cb;
|
||||
await new TimedPromise(resolve => {
|
||||
cb = new DebounceCallback(resolve);
|
||||
window.addEventListener("sizemodechange", cb);
|
||||
window.fullScreen = false;
|
||||
});
|
||||
await new IdlePromise(window);
|
||||
window.removeEventListener("sizemodechange", cb);
|
||||
}
|
||||
|
||||
function restoreWindow(window) {
|
||||
|
Loading…
Reference in New Issue
Block a user