Bug 1121417: Change hiddenOneOffs pref to use unichar type. r=florian

This commit is contained in:
Chris 2015-02-23 10:45:15 -08:00
Родитель 84536e6ce5
Коммит 19e182b01e
9 изменённых файлов: 136 добавлений и 15 удалений

Просмотреть файл

@ -1147,13 +1147,11 @@
list.firstChild.remove(); list.firstChild.remove();
let hiddenList; let hiddenList;
try { let ns = {};
let pref = Cu.import("resource://gre/modules/Preferences.jsm", ns);
Services.prefs.getCharPref("browser.search.hiddenOneOffs"); let pref =
hiddenList = pref ? pref.split(",") : []; ns.Preferences.get("browser.search.hiddenOneOffs");
} catch(e) { hiddenList = pref ? pref.split(",") : [];
hiddenList = [];
}
let currentEngineName = Services.search.currentEngine.name; let currentEngineName = Services.search.currentEngine.name;
let engines = Services.search.getVisibleEngines() let engines = Services.search.getVisibleEngines()

Просмотреть файл

@ -430,12 +430,14 @@ BrowserGlue.prototype = {
// an engine, and that newly added engines are visible. // an engine, and that newly added engines are visible.
if (data == "engine-added" || data == "engine-removed") { if (data == "engine-added" || data == "engine-removed") {
let engineName = subject.QueryInterface(Ci.nsISearchEngine).name; let engineName = subject.QueryInterface(Ci.nsISearchEngine).name;
let ns = {};
Cu.import("resource://gre/modules/Preferences.jsm", ns);
let hiddenPref = let hiddenPref =
Services.prefs.getCharPref("browser.search.hiddenOneOffs"); ns.Preferences.get("browser.search.hiddenOneOffs");
let hiddenEngines = hiddenPref ? hiddenPref.split(",") : []; let hiddenEngines = hiddenPref ? hiddenPref.split(",") : [];
hiddenEngines = hiddenEngines.filter(x => x !== engineName); hiddenEngines = hiddenEngines.filter(x => x !== engineName);
Services.prefs.setCharPref("browser.search.hiddenOneOffs", ns.Preferences.set("browser.search.hiddenOneOffs",
hiddenEngines.join(",")); hiddenEngines.join(","));
} }
if (data != "engine-default" && data != "engine-current") { if (data != "engine-default" && data != "engine-current") {

Просмотреть файл

@ -8,7 +8,7 @@
<!-- One off providers --> <!-- One off providers -->
<preference id="browser.search.hiddenOneOffs" <preference id="browser.search.hiddenOneOffs"
name="browser.search.hiddenOneOffs" name="browser.search.hiddenOneOffs"
type="string"/> type="unichar"/>
</preferences> </preferences>

Просмотреть файл

@ -28,7 +28,7 @@
<!-- One off providers --> <!-- One off providers -->
<preference id="browser.search.hiddenOneOffs" <preference id="browser.search.hiddenOneOffs"
name="browser.search.hiddenOneOffs" name="browser.search.hiddenOneOffs"
type="string"/> type="unichar"/>
</preferences> </preferences>

Просмотреть файл

@ -9,6 +9,7 @@ support-files =
test.html test.html
testEngine.src testEngine.src
testEngine.xml testEngine.xml
testEngine_diacritics.xml
testEngine_dupe.xml testEngine_dupe.xml
testEngine_mozsearch.xml testEngine_mozsearch.xml
webapi.html webapi.html
@ -34,6 +35,7 @@ skip-if = e10s # Bug ?????? - some issue with progress listeners [JavaScript Err
skip-if = e10s # Bug ?????? - some issue with progress listeners [JavaScript Error: "req.originalURI is null" {file: "chrome://mochitests/content/browser/browser/components/search/test/browser_bing_behavior.js" line: 127}] skip-if = e10s # Bug ?????? - some issue with progress listeners [JavaScript Error: "req.originalURI is null" {file: "chrome://mochitests/content/browser/browser/components/search/test/browser_bing_behavior.js" line: 127}]
[browser_healthreport.js] [browser_healthreport.js]
[browser_hiddenOneOffs_cleanup.js] [browser_hiddenOneOffs_cleanup.js]
[browser_hiddenOneOffs_diacritics.js]
[browser_private_search_perwindowpb.js] [browser_private_search_perwindowpb.js]
skip-if = e10s # Bug ?????? - Test uses load event and checks event.target. skip-if = e10s # Bug ?????? - Test uses load event and checks event.target.
[browser_yahoo.js] [browser_yahoo.js]

Просмотреть файл

@ -67,6 +67,30 @@ add_task(function* test_add() {
"Adding an engine does not remove engines from hidden list."); "Adding an engine does not remove engines from hidden list.");
}); });
add_task(function* test_diacritics() {
const diacritic_engine = "Foo \u2661";
let ns = {};
Cu.import("resource://gre/modules/Preferences.jsm", ns);
ns.Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
yield promiseNewEngine("testEngine_diacritics.xml");
let hiddenOneOffs =
ns.Preferences.get("browser.search.hiddenOneOffs").split(",");
is(hiddenOneOffs.some(x => x == diacritic_engine), false,
"Observer cleans up added hidden engines that include a diacritic.");
ns.Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
info("Removing testEngine_diacritics.xml");
Services.search.removeEngine(Services.search.getEngineByName(diacritic_engine));
hiddenOneOffs =
ns.Preferences.get("browser.search.hiddenOneOffs").split(",");
is(hiddenOneOffs.some(x => x == diacritic_engine), false,
"Observer cleans up removed hidden engines that include a diacritic.");
});
registerCleanupFunction(() => { registerCleanupFunction(() => {
info("Removing testEngine.xml"); info("Removing testEngine.xml");
Services.search.removeEngine(Services.search.getEngineByName("Foo")); Services.search.removeEngine(Services.search.getEngineByName("Foo"));

Просмотреть файл

@ -0,0 +1,79 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Tests that keyboard navigation in the search panel works as designed.
const searchbar = document.getElementById("searchbar");
const textbox = searchbar._textbox;
const searchPopup = document.getElementById("PopupSearchAutoComplete");
const diacritic_engine = "Foo \u2661";
let ns = {};
Cu.import("resource://gre/modules/Preferences.jsm", ns);
// Get an array of the one-off buttons.
function getOneOffs() {
let oneOffs = [];
let oneOff =
document.getAnonymousElementByAttribute(searchPopup, "anonid",
"search-panel-one-offs");
for (oneOff = oneOff.firstChild; oneOff; oneOff = oneOff.nextSibling) {
if (oneOff.classList.contains("dummy"))
break;
oneOffs.push(oneOff);
}
return oneOffs;
}
add_task(function* init() {
const cachedPref = Services.prefs.getCharPref("browser.search.hiddenOneOffs");
let currentEngine = Services.search.currentEngine;
yield promiseNewEngine("testEngine_diacritics.xml", false);
// Add testEngine and use it as the current search service so that the diacritic
// engine will be in the shownOneOffs list and so that the search bar won't
// attempt to call a remote search service during testing.
yield promiseNewEngine("testEngine.xml", false);
Services.search.currentEngine = Services.search.getEngineByName("Foo");
textbox.value = "Foo";
registerCleanupFunction(() => {
textbox.value = "";
Services.search.currentEngine = currentEngine;
ns.Preferences.set("browser.search.hiddenOneOffs", cachedPref);
});
});
add_task(function* test_hidden() {
ns.Preferences.set("browser.search.hiddenOneOffs", diacritic_engine);
let promise = promiseEvent(searchPopup, "popupshown");
searchbar.focus();
yield promise;
ok(!getOneOffs().some(x => x.getAttribute("label") == diacritic_engine),
"Search engines with diacritics are hidden when added to hiddenOneOffs preference.");
promise = promiseEvent(searchPopup, "popuphidden");
searchPopup.hidePopup();
yield promise;
gURLBar.focus();
});
add_task(function* test_shown() {
ns.Preferences.set("browser.search.hiddenOneOffs", "");
let promise = promiseEvent(searchPopup, "popupshown");
searchbar.focus();
yield promise;
ok(getOneOffs().some(x => x.getAttribute("label") == diacritic_engine),
"Search engines with diacritics are shown when removed from hiddenOneOffs preference.");
promise = promiseEvent(searchPopup, "popuphidden");
searchPopup.hidePopup();
yield promise;
});

Просмотреть файл

@ -136,7 +136,7 @@ function* promiseOnLoad() {
}); });
} }
function promiseNewEngine(basename) { function promiseNewEngine(basename, swapCurrent = true) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
info("Waiting for engine to be added: " + basename); info("Waiting for engine to be added: " + basename);
Services.search.init({ Services.search.init({
@ -146,9 +146,13 @@ function promiseNewEngine(basename) {
Services.search.addEngine(url, Ci.nsISearchEngine.TYPE_MOZSEARCH, "", false, { Services.search.addEngine(url, Ci.nsISearchEngine.TYPE_MOZSEARCH, "", false, {
onSuccess: function (engine) { onSuccess: function (engine) {
info("Search engine added: " + basename); info("Search engine added: " + basename);
Services.search.currentEngine = engine; if (swapCurrent) {
Services.search.currentEngine = engine;
}
registerCleanupFunction(() => { registerCleanupFunction(() => {
Services.search.currentEngine = current; if (swapCurrent) {
Services.search.currentEngine = current;
}
Services.search.removeEngine(engine); Services.search.removeEngine(engine);
info("Search engine removed: " + basename); info("Search engine removed: " + basename);
}); });

Просмотреть файл

@ -0,0 +1,12 @@
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Foo &#9825;</ShortName>
<Description>Diacritics Test Engine</Description>
<InputEncoding>utf-8</InputEncoding>
<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC</Image>
<Url type="text/html" method="GET" template="http://mochi.test:8888/browser/browser/components/search/test/?search">
<Param name="test" value="{searchTerms}"/>
</Url>
<moz:SearchForm>http://mochi.test:8888/browser/browser/components/search/test/</moz:SearchForm>
<moz:Alias>diacriticalias</moz:Alias>
</OpenSearchDescription>