Bug 1348409 - Stop supporting the showDialog argument for window.find r=mrbkap
☠☠ backed out by 732dd6295021 ☠ ☠
authorMike Conley <mconley@mozilla.com>
Thu, 13 Apr 2017 11:54:15 -0400
changeset 354062 d20f6afea6f09a9a3df0822a29f33ee1d1778566
parent 354061 816a2cc1254aff32e4f38b9aa49bf0e18c85a045
child 354063 9daa571ddc280a10960201f7c37b3472d6e1526a
push id41159
push usermconley@mozilla.com
push dateThu, 20 Apr 2017 15:31:08 +0000
treeherderautoland@d20f6afea6f0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmrbkap
bugs1348409, 1182569, 1232432
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1348409 - Stop supporting the showDialog argument for window.find r=mrbkap The dialog functionality of the non-standard window.find API has been broken with e10s since it shipped, and bug 1182569 or bug 1232432 (or both) have broken it for non-e10s. This patch remove showDialog support entirely, for both e10s and non-e10s, in a more deliberate way. We now ignore the argument. MozReview-Commit-ID: 1CTzgEkDhHW
dom/base/nsGlobalWindow.cpp
dom/tests/mochitest/bugs/mochitest.ini
dom/tests/mochitest/bugs/test_no_find_showDialog.html
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -10062,16 +10062,18 @@ nsGlobalWindow::GetSelection()
 bool
 nsGlobalWindow::FindOuter(const nsAString& aString, bool aCaseSensitive,
                           bool aBackwards, bool aWrapAround, bool aWholeWord,
                           bool aSearchInFrames, bool aShowDialog,
                           ErrorResult& aError)
 {
   MOZ_RELEASE_ASSERT(IsOuterWindow());
 
+  Unused << aShowDialog;
+
   if (Preferences::GetBool("dom.disable_window_find", false)) {
     aError.Throw(NS_ERROR_NOT_AVAILABLE);
     return false;
   }
 
   nsCOMPtr<nsIWebBrowserFind> finder(do_GetInterface(mDocShell));
   if (!finder) {
     aError.Throw(NS_ERROR_NOT_AVAILABLE);
@@ -10094,42 +10096,17 @@ nsGlobalWindow::FindOuter(const nsAStrin
   // frame. If we're being called from JS (as here), this window
   // should be the current search frame.
   nsCOMPtr<nsIWebBrowserFindInFrames> framesFinder(do_QueryInterface(finder));
   if (framesFinder) {
     framesFinder->SetRootSearchFrame(AsOuter());   // paranoia
     framesFinder->SetCurrentSearchFrame(AsOuter());
   }
 
-  // The Find API does not accept empty strings. Launch the Find Dialog.
-  if (aString.IsEmpty() || aShowDialog) {
-    // See if the find dialog is already up using nsIWindowMediator
-    nsCOMPtr<nsIWindowMediator> windowMediator =
-      do_GetService(NS_WINDOWMEDIATOR_CONTRACTID);
-
-    nsCOMPtr<mozIDOMWindowProxy> findDialog;
-
-    if (windowMediator) {
-      windowMediator->GetMostRecentWindow(u"findInPage",
-                                          getter_AddRefs(findDialog));
-    }
-
-    if (findDialog) {
-      // The Find dialog is already open, bring it to the top.
-      auto* piFindDialog = nsPIDOMWindowOuter::From(findDialog);
-      aError = piFindDialog->Focus();
-    } else if (finder) {
-      // Open a Find dialog
-      nsCOMPtr<nsPIDOMWindowOuter> dialog;
-      aError = OpenDialog(NS_LITERAL_STRING("chrome://global/content/finddialog.xul"),
-                          NS_LITERAL_STRING("_blank"),
-                          NS_LITERAL_STRING("chrome, resizable=no, dependent=yes"),
-                          finder, getter_AddRefs(dialog));
-    }
-
+  if (aString.IsEmpty()) {
     return false;
   }
 
   // Launch the search with the passed in search string
   bool didFind = false;
   aError = finder->FindNext(&didFind);
   return didFind;
 }
--- a/dom/tests/mochitest/bugs/mochitest.ini
+++ b/dom/tests/mochitest/bugs/mochitest.ini
@@ -157,8 +157,9 @@ skip-if = toolkit == 'android' || os == 
 skip-if = toolkit == 'android' #Windows can't change size on Android
 [test_toJSON.html]
 [test_window_bar.html]
 skip-if = toolkit == 'android'
 [test_bug1022869.html]
 [test_bug1112040.html]
 [test_bug1160342_marquee.html]
 [test_bug1171215.html]
+[test_no_find_showDialog.html]
new file mode 100644
--- /dev/null
+++ b/dom/tests/mochitest/bugs/test_no_find_showDialog.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1348409</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <iframe src="about:blank"></iframe>
+  <script type="text/javascript; version=1.8">
+
+  function checkForFindDialog() {
+    let chromeScript = SpecialPowers.loadChromeScript(_ => {
+      addMessageListener("test:check", () => {
+        const { utils: Cu } = Components;
+
+        Cu.import("resource://gre/modules/Services.jsm");
+
+        let sawFind = false;
+        let findDialog = Services.wm.getMostRecentWindow("findInPage");
+        if (findDialog) {
+          findDialog.close();
+          sawFind = true;
+        }
+
+        return sawFind;
+      });
+
+    });
+
+    let sawFind = chromeScript.sendSyncMessage("test:check")[0][0];
+    chromeScript.destroy();
+    return sawFind;
+  }
+
+  function ensureFinished(chromeScript) {
+    return new Promise(resolve => {
+      chromeScript.addMessageListener("test:disarm:done", (sawWindow) => {
+        resolve(sawWindow);
+      });
+      chromeScript.sendAsyncMessage("test:disarm");
+    });
+  }
+
+  function doWraparoundFind(findString, showDialog) {
+    let result = window.find(findString,
+                             false /* aCaseSensitive */,
+                             false /* aBackwards*/,
+                             true /* aWrapAround */,
+                             false /* aWholeWord */,
+                             false /* aSearchInFrames */,
+                             showDialog /* aShowInDialog */)
+    // Collapse selection so that we can do another find outside
+    // of the selection result.
+    document.getSelection().collapseToStart();
+    return result;
+  }
+
+  function startTest() {
+    add_task(function*() {
+      ok(doWraparoundFind("text to search for", false),
+         "Found the text in the document body.");
+
+      // We're asking for the dialog now. We should just ignore that request.
+      ok(doWraparoundFind("fhqwhgads", true),
+         "Should return true and not show a dialog if the string exists in the page.");
+      ok(!doWraparoundFind(null, true),
+         "Should return false and not show a dialog if we pass a null string.");
+      ok(!doWraparoundFind("", true),
+         "Should return false and not show a dialog if we pass an empty string.");
+
+      // Double check to ensure that the parent didn't open a find dialog
+      let sawWindow = checkForFindDialog();
+      ok(!sawWindow, "Should never have seen the dialog.");
+    });
+  }
+  </script>
+</head>
+<body onload="startTest()">
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1348409">Mozilla Bug 1348409</a>
+
+<p>
+  Here's some text to search for: fhqwhgads! A hovercraft full of eels!
+</p>
+
+<p id="display"></p>
+<div id="content" style="display: none">
+</div>
+<pre id="test">
+</pre>
+</body>
+</html>
\ No newline at end of file