Closed
Bug 1336395
Opened 8 years ago
Closed 7 years ago
Disallow the same alias with different casing on different search engines
Categories
(Firefox :: Settings UI, defect)
Firefox
Settings UI
Tracking
()
RESOLVED
FIXED
Firefox 55
Tracking | Status | |
---|---|---|
firefox55 | --- | fixed |
People
(Reporter: mak, Assigned: tfeserver, Mentored)
References
Details
(Keywords: good-first-bug, Whiteboard: [lang=js])
Attachments
(1 file, 3 obsolete files)
Currently prefs allow to set the same alias to a different engine if the casing differs. The urlbar will handle all the same (as lowercase).
Based on the discussion in bug 1336083, we would like to have a direct correlation between aliases and engines, and we feel like allowing casing this way is just confusing for the user.
The check happens here, it should likely use a .toLocaleLowercase():
http://searchfox.org/mozilla-central/rev/d20e4431d0cf40311afa797868bc5c58c54790a2/browser/components/preferences/in-content/search.js#269
I don't know if we have tests, off-hand I couldn't find anything in browser/components/preferences/in-content/tests so it may be a good time to add one!
Reporter | ||
Comment 1•8 years ago
|
||
Jared, would you be interested in mentoring this bug? The fix is trivial, but testing in-content prefs may not be. Or maybe you know of someone who worked on in-content prefs that is still in mozilla and would like to mentor this?
It's surprising we don't have any test coverage here, I'd expect at least:
* check all the engines are in the list
* check it's possible to disable/enable an engine
* check it's possible to add/remove an alias (and test trying to insert dupes)
Flags: needinfo?(jaws)
Comment 2•8 years ago
|
||
(In reply to Marco Bonardo [::mak] from comment #1)
> It's surprising we don't have any test coverage here
I also recently stumbled on the lack of test for the search pane, in bug 1327953, and filed bug 1335467 to cleanup that code.
Comment hidden (obsolete) |
Comment 4•8 years ago
|
||
Jalen, would you like to work on this?
Flags: needinfo?(jaws) → needinfo?(leftysolara)
Updated•8 years ago
|
Comment 5•8 years ago
|
||
Hello, I'm newcomer and for my first contribution I'm interested to fix this bug.
I have a local copy of code.
Is this issue unassigned?
Comment hidden (mozreview-request) |
Updated•7 years ago
|
Attachment #8868513 -
Flags: review?(jaws)
Comment 9•7 years ago
|
||
mozreview-review |
Comment on attachment 8868513 [details]
Bug 1336395 - Disallow same alias in search engines
https://reviewboard.mozilla.org/r/140136/#review145240
Looks very good! After you make the following changes I think this will be ready to check in, but I'd like to have one more look at it before granting r+. Thanks for the patch!
::: browser/components/preferences/in-content-old/search.js:272
(Diff revision 1)
> // Check for duplicates in changes we haven't committed yet
> let engines = gEngineView._engineStore.engines;
> + let lc_keyword = keyword.toLowerCase();
> for (let engine of engines) {
> - if (engine.alias == keyword &&
> + if (engine.alias &&
> + engine.alias.toLowerCase() == lc_keyword &&
toLocaleLowerCase() please.
::: browser/components/preferences/in-content/main.js:1048
(Diff revision 1)
> // Check for duplicates in Places keywords.
> let bduplicate = !!(await PlacesUtils.keywords.fetch(keyword));
>
> // Check for duplicates in changes we haven't committed yet
> let engines = gEngineView._engineStore.engines;
> + let lc_keyword = keyword.toLowerCase();
Please use keyword.toLocaleLowerCase() instead of .toLowerCase() since .toLocaleLowerCase() will handle various language rules better than .toLowerCase() will.
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase for more information.
::: browser/components/preferences/in-content/tests/browser_engines.js:1
(Diff revision 1)
> +/* Any copyright is dedicated to the Public Domain.
> + * http://creativecommons.org/publicdomain/zero/1.0/ */
The license header isn't necessary in test files. Test files are public domain by default.
::: browser/components/preferences/in-content/tests/browser_engines.js:15
(Diff revision 1)
> + let tree = doc.querySelector("#engineList");
> + ok(!tree.hidden, "The search engine list should be visible when Search is requested");
> +
> + // Check for default search engines to be displayed in the engineList
> + let defaultEngines = Services.search.getDefaultEngines();
> + for(let i=0; i<defaultEngines.length; i++) {
nit, please use for-of since we don't need to use the index separately.
for (let engine of defaultEngines) {
...
}
::: browser/components/preferences/in-content/tests/browser_engines.js:17
(Diff revision 1)
> +
> + // Check for default search engines to be displayed in the engineList
> + let defaultEngines = Services.search.getDefaultEngines();
> + for(let i=0; i<defaultEngines.length; i++) {
> + let engine = defaultEngines[i];
> + let cellName = tree.view.getCellText(i,tree.columns.getNamedColumn('engineName'));
nit, space after comma
::: browser/components/preferences/in-content/tests/browser_engines.js:18
(Diff revision 1)
> + // Check for default search engines to be displayed in the engineList
> + let defaultEngines = Services.search.getDefaultEngines();
> + for(let i=0; i<defaultEngines.length; i++) {
> + let engine = defaultEngines[i];
> + let cellName = tree.view.getCellText(i,tree.columns.getNamedColumn('engineName'));
> + is(cellName, engine.name,'Default search engine '+engine.name+' displayed correctly');
nit, space after comma and a space on each side of the + operator. Also, please use double-quote strings here and elsewhere.
::: browser/components/preferences/in-content/tests/browser_engines.js:28
(Diff revision 1)
> + tree.view.setCellValue(0,tree.columns.getNamedColumn('engineShown'), false);
> + is(tree.view.getCellValue(0,tree.columns.getNamedColumn('engineShown')) , 'false', 'Disable engine');
> + tree.view.setCellValue(0,tree.columns.getNamedColumn('engineShown'), true);
> + is(tree.view.getCellValue(0,tree.columns.getNamedColumn('engineShown')) , 'true', 'Enable engine');
These four lines aren't really testing anything specific about the engineList, they are simply testing the functionality of tree's setCellValue/getCellValue.
If you can set a row as selected, then you can call synthesizeKey with "space" to toggle if the engine is enabled or disabled.
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "true", "The first row should be enabled by default");
> tree.view.selection.select(0); // select the first row
> EventUtils.synthesizeKey(" ", {}); // Space toggles if the engine is enabled/disabled
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "false", "The first row should be disabled after pressing Space");
> EventUtils.synthesizeKey(" ", {});
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "true", "The first row should be enabled after pressing Space");
::: browser/components/preferences/in-content/tests/browser_engines.js:37
(Diff revision 1)
> +function openPreferencesViaHash(aPane) {
> + return new Promise(resolve => {
> + gBrowser.selectedTab = gBrowser.addTab("about:preferences" + (aPane ? "#" + aPane : ""));
Instead of duplicating the openPreferencesViaHash function, which already exists in browser_bug1020245_openPreferences_to_paneContent.js, we should move the function to head.js so it can be shared.
Attachment #8868513 -
Flags: review?(jaws) → review-
Updated•7 years ago
|
Assignee: nobody → tfeserver
Status: NEW → ASSIGNED
Comment 10•7 years ago
|
||
@tfe, sorry this didn't get reviewed sooner. I may have noticed it in my emails but I've got a huge email backlog at the moment. For your next patch, please add 'r?jaws' to the commit message and I will be notified quicker that there is a patch for me to review. Cheers :)
Assignee | ||
Comment 11•7 years ago
|
||
Thank you for the review.
When adding the test:
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "true", "The first row should be enabled by default");
> tree.view.selection.select(0); // select the first row
> EventUtils.synthesizeKey(" ", {}); // Space toggles if the engine is enabled/disabled
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "false", "The first row should be disabled after pressing Space");
> EventUtils.synthesizeKey(" ", {});
> is(tree.view.getCellValue(0, tree.columns.getNamedColumn("engineShown")), "true", "The first row should be enabled after pressing Space");
I have got a fail when running the tests:
> 29 INFO TEST-UNEXPECTED-FAIL | browser/components/preferences/in-content/tests/browser_engines.js | The first row should be > disabled after pressing Space - Got true, expected false
> Stack trace:
> chrome://mochikit/content/browser-test.js:test_is:928
> chrome://mochitests/content/browser/browser/components/preferences/in-content/tests/browser_engines.js:null:31
> Buffered messages finished
Assignee | ||
Comment 12•7 years ago
|
||
The test looks good to me. I think of maybe synthetizekey is an async function? so the condition is checked before the key is really pressed?
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Assignee | ||
Comment 17•7 years ago
|
||
Damn, mercurial is SOOOOO confusing :( , sorry about the multiple patches
Comment hidden (mozreview-request) |
Attachment #8870448 -
Attachment is obsolete: true
Attachment #8870448 -
Flags: review?(jaws)
Attachment #8870449 -
Attachment is obsolete: true
Attachment #8870449 -
Flags: review?(jaws)
Attachment #8870450 -
Attachment is obsolete: true
Attachment #8870450 -
Flags: review?(jaws)
Comment 19•7 years ago
|
||
mozreview-review |
Comment on attachment 8868513 [details]
Bug 1336395 - Disallow same alias in search engines
https://reviewboard.mozilla.org/r/140136/#review145588
Looks good, I'm okay with dropping the synthesizeKey parts from the test for now. After the following fixes this should be ready to land.
::: browser/components/preferences/in-content/tests/browser_engines.js:12
(Diff revision 3)
> + for(let i=0; i<defaultEngines.length; i++) {
> + let engine = defaultEngines[i];
Did you try using for-of loop here?
::: browser/components/preferences/in-content/tests/browser_engines.js:19
(Diff revision 3)
> + tree.view.setCellText(0, tree.columns.getNamedColumn('engineKeyword'), 'keyword');
> + tree.view.setCellText(1, tree.columns.getNamedColumn('engineKeyword'), 'keyword');
The following command will run our linting tool on this test file and point out what changes need to be made before it can be checked in.
> mach eslint browser/components/preferences/in-content/tests/browser_engines.js
Attachment #8868513 -
Flags: review?(jaws) → review-
Updated•7 years ago
|
Flags: needinfo?(jaws)
Assignee | ||
Comment 20•7 years ago
|
||
I am not using the for(xx of yy) because i need the index of the loop to retrieve the correct row, and check the name.
Comment hidden (mozreview-request) |
Assignee | ||
Comment 22•7 years ago
|
||
Also thanks for the eslint tip, i didn't knew that was it avaiable with the mac command.
Comment 23•7 years ago
|
||
(In reply to tfe from comment #20)
> I am not using the for(xx of yy) because i need the index of the loop to
> retrieve the correct row, and check the name.
Oh sorry, I didn't see that extra reference to `i`.
Comment 24•7 years ago
|
||
mozreview-review |
Comment on attachment 8868513 [details]
Bug 1336395 - Disallow same alias in search engines
https://reviewboard.mozilla.org/r/140136/#review145990
Attachment #8868513 -
Flags: review?(jaws) → review+
Comment 25•7 years ago
|
||
Pushed by jwein@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/c2257d5c371e
Disallow same alias in search engines r=jaws
Comment 26•7 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
status-firefox55:
--- → fixed
Flags: in-testsuite+
Resolution: --- → FIXED
Target Milestone: --- → Firefox 55
Comment 27•7 years ago
|
||
I can reproduce this issue with Nightly 54.0a1 (2017-02-03) (64-bit) in Deepin OS, 64bit
This bug is now verified as fixed in Latest Nightly 55.0a1
Build ID 20170531100318
User Agent Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0
[bugday-20170531]
Comment 28•7 years ago
|
||
I can reproduce this issue with Nightly 54.0a1 (2017-02-03) (64-bit) on Windows 7, 64 Bit!
This bug's fix is verified with latest Beta!
Build ID 20170803103124
User Agent Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
QA Whiteboard: [bugday-20170802]
You need to log in
before you can comment on or make changes to this bug.
Description
•