Bug 1357352 - Hide data-hidden-from-search=true in Preferences search result r?mconley draft
authorRicky Chien <ricky060709@gmail.com>
Wed, 03 May 2017 12:02:49 +0800
changeset 573332 017bf37e4176c50db0153120375e91da861fb167
parent 572031 03cfa568b94046e31d6d6dddd200cb9f60bb91cd
child 627259 a9e944dfff73f0574e58792841e362d07257cfee
push id57345
push userbmo:rchien@mozilla.com
push dateFri, 05 May 2017 14:46:22 +0000
reviewersmconley
bugs1357352
milestone55.0a1
Bug 1357352 - Hide data-hidden-from-search=true in Preferences search result r?mconley MozReview-Commit-ID: JDhDO7o7E5U
browser/components/preferences/in-content/findInPage.js
browser/components/preferences/in-content/tests/browser_search_within_preferences.js
--- a/browser/components/preferences/in-content/findInPage.js
+++ b/browser/components/preferences/in-content/findInPage.js
@@ -198,25 +198,26 @@ var gSearchResultsPane = {
       gotoPref("paneSearchResults");
 
       this.searchResultsCategory.hidden = false;
 
       let resultsFound = false;
 
       // Building the range for highlighted areas
       let rootPreferences = document.getElementById("mainPrefPane")
-      let rootPreferencesChildren = rootPreferences.children;
+      let rootPreferencesChildren = rootPreferences
+        .querySelectorAll(":not([data-hidden-from-search])");
 
       // Showing all the children to bind JS, Access Keys, etc
-      for (let i = 0; i < rootPreferences.childElementCount; i++) {
+      for (let i = 0; i < rootPreferencesChildren.length; i++) {
         rootPreferencesChildren[i].hidden = false;
       }
 
       // Showing or Hiding specific section depending on if words in query are found
-      for (let i = 0; i < rootPreferences.childElementCount; i++) {
+      for (let i = 0; i < rootPreferencesChildren.length; i++) {
         if (rootPreferencesChildren[i].className != "header" &&
             rootPreferencesChildren[i].className != "no-results-message" &&
             this.searchWithinNode(rootPreferencesChildren[i], query)) {
           rootPreferencesChildren[i].hidden = false;
           resultsFound = true;
         } else {
           rootPreferencesChildren[i].hidden = true;
         }
@@ -290,16 +291,16 @@ var gSearchResultsPane = {
         valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
       }
 
       matchesFound = matchesFound || complexTextNodesResult || labelResult || valueResult;
     }
 
     for (let i = 0; i < nodeObject.childNodes.length; i++) {
       // Search only if child node is not hidden
-      if (!nodeObject.childNodes[i].hidden) {
+      if (!nodeObject.childNodes[i].hidden && nodeObject.getAttribute("data-hidden-from-search") !== "true") {
         let result = this.searchWithinNode(nodeObject.childNodes[i], searchPhrase);
         matchesFound = matchesFound || result;
       }
     }
     return matchesFound;
   }
 }
--- a/browser/components/preferences/in-content/tests/browser_search_within_preferences.js
+++ b/browser/components/preferences/in-content/tests/browser_search_within_preferences.js
@@ -166,8 +166,40 @@ add_task(function*() {
   searchInput.value = "";
   searchInput.doCommand()
 
   // Checks if back to normal
   is_element_visible(generalPane, "Should be in generalPane");
 
   yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
 });
+
+/**
+ * Test for "Site Data" case, verifying elements with data-hidden-from-search = true
+ * are hidden in search result.
+ */
+add_task(function*() {
+  yield SpecialPowers.pushPrefEnv({"set": [["browser.storageManager.enabled", false]]});
+  yield openPreferencesViaOpenPreferencesAPI("privacy", {leaveOpen: true});
+  let generalPane = gBrowser.contentDocument.getElementById("header-general");
+
+  is_element_hidden(generalPane, "Should not be in general");
+
+  // Performs search
+  let searchInput = gBrowser.contentDocument.getElementById("searchInput");
+  searchInput.doCommand()
+  searchInput.value = "site data";
+  searchInput.doCommand()
+
+  let mainPrefTag = gBrowser.contentDocument.getElementById("mainPrefPane");
+
+  let child = mainPrefTag.querySelector("#siteDataGroup");
+  is_element_hidden(child, "Should be hidden in search results");
+
+  // Takes search off
+  searchInput.value = "";
+  searchInput.doCommand()
+
+  // Checks if back to normal
+  is_element_visible(generalPane, "Should be in generalPane");
+
+  yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});