Bug 1276738 - Add a test for the size of newly opened window from content. r?gabor draft
authorMike Conley <mconley@mozilla.com>
Mon, 30 May 2016 15:23:01 -0400
changeset 374031 3988c5288705cca7af38e0e6eda2e9118b1d3cd6
parent 374030 0a29121f97d410e8743040a309f9b7ddfb2f6c29
child 374032 806d515d03b2dbfcdc9142dba001159f581aaae4
push id19904
push usermconley@mozilla.com
push dateWed, 01 Jun 2016 17:55:36 +0000
reviewersgabor
bugs1276738
milestone49.0a1
Bug 1276738 - Add a test for the size of newly opened window from content. r?gabor This notably fails on Windows, for which I've filed bug ??????? MozReview-Commit-ID: Hx24driJ80w
embedding/components/windowwatcher/test/browser.ini
embedding/components/windowwatcher/test/browser_new_sized_window.js
--- a/embedding/components/windowwatcher/test/browser.ini
+++ b/embedding/components/windowwatcher/test/browser.ini
@@ -1,5 +1,7 @@
 [DEFAULT]
 tags = openwindow
 
 [browser_new_remote_window_flags.js]
 run-if = e10s
+[browser_new_sized_window.js]
+skip-if = os == 'win' # Bug 1276802 - Opening windows from content on Windows might not get the size right
new file mode 100644
--- /dev/null
+++ b/embedding/components/windowwatcher/test/browser_new_sized_window.js
@@ -0,0 +1,67 @@
+"use strict";
+
+/**
+ * Tests that content can open windows at requested dimensions
+ * of height and width.
+ */
+
+/**
+ * This utility function does most of the actual testing. We
+ * construct a feature string suitable for the passed in width
+ * and height, and then run that script in content to open the
+ * new window. When the new window comes up, this function tests
+ * to ensure that the content area of the initial browser is the
+ * requested dimensions. Finally, we also ensure that we're not
+ * persisting the position, size or sizemode of the new browser
+ * window.
+ */
+function test_dimensions({ width, height}) {
+  let features = [];
+  if (width) {
+    features.push(`width=${width}`);
+  }
+  if (height) {
+    features.push(`height=${height}`);
+  }
+  const FEATURE_STR = features.join(",");
+  const SCRIPT_PAGE = `data:text/html,<script>window.open("about:blank", "_blank", "${FEATURE_STR}");</script>`;
+
+  let newWinPromise = BrowserTestUtils.waitForNewWindow();
+
+  return BrowserTestUtils.withNewTab({
+    gBrowser,
+    url: SCRIPT_PAGE,
+  }, function*(browser) {
+    let win = yield newWinPromise;
+    let rect = win.gBrowser.selectedBrowser.getBoundingClientRect();
+
+    if (width) {
+      Assert.equal(rect.width, width, "Should have the requested width");
+    }
+
+    if (height) {
+      Assert.equal(rect.height, height, "Should have the requested height");
+    }
+
+    let treeOwner = win.QueryInterface(Ci.nsIInterfaceRequestor)
+                       .getInterface(Ci.nsIDocShell)
+                       .QueryInterface(Ci.nsIDocShellTreeItem)
+                       .treeOwner;
+    let persistPosition = {};
+    let persistSize = {};
+    let persistSizeMode = {};
+    treeOwner.getPersistence(persistPosition, persistSize, persistSizeMode);
+
+    Assert.ok(!persistPosition.value, "Should not persist position");
+    Assert.ok(!persistSize.value, "Should not persist size");
+    Assert.ok(!persistSizeMode.value, "Should not persist size mode");
+
+    yield BrowserTestUtils.closeWindow(win);
+  });
+}
+
+add_task(function* test_new_sized_window() {
+  yield test_dimensions({ width: 100 });
+  yield test_dimensions({ height: 150 });
+  yield test_dimensions({ width: 300, height: 200 });
+});