Bug 1391691 - Make WebDriver:FullscreenWindow idempotent. r=automatedtester draft
authorAndreas Tolfsen <ato@sny.no>
Fri, 18 Aug 2017 18:32:11 +0100
changeset 650451 c24c4bb3977e3c21a8e4a70ed38b59277bc68012
parent 650450 6b00586b1aa0e16f335ab730152466051e85fdca
child 727409 5f8ae34c8e6553687df9ebd4f2edcc574a3fc2c2
push id75394
push userbmo:ato@sny.no
push dateTue, 22 Aug 2017 11:15:25 +0000
reviewersautomatedtester
bugs1391691
milestone57.0a1
Bug 1391691 - Make WebDriver:FullscreenWindow idempotent. r=automatedtester MozReview-Commit-ID: 4AQlYYNV03f
testing/marionette/driver.js
testing/marionette/harness/marionette_harness/tests/unit/test_window_fullscreen.py
testing/web-platform/tests/webdriver/tests/fullscreen_window.py
--- 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