Bug 1352481 - Add searchkeywords attributes for subdialog buttons and search the keywords in the searchWithinNode method.
MozReview-Commit-ID: HM6HPLM5wPj
--- a/browser/components/preferences/in-content/advanced.xul
+++ b/browser/components/preferences/in-content/advanced.xul
@@ -67,17 +67,18 @@
</vbox>
#ifdef MOZ_UPDATER
<spacer flex="1"/>
<vbox>
<button id="showUpdateHistory"
class="accessory-button"
label="&updateHistory2.label;"
accesskey="&updateHistory2.accesskey;"
- preference="app.update.disable_button.showUpdateHistory"/>
+ preference="app.update.disable_button.showUpdateHistory"
+ searchkeywords="&history.title; &history.intro;"/>
</vbox>
#endif
</hbox>
#ifdef MOZ_UPDATER
<vbox id="updateBox">
<deck id="updateDeck" orient="vertical">
<hbox id="checkForUpdates" align="center">
<spacer flex="1"/>
--- a/browser/components/preferences/in-content/findInPage.js
+++ b/browser/components/preferences/in-content/findInPage.js
@@ -39,17 +39,17 @@ var gSearchResultsPane = {
* to search for filter words in.
* @param String filter
* is a string containing all of the words to filter on.
* @returns boolean
* true when match in string else false
*/
stringMatchesFilters(str, filter) {
if (!filter || !str) {
- return true;
+ return false;
}
let searchStr = str.toLowerCase();
let filterStrings = filter.toLowerCase().split(/\s+/);
return !filterStrings.some(f => searchStr.indexOf(f) == -1);
},
categoriesInitialized: false,
@@ -277,54 +277,56 @@ var gSearchResultsPane = {
let result = this.highlightMatches([node], [node.length], node.textContent.toLowerCase(), searchPhrase);
matchesFound = matchesFound || result;
}
// Collecting data from boxObject
let nodeSizes = [];
let allNodeText = "";
let runningSize = 0;
- let labelResult = false;
- let valueResult = false;
let accessKeyTextNodes = this.textNodeDescendants(nodeObject.boxObject);
for (let node of accessKeyTextNodes) {
runningSize += node.textContent.length;
allNodeText += node.textContent;
nodeSizes.push(runningSize);
}
// Access key are presented
let complexTextNodesResult = this.highlightMatches(accessKeyTextNodes, nodeSizes, allNodeText.toLowerCase(), searchPhrase);
// Searching some elements, such as xul:button, have a 'label' attribute that contains the user-visible text.
- if (nodeObject.getAttribute("label")) {
- labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
- }
+ let labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
// Creating tooltips for buttons
if (labelResult && nodeObject.tagName === "button") {
this.listSearchTooltips.push(nodeObject);
}
// Searching some elements, such as xul:label, store their user-visible text in a "value" attribute.
- if (nodeObject.getAttribute("value")) {
- valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
- }
-
- if (nodeObject.tagName == "button" && (labelResult || valueResult)) {
- nodeObject.setAttribute("highlightable", "true");
- }
+ let valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
// Creating tooltips for buttons
if (valueResult && nodeObject.tagName === "button") {
this.listSearchTooltips.push(nodeObject);
}
- matchesFound = matchesFound || complexTextNodesResult || labelResult || valueResult;
+ // Searching some elements, such as xul:button, buttons to open subdialogs.
+ let keywordsResult = this.stringMatchesFilters(nodeObject.getAttribute("searchkeywords"), searchPhrase);
+
+ // Creating tooltips for buttons
+ if (keywordsResult && nodeObject.tagName === "button") {
+ this.listSearchTooltips.push(nodeObject);
+ }
+
+ if (nodeObject.tagName == "button" && (labelResult || valueResult || keywordsResult)) {
+ nodeObject.setAttribute("highlightable", "true");
+ }
+
+ matchesFound = matchesFound || complexTextNodesResult || labelResult || valueResult || keywordsResult;
}
for (let i = 0; i < nodeObject.childNodes.length; i++) {
// Search only if child node is not hidden
if (!nodeObject.childNodes[i].hidden && nodeObject.getAttribute("data-hidden-from-search") !== "true") {
let result = this.searchWithinNode(nodeObject.childNodes[i], searchPhrase);
// Creating tooltips for menulist element
if (result && nodeObject.tagName === "menulist") {
--- a/browser/components/preferences/in-content/main.xul
+++ b/browser/components/preferences/in-content/main.xul
@@ -310,17 +310,18 @@
accesskey="&useCurrentPage.accesskey;"
label1="&useCurrentPage.label;"
label2="&useMultiple.label;"
preference="pref.browser.homepage.disable_button.current_page"/>
<button id="useBookmark"
class="content-cell-item"
label="&chooseBookmark.label;"
accesskey="&chooseBookmark.accesskey;"
- preference="pref.browser.homepage.disable_button.bookmark_page"/>
+ preference="pref.browser.homepage.disable_button.bookmark_page"
+ searchkeywords="&selectBookmark.title; &selectBookmark.label;"/>
<button id="restoreDefaultHomePage"
class="content-cell-item"
label="&restoreDefault.label;"
accesskey="&restoreDefault.accesskey;"
preference="pref.browser.homepage.disable_button.restore_default"/>
</html:td>
</html:tr>
</html:table>
@@ -447,17 +448,24 @@
<groupbox id="languagesGroup" data-category="paneGeneral" hidden="true">
<caption><label>&languages.label;</label></caption>
<hbox id="languagesBox" align="center">
<description flex="1" control="chooseLanguage">&chooseLanguage.label;</description>
<button id="chooseLanguage"
class="accessory-button"
label="&chooseButton.label;"
- accesskey="&chooseButton.accesskey;"/>
+ accesskey="&chooseButton.accesskey;"
+ searchkeywords="&languages.customize.Header;
+ &languages.customize.description;
+ &languages.customize.moveUp.label;
+ &languages.customize.moveDown.label;
+ &languages.customize.deleteButton.label;
+ &languages.customize.selectLanguage.label;
+ &languages.customize.addButton.label;"/>
</hbox>
<hbox id="translationBox" hidden="true">
<hbox align="center" flex="1">
<checkbox id="translate" preference="browser.translation.detectLanguage"
label="&translateWebPages.label;." accesskey="&translateWebPages.accesskey;"
onsyncfrompreference="return gMainPane.updateButtons('translateButton',
'browser.translation.detectLanguage');"/>
@@ -524,25 +532,93 @@
</menupopup>
</menulist>
</hbox>
<spacer flex="1" />
<button id="advancedFonts"
class="accessory-button"
icon="select-font"
label="&advancedFonts.label;"
- accesskey="&advancedFonts.accesskey;"/>
+ accesskey="&advancedFonts.accesskey;"
+ searchkeywords="&fontsDialog.title;
+ &language.label;
+ &size.label;
+ &proportional.label;
+ &serif.label;
+ &sans-serif.label;
+ &monospace.label;
+ &font.langGroup.latin;
+ &font.langGroup.japanese;
+ &font.langGroup.trad-chinese;
+ &font.langGroup.simpl-chinese;
+ &font.langGroup.trad-chinese-hk;
+ &font.langGroup.korean;
+ &font.langGroup.cyrillic;
+ &font.langGroup.el;
+ &font.langGroup.other;
+ &font.langGroup.thai;
+ &font.langGroup.hebrew;
+ &font.langGroup.arabic;
+ &font.langGroup.devanagari;
+ &font.langGroup.tamil;
+ &font.langGroup.armenian;
+ &font.langGroup.bengali;
+ &font.langGroup.canadian;
+ &font.langGroup.ethiopic;
+ &font.langGroup.georgian;
+ &font.langGroup.gujarati;
+ &font.langGroup.gurmukhi;
+ &font.langGroup.khmer;
+ &font.langGroup.malayalam;
+ &font.langGroup.math;
+ &font.langGroup.odia;
+ &font.langGroup.telugu;
+ &font.langGroup.kannada;
+ &font.langGroup.sinhala;
+ &font.langGroup.tibetan;
+ &minSize.label;
+ &minSize.none;
+ &useDefaultFontSerif.label;
+ &useDefaultFontSansSerif.label;
+ &allowPagesToUseOwn.label;
+ &languages.customize.Fallback2.grouplabel;
+ &languages.customize.Fallback2.label;
+ &languages.customize.Fallback2.desc;
+ &languages.customize.Fallback.auto;
+ &languages.customize.Fallback.arabic;
+ &languages.customize.Fallback.baltic;
+ &languages.customize.Fallback.ceiso;
+ &languages.customize.Fallback.cewindows;
+ &languages.customize.Fallback.simplified;
+ &languages.customize.Fallback.traditional;
+ &languages.customize.Fallback.cyrillic;
+ &languages.customize.Fallback.greek;
+ &languages.customize.Fallback.hebrew;
+ &languages.customize.Fallback.japanese;
+ &languages.customize.Fallback.korean;
+ &languages.customize.Fallback.thai;
+ &languages.customize.Fallback.turkish;
+ &languages.customize.Fallback.vietnamese;
+ &languages.customize.Fallback.other;"/>
</hbox>
<hbox id="colorsSettings">
<spacer flex="1" />
<button id="colors"
class="accessory-button"
icon="select-color"
label="&colors.label;"
- accesskey="&colors.accesskey;"/>
+ accesskey="&colors.accesskey;"
+ searchkeywords="&overrideDefaultPageColors.label;
+ &overrideDefaultPageColors.always.label;
+ &overrideDefaultPageColors.auto.label;
+ &overrideDefaultPageColors.never.label;
+ &useSystemColors.label;
+ &underlineLinks.label;
+ &linkColor.label;
+ &visitedLinkColor.label;"/>
</hbox>
</vbox>
</groupbox>
<!-- Browsing -->
<groupbox id="browsingGroup" data-category="paneGeneral">
<caption><label>&browsing.label;</label></caption>
--- a/browser/components/preferences/in-content/preferences.xul
+++ b/browser/components/preferences/in-content/preferences.xul
@@ -15,16 +15,29 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/in-content/search.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/in-content/containers.css"?>
<!DOCTYPE page [
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
<!ENTITY % globalPreferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
<!ENTITY % preferencesDTD SYSTEM
"chrome://browser/locale/preferences/preferences.dtd">
+<!ENTITY % selectBookmarkDTD SYSTEM
+ "chrome://browser/locale/preferences/selectBookmark.dtd">
+<!ENTITY % languagesDTD SYSTEM "chrome://browser/locale/preferences/languages.dtd">
+<!ENTITY % fontDTD SYSTEM "chrome://browser/locale/preferences/fonts.dtd">
+<!ENTITY % colorsDTD SYSTEM "chrome://browser/locale/preferences/colors.dtd">
+<!ENTITY % permissionsDTD SYSTEM "chrome://browser/locale/preferences/permissions.dtd">
+<!ENTITY % passwordManagerDTD SYSTEM "chrome://passwordmgr/locale/passwordManager.dtd">
+<!ENTITY % historyDTD SYSTEM "chrome://mozapps/locale/update/history.dtd">
+<!ENTITY % certManagerDTD SYSTEM "chrome://pippki/locale/certManager.dtd">
+<!ENTITY % deviceManangerDTD SYSTEM "chrome://pippki/locale/deviceManager.dtd">
+<!ENTITY % connectionDTD SYSTEM "chrome://browser/locale/preferences/connection.dtd">
+<!ENTITY % siteDataSettingsDTD SYSTEM
+ "chrome://browser/locale/preferences/siteDataSettings.dtd" >
<!ENTITY % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
<!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
<!ENTITY % syncBrandDTD SYSTEM "chrome://browser/locale/syncBrand.dtd">
<!ENTITY % syncDTD SYSTEM "chrome://browser/locale/preferences/sync.dtd">
<!ENTITY % securityDTD SYSTEM
"chrome://browser/locale/preferences/security.dtd">
<!ENTITY % containersDTD SYSTEM
@@ -37,16 +50,27 @@
"chrome://browser/locale/preferences/applications.dtd">
<!ENTITY % advancedDTD SYSTEM
"chrome://browser/locale/preferences/advanced.dtd">
<!ENTITY % aboutDialogDTD SYSTEM "chrome://browser/locale/aboutDialog.dtd" >
%aboutDialogDTD;
%brandDTD;
%globalPreferencesDTD;
%preferencesDTD;
+%selectBookmarkDTD;
+%languagesDTD;
+%fontDTD;
+%colorsDTD;
+%permissionsDTD;
+%passwordManagerDTD;
+%historyDTD;
+%certManagerDTD;
+%deviceManangerDTD;
+%connectionDTD;
+%siteDataSettingsDTD;
%privacyDTD;
%tabsDTD;
%searchDTD;
%syncBrandDTD;
%syncDTD;
%securityDTD;
%containersDTD;
%sanitizeDTD;
@@ -79,16 +103,20 @@
src="chrome://browser/content/preferences/in-content/preferences.js"/>
<script src="chrome://browser/content/preferences/in-content/findInPage.js"/>
<script src="chrome://browser/content/preferences/in-content/subdialogs.js"/>
<stringbundle id="bundleBrand"
src="chrome://branding/locale/brand.properties"/>
<stringbundle id="bundlePreferences"
src="chrome://browser/locale/preferences/preferences.properties"/>
+ <stringbundle id="pkiBundle"
+ src="chrome://pippki/locale/pippki.properties"/>
+ <stringbundle id="browserBundle"
+ src="chrome://browser/locale/browser.properties"/>
<stringbundleset id="appManagerBundleset">
<stringbundle id="appManagerBundle"
src="chrome://browser/locale/preferences/applicationManager.properties"/>
</stringbundleset>
<stack flex="1">
<hbox flex="1">
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -143,17 +143,24 @@ var gPrivacyPane = {
/**
* Sets up the UI for the number of days of history to keep, and updates the
* label of the "Clear Now..." button.
*/
init() {
function setEventListener(aId, aEventType, aCallback) {
document.getElementById(aId)
.addEventListener(aEventType, aCallback.bind(gPrivacyPane));
- }
+ };
+
+ function appendSearchKeywords(aId, keywords) {
+ let element = document.getElementById(aId);
+ let searchKeywords = element.getAttribute("searchkeywords");
+ searchKeywords && keywords.push(searchKeywords);
+ element.setAttribute("searchkeywords", keywords.join(' '));
+ };
this._updateSanitizeSettingsButton();
this.initializeHistoryMode();
this.updateHistoryModePane();
this.updatePrivacyMicroControls();
this.initAutoStartPrivateBrowsingReverter();
this._initTrackingProtection();
this._initTrackingProtectionPBM();
@@ -314,16 +321,63 @@ var gPrivacyPane = {
this.initSubmitCrashes();
}
this.initTelemetry();
if (AppConstants.MOZ_TELEMETRY_REPORTING) {
this.initSubmitHealthReport();
setEventListener("submitHealthReportBox", "command",
gPrivacyPane.updateSubmitHealthReport);
}
+
+ // Append search keywords into the elements could open subdialogs.
+ let bundlePrefs = document.getElementById("bundlePreferences");
+ let signonBundle = document.getElementById("signonBundle");
+ let pkiBundle = document.getElementById("pkiBundle");
+ let browserBundle = document.getElementById("browserBundle");
+ appendSearchKeywords("passwordExceptions", [
+ bundlePrefs.getString("savedLoginsExceptions_title"),
+ bundlePrefs.getString("savedLoginsExceptions_desc"),
+ ]);
+ appendSearchKeywords("showPasswords", [
+ signonBundle.getString("loginsDescriptionAll"),
+ ]);
+ appendSearchKeywords("trackingProtectionExceptions", [
+ bundlePrefs.getString("trackingprotectionpermissionstitle"),
+ bundlePrefs.getString("trackingprotectionpermissionstext"),
+ ]);
+ appendSearchKeywords("changeBlockList", [
+ bundlePrefs.getString("blockliststitle"),
+ bundlePrefs.getString("blockliststext"),
+ ]);
+ appendSearchKeywords("popupPolicyButton", [
+ bundlePrefs.getString("popuppermissionstitle"),
+ bundlePrefs.getString("popuppermissionstext"),
+ ]);
+ appendSearchKeywords("notificationsPolicyButton", [
+ bundlePrefs.getString("notificationspermissionstitle"),
+ bundlePrefs.getString("notificationspermissionstext4"),
+ ]);
+ appendSearchKeywords("addonExceptions", [
+ bundlePrefs.getString("addons_permissions_title"),
+ bundlePrefs.getString("addonspermissionstext"),
+ ]);
+ appendSearchKeywords("viewSecurityDevicesButton", [
+ pkiBundle.getString("enable_fips"),
+ ]);
+ appendSearchKeywords("browserContainersSettings", [
+ browserBundle.getString("userContextPersonal.label"),
+ browserBundle.getString("userContextWork.label"),
+ browserBundle.getString("userContextBanking.label"),
+ browserBundle.getString("userContextShopping.label"),
+ ]);
+ appendSearchKeywords("siteDataSettings", [
+ bundlePrefs.getString("siteDataSettings.description"),
+ bundlePrefs.getString("removeAllCookies.label"),
+ bundlePrefs.getString("removeSelectedCookies.label"),
+ ]);
},
// TRACKING PROTECTION MODE
/**
* Selects the right item of the Tracking Protection radiogroup.
*/
trackingProtectionReadPrefs() {
--- a/browser/components/preferences/in-content/privacy.xul
+++ b/browser/components/preferences/in-content/privacy.xul
@@ -166,16 +166,17 @@
<preference id="browser.crashReports.unsubmittedCheck.autoSubmit"
name="browser.crashReports.unsubmittedCheck.autoSubmit"
type="bool"/>
#endif
</preferences>
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
+<stringbundle id="signonBundle" src="chrome://passwordmgr/locale/passwordmgr.properties"/>
<hbox id="header-privacy"
class="header"
hidden="true"
data-category="panePrivacy">
<label class="header-name" flex="1">&panePrivacySecurity.title;</label>
</hbox>
@@ -312,30 +313,32 @@
label="&rememberLogins1.label;" accesskey="&rememberLogins1.accesskey;"
preference="signon.rememberSignons"
onsyncfrompreference="return gPrivacyPane.readSavePasswords();"
flex="1" />
<button id="passwordExceptions"
class="accessory-button"
label="&passwordExceptions.label;"
accesskey="&passwordExceptions.accesskey;"
- preference="pref.privacy.disable_button.view_passwords_exceptions"/>
+ preference="pref.privacy.disable_button.view_passwords_exceptions"
+ searchkeywords="&address.label;"/>
</hbox>
<hbox id="showPasswordBox" pack="end">
<button id="showPasswords"
class="accessory-button"
label="&savedLogins.label;" accesskey="&savedLogins.accesskey;"
- preference="pref.privacy.disable_button.view_passwords"/>
+ preference="pref.privacy.disable_button.view_passwords"
+ searchkeywords="&savedLogins.title;"/>
</hbox>
</vbox>
<hbox id="masterPasswordRow">
<checkbox id="useMasterPassword"
label="&useMasterPassword.label;"
accesskey="&useMasterPassword.accesskey;"
- flex="1" />
+ flex="1"/>
<button id="changeMasterPassword"
class="accessory-button"
label="&changeMasterPassword.label;"
accesskey="&changeMasterPassword.accesskey;"/>
</hbox>
</groupbox>
<!-- Tracking -->
@@ -354,22 +357,27 @@
</description>
</vbox>
<spacer flex="1"/>
<vbox id="trackingProtectionAdvancedSettings">
<button id="trackingProtectionExceptions"
class="accessory-button"
label="&trackingProtectionExceptions.label;"
accesskey="&trackingProtectionExceptions.accesskey;"
- preference="pref.privacy.disable_button.tracking_protection_exceptions"/>
+ preference="pref.privacy.disable_button.tracking_protection_exceptions"
+ searchkeywords="&removepermission.label;
+ &removeallpermissions.label;
+ &button.cancel.label;
+ &button.ok.label;"/>
<button id="changeBlockList"
class="accessory-button"
label="&changeBlockList.label;"
accesskey="&changeBlockList.accesskey;"
- preference="pref.privacy.disable_button.change_blocklist"/>
+ preference="pref.privacy.disable_button.change_blocklist"
+ searchkeywords="&button.cancel.label; &button.ok.label;"/>
</vbox>
</hbox>
<radiogroup id="trackingProtectionRadioGroup" aria-labelledby="trackingProtectionDesc">
<radio value="always"
label="&trackingProtectionAlways.label;"
accesskey="&trackingProtectionAlways.accesskey;"/>
<radio value="private"
label="&trackingProtectionPrivate.label;"
@@ -408,17 +416,18 @@
<checkbox id="popupPolicy" preference="dom.disable_open_during_load"
label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
onsyncfrompreference="return gPrivacyPane.updateButtons('popupPolicyButton',
'dom.disable_open_during_load');"
flex="1" />
<button id="popupPolicyButton"
class="accessory-button"
label="&popupExceptions.label;"
- accesskey="&popupExceptions.accesskey;"/>
+ accesskey="&popupExceptions.accesskey;"
+ searchkeywords="&address.label; &button.cancel.label; &button.ok.label;"/>
</hbox>
</groupbox>
<!-- Notifications -->
<groupbox id="notificationsGroup" data-category="panePrivacy" hidden="true">
<caption><label>¬ificationsPolicy.label;</label></caption>
<grid>
<columns>
@@ -431,17 +440,21 @@
<label id="notificationsPolicy">¬ificationsPolicyDesc3.label;</label>
<label id="notificationsPolicyLearnMore"
class="learnMore text-link">¬ificationsPolicyLearnMore.label;</label>
</hbox>
<hbox pack="end">
<button id="notificationsPolicyButton"
class="accessory-button"
label="¬ificationsPolicyButton.label;"
- accesskey="¬ificationsPolicyButton.accesskey;"/>
+ accesskey="¬ificationsPolicyButton.accesskey;"
+ searchkeywords="&removepermission.label;
+ &removeallpermissions.label;
+ &button.cancel.label;
+ &button.ok.label;"/>
</hbox>
</row>
</rows>
</grid>
<vbox id="notificationsDoNotDisturbBox" hidden="true">
<checkbox id="notificationsDoNotDisturb" label="¬ificationsDoNotDisturb.label;"
accesskey="¬ificationsDoNotDisturb.accesskey;"/>
<label id="notificationsDoNotDisturbDetails"
@@ -478,17 +491,23 @@
label="&warnOnAddonInstall.label;"
accesskey="&warnOnAddonInstall.accesskey;"
preference="xpinstall.whitelist.required"
onsyncfrompreference="return gPrivacyPane.readWarnAddonInstall();"
flex="1" />
<button id="addonExceptions"
class="accessory-button"
label="&addonExceptions.label;"
- accesskey="&addonExceptions.accesskey;"/>
+ accesskey="&addonExceptions.accesskey;"
+ searchkeywords="&address.label;
+ &allow.label;
+ &removepermission.label;
+ &removeallpermissions.label;
+ &button.cancel.label;
+ &button.ok.label;"/>
</hbox>
<separator class="thin"/>
<checkbox id="enableSafeBrowsing"
label="&enableSafeBrowsing.label;"
accesskey="&enableSafeBrowsing.accesskey;" />
<vbox class="indent">
<checkbox id="blockDownloads"
@@ -529,22 +548,46 @@
onsynctopreference="return gPrivacyPane.writeEnableOCSP();"
preference="security.OCSP.enabled"
flex="1" />
<vbox>
<button id="viewCertificatesButton"
class="accessory-button"
label="&viewCerts.label;"
accesskey="&viewCerts.accesskey;"
- preference="security.disable_button.openCertManager"/>
+ preference="security.disable_button.openCertManager"
+ searchkeywords="&certmgr.tab.mine;
+ &certmgr.tab.others2;
+ &certmgr.tab.websites3;
+ &certmgr.tab.ca;
+ &certmgr.tab.orphan2;
+ &certmgr.mine;
+ &certmgr.others;
+ &certmgr.websites2;
+ &certmgr.cas;
+ &certmgr.orphans;
+ &certmgr.certname;
+ &certmgr.tokenname;
+ &certmgr.view2.label;
+ &certmgr.export.label;
+ &certmgr.delete2.label;"/>
<button id="viewSecurityDevicesButton"
class="accessory-button"
label="&viewSecurityDevices.label;"
accesskey="&viewSecurityDevices.accesskey;"
- preference="security.disable_button.openDeviceManager"/>
+ preference="security.disable_button.openDeviceManager"
+ searchkeywords="&devmgr.title;
+ &devmgr.devlist.label;
+ &devmgr.details.title;
+ &devmgr.details.title2;
+ &devmgr.button.login.label;
+ &devmgr.button.logout.label;
+ &devmgr.button.changepw.label;
+ &devmgr.button.load.label;
+ &devmgr.button.unload.label;"/>
</vbox>
</hbox>
</groupbox>
<!-- DRM Content -->
<groupbox id="drmGroup" data-category="panePrivacy" hidden="true">
<caption><label>&drmContent.label;</label></caption>
<grid id="contentGrid2">
@@ -578,33 +621,54 @@
onsyncfrompreference="return gPrivacyPane.readBrowserContainersCheckbox();"/>
<label id="browserContainersLearnMore" class="learnMore text-link">
&browserContainersLearnMore.label;
</label>
<spacer flex="1"/>
<button id="browserContainersSettings"
class="accessory-button"
label="&browserContainersSettings.label;"
- accesskey="&browserContainersSettings.accesskey;"/>
+ accesskey="&browserContainersSettings.accesskey;"
+ searchkeywords="&addButton.label;
+ &preferencesButton.label;
+ &removeButton.label;"/>
</hbox>
</vbox>
</groupbox>
<!-- Network -->
<!-- Connection -->
<groupbox id="connectionGroup" data-category="panePrivacy" hidden="true">
<caption><label>&connection.label;</label></caption>
<hbox align="center">
<description flex="1" control="connectionSettings">&connectionDesc.label;</description>
<button id="connectionSettings"
class="accessory-button"
icon="network"
label="&connectionSettings.label;"
- accesskey="&connectionSettings.accesskey;"/>
+ accesskey="&connectionSettings.accesskey;"
+ searchkeywords="&connectionsDialog.title;
+ &noProxyTypeRadio.label;
+ &WPADTypeRadio.label;
+ &systemTypeRadio.label;
+ &manualTypeRadio.label;
+ &http.label;
+ &ssl.label;
+ &ftp.label;
+ &socks.label;
+ &socks4.label;
+ &socks5.label;
+ &noproxy.label;
+ &noproxyExplain.label;
+ &shareproxy.label;
+ &autoTypeRadio.label;
+ &reload.label;
+ &autologinproxy.label;
+ &socksRemoteDNS.label2;"/>
</hbox>
</groupbox>
<!-- Cache -->
<groupbox id="cacheGroup" data-category="panePrivacy" hidden="true">
<caption><label>&httpCache.label;</label></caption>
<hbox align="center">
@@ -682,17 +746,21 @@
class="accessory-button"
icon="clear"
label="&clearSiteData.label;" accesskey="&clearSiteData.accesskey;"/>
</hbox>
<vbox align="end">
<button id="siteDataSettings"
class="accessory-button"
label="&siteDataSettings.label;"
- accesskey="&siteDataSettings.accesskey;"/>
+ accesskey="&siteDataSettings.accesskey;"
+ searchkeywords="&window.title;
+ &hostCol.label;
+ &statusCol.label;
+ &usageCol.label;"/>
</vbox>
</groupbox>
<!-- Data Choices -->
#ifdef MOZ_TELEMETRY_REPORTING
<groupbox id="historyGroup" data-category="panePrivacy" data-subcategory="reports" hidden="true">
<caption><label>&reports.label;</label></caption>
<hbox align="center">
--- a/browser/components/preferences/in-content/tests/browser.ini
+++ b/browser/components/preferences/in-content/tests/browser.ini
@@ -9,16 +9,20 @@ support-files =
[browser_applications_selection.js]
[browser_advanced_update.js]
skip-if = !updater
[browser_basic_rebuild_fonts_test.js]
[browser_bug410900.js]
[browser_bug705422.js]
[browser_bug731866.js]
[browser_search_within_preferences.js]
+[browser_search_subdialogs_within_preferences_1.js]
+[browser_search_subdialogs_within_preferences_2.js]
+[browser_search_subdialogs_within_preferences_3.js]
+[browser_search_subdialogs_within_preferences_4.js]
[browser_bug795764_cachedisabled.js]
[browser_bug1018066_resetScrollPosition.js]
[browser_bug1020245_openPreferences_to_paneContent.js]
[browser_bug1184989_prevent_scrolling_when_preferences_flipped.js]
[browser_engines.js]
support-files =
browser_bug1184989_prevent_scrolling_when_preferences_flipped.xul
[browser_change_app_handler.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_1.js
@@ -0,0 +1,53 @@
+/*
+* This file contains tests for the Preferences search bar.
+*/
+
+// Enabling Searching functionatily. Will display search bar form this testcase forward.
+add_task(async function() {
+ await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
+});
+
+/**
+ * Test for searching for the "Set Home Page" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Set Home Page", "startupGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Languages" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Choose languages", "languagesGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Fonts" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Text Encoding", "fontsGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Colors" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Link Colors", "fontsGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Exceptions - Saved Logins" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("sites will not be saved", "passwordsGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_2.js
@@ -0,0 +1,53 @@
+/*
+* This file contains tests for the Preferences search bar.
+*/
+
+// Enabling Searching functionatily. Will display search bar form this testcase forward.
+add_task(async function() {
+ await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
+});
+
+/**
+ * Test for searching for the "Saved Logins" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("sites are stored", "passwordsGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Exceptions - Tracking Protection" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("disabled Tracking Protection", "trackingGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Block Lists" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("block Web elements", "trackingGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Allowed Sites - Pop-ups" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("open pop-up windows", "miscGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Notification Permissions" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("request permission again", "notificationsGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_3.js
@@ -0,0 +1,53 @@
+/*
+* This file contains tests for the Preferences search bar.
+*/
+
+// Enabling Searching functionatily. Will display search bar form this testcase forward.
+add_task(async function() {
+ await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
+});
+
+/**
+ * Test for searching for the "Allowed Sites - Add-ons Installation" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("allowed to install add-ons", "addonsPhishingGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Certificate Manager" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("identify these certificate authorities", "certSelection");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Device Manager" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Security Modules and Devices", "certSelection");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Connection Settings" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("Use system proxy settings", "connectionGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test for searching for the "Settings - Site Data" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("store site data on your computer", "siteDataGroup");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_search_subdialogs_within_preferences_4.js
@@ -0,0 +1,17 @@
+/*
+* This file contains tests for the Preferences search bar.
+*/
+
+// Enabling Searching functionatily. Will display search bar form this testcase forward.
+add_task(async function() {
+ await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
+});
+
+/**
+ * Test for searching for the "Update History" subdialog.
+ */
+add_task(async function() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+ evaluateSearchResults("updates have been installed", "updateApp");
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
--- a/browser/components/preferences/in-content/tests/browser_search_within_preferences.js
+++ b/browser/components/preferences/in-content/tests/browser_search_within_preferences.js
@@ -84,17 +84,21 @@ add_task(async function() {
searchInput.focus();
searchInput.value = "password";
searchInput.doCommand();
let mainPrefTag = gBrowser.contentDocument.getElementById("mainPrefPane");
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
let child = mainPrefTag.children[i]
- if (child.id == "passwordsGroup" || child.id == "weavePrefsDeck" || child.id == "header-searchResults") {
+ if (child.id == "passwordsGroup" ||
+ child.id == "weavePrefsDeck" ||
+ child.id == "header-searchResults" ||
+ child.id == "certSelection" ||
+ child.id == "connectionGroup") {
is_element_visible(child, "Should be in search results");
} else if (child.id) {
is_element_hidden(child, "Should not be in search results");
}
}
// Takes search off
searchInput.value = "";
--- a/browser/components/preferences/in-content/tests/head.js
+++ b/browser/components/preferences/in-content/tests/head.js
@@ -213,16 +213,36 @@ function assertSitesListed(doc, hosts) {
hosts.forEach(host => {
let site = sitesList.querySelector(`richlistitem[host="${host}"]`);
ok(site, `Should list the site of ${host}`);
});
is(removeBtn.disabled, false, "Should enable the removeSelected button");
is(removeAllBtn.disabled, false, "Should enable the removeAllBtn button");
}
+function evaluateSearchResults(keyword, searchReults) {
+ searchReults = Array.isArray(searchReults) ? searchReults : [searchReults];
+ searchReults.push("header-searchResults");
+
+ let searchInput = gBrowser.contentDocument.getElementById("searchInput");
+ searchInput.focus();
+ searchInput.value = keyword;
+ searchInput.doCommand();
+
+ let mainPrefTag = gBrowser.contentDocument.getElementById("mainPrefPane");
+ for (let i = 0; i < mainPrefTag.childElementCount; i++) {
+ let child = mainPrefTag.children[i];
+ if (searchReults.includes(child.id)) {
+ is_element_visible(child, "Should be in search results");
+ } else if (child.id) {
+ is_element_hidden(child, "Should not be in search results");
+ }
+ }
+}
+
const mockSiteDataManager = {
_SiteDataManager: null,
_originalGetQuotaUsage: null,
_originalRemoveQuotaUsage: null,
_getQuotaUsage() {
let results = [];