Bug 1391691 - Make WebDriver:FullscreenWindow idempotent. r=automatedtester
MozReview-Commit-ID: 4AQlYYNV03f
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -3145,20 +3145,23 @@ GeckoDriver.prototype.maximizeWindow = a
* @throws {UnexpectedAlertOpenError}
* A modal dialog is open, blocking this operation.
*/
GeckoDriver.prototype.fullscreenWindow = async function(cmd, resp) {
assert.firefox();
const win = assert.window(this.getCurrentWindow());
assert.noUserPrompt(this.dialog);
- await new Promise(resolve => {
- win.addEventListener("sizemodechange", resolve, {once: true});
- win.fullScreen = !win.fullScreen;
- });
+ let state = WindowState.from(win.windowState);
+ if (state != WindowState.Fullscreen) {
+ await new Promise(resolve => {
+ win.addEventListener("sizemodechange", resolve, {once: true});
+ win.fullScreen = true;
+ });
+ }
return this.curBrowser.rect;
};
/**
* Dismisses a currently displayed tab modal, or returns no such alert if
* no modal is displayed.
*/
--- a/testing/marionette/harness/marionette_harness/tests/unit/test_window_fullscreen.py
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_window_fullscreen.py
@@ -25,24 +25,24 @@ class TestWindowFullscreen(MarionetteTes
def tearDown(self):
fullscreen = self.marionette.execute_script("""
return window.fullScreen;""", sandbox=None)
if fullscreen:
self.marionette.fullscreen()
def assert_window_fullscreen(self, actual):
- self.assertGreater(actual["width"], self.max["width"])
- self.assertGreater(actual["height"], self.max["height"])
- self.assertTrue(self.marionette.execute_script("""
- return window.fullScreen;""", sandbox=None))
+ self.assertTrue(self.marionette.execute_script(
+ "return window.fullScreen", sandbox=None))
def assert_window_restored(self, actual):
self.assertEqual(self.original_size["width"], actual["width"])
self.assertEqual(self.original_size["height"], actual["height"])
+ self.assertFalse(self.marionette.execute_script(
+ "return window.fullScreen", sandbox=None))
def assert_window_rect(self, rect):
self.assertIn("width", rect)
self.assertIn("height", rect)
self.assertIn("x", rect)
self.assertIn("y", rect)
self.assertIsInstance(rect["width"], int)
self.assertIsInstance(rect["height"], int)
@@ -51,14 +51,11 @@ class TestWindowFullscreen(MarionetteTes
def test_fullscreen(self):
rect = self.marionette.fullscreen()
self.assert_window_rect(rect)
size = self.marionette.window_size
self.assertEqual(size, rect)
self.assert_window_fullscreen(size)
- def test_fullscreen_twice_restores(self):
- fullscreen = self.marionette.fullscreen()
- self.assert_window_fullscreen(fullscreen)
-
- restored = self.marionette.fullscreen()
- self.assert_window_restored(restored)
+ def test_fullscreen_twice_is_idempotent(self):
+ self.assert_window_fullscreen(self.marionette.fullscreen())
+ self.assert_window_fullscreen(self.marionette.fullscreen())
--- a/testing/web-platform/tests/webdriver/tests/fullscreen_window.py
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window.py
@@ -183,16 +183,18 @@ def test_payload(session):
assert "x" in rect
assert "y" in rect
assert isinstance(rect["width"], (int, float))
assert isinstance(rect["height"], (int, float))
assert isinstance(rect["x"], (int, float))
assert isinstance(rect["y"], (int, float))
-def test_exit_fullscreen_on_second_call(session):
+def test_fullscreen_twice_is_idempotent(session):
+ assert session.execute_script("return window.fullScreen") is False
+
first_response = fullscreen(session)
assert_success(first_response)
- assert session.execute_script("return window.fullScreen") == True
+ assert session.execute_script("return window.fullScreen") is True
second_response = fullscreen(session)
assert_success(second_response)
- assert session.execute_script("return window.fullScreen") == False
+ assert session.execute_script("return window.fullScreen") is True