tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 985f0834ae843f8e64d122eb4cb031787526ef83
parent 38ff0924505c4fe051b76f902766f6ac95f69532
Author: Manuel Bucher <manuel@mozilla.com>
Date:   Wed, 29 Oct 2025 14:31:19 +0000

Bug 1971797 - Make about:url-classifier more comfortable to use r=fluent-reviewers,emz,bolsson

1. autoselect input form on page load
2. fixup url when no scheme is passed
3. start search with enter key
4. show error message when there are no results

Differential Revision: https://phabricator.services.mozilla.com/D269633

Diffstat:
Mtoolkit/content/aboutUrlClassifier.js | 37+++++++++++++++++++++++++++----------
Mtoolkit/content/aboutUrlClassifier.xhtml | 4++--
Mtoolkit/locales/en-US/toolkit/about/url-classifier.ftl | 1+
3 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/toolkit/content/aboutUrlClassifier.js b/toolkit/content/aboutUrlClassifier.js @@ -52,6 +52,8 @@ var Search = { let list = document.getElementById("search-features"); list.appendChild(fragment); + let input = document.getElementById("search-input"); + input.addEventListener("keydown", this.onKeydown); let btn = document.getElementById("search-button"); btn.addEventListener("click", this.search); @@ -65,23 +67,36 @@ var Search = { list.firstChild.remove(); } + let input = document.getElementById("search-input"); + input.removeEventListener("keydown", this.onKeydown); let btn = document.getElementById("search-button"); btn.removeEventListener("click", this.search); }, + onKeydown(event) { + if (event.key === "Enter") { + Search.search(); + } + }, + search() { Search.hideError(); Search.hideResults(); - let input = document.getElementById("search-input").value; + let searchInput = document.getElementById("search-input"); + let input = searchInput.value; let uri; try { - uri = Services.io.newURI(input); + uri = Services.uriFixup.getFixupURIInfo(input).preferredURI; if (!uri) { Search.reportError("url-classifier-search-error-invalid-url"); return; } + // default to https + if (uri.schemeIs("http") && !input.startsWith("http:")) { + uri = uri.mutate().setScheme("https").finalize(); + } } catch (ex) { Search.reportError("url-classifier-search-error-invalid-url"); return; @@ -111,11 +126,10 @@ var Search = { document.getElementById("search-listtype").value == 0 ? Ci.nsIUrlClassifierFeature.blocklist : Ci.nsIUrlClassifierFeature.entitylist; - classifier.asyncClassifyLocalWithFeatures(uri, features, listType, list => - Search.showResults(list) - ); - - Search.hideError(); + classifier.asyncClassifyLocalWithFeatures(uri, features, listType, list => { + searchInput.value = uri.spec; + Search.showResults(list); + }); }, hideError() { @@ -138,6 +152,12 @@ var Search = { }, showResults(results) { + let resultTitle = document.getElementById("result-title"); + resultTitle.style.display = ""; + if (!results.length) { + Search.reportError("url-classifier-search-error-no-results"); + return; + } let fragment = document.createDocumentFragment(); results.forEach(result => { let tr = document.createElement("tr"); @@ -172,9 +192,6 @@ var Search = { resultTable.appendChild(fragment); resultTable.style.display = ""; - - let resultTitle = document.getElementById("result-title"); - resultTitle.style.display = ""; }, }; diff --git a/toolkit/content/aboutUrlClassifier.xhtml b/toolkit/content/aboutUrlClassifier.xhtml @@ -28,7 +28,7 @@ <tr> <th class="column" data-l10n-id="url-classifier-search-input"></th> <td> - <input id="search-input" type="text" value=""/> + <input id="search-input" type="text" value="" autofocus=""/> </td> </tr> <tr> @@ -52,8 +52,8 @@ </tr> </tbody> </table> - <p id="search-error-message"></p> <h2 class="major-section" id="result-title" data-l10n-id="url-classifier-search-result-title"></h2> + <p id="search-error-message"></p> <table id="result-table"> <tr> <td> diff --git a/toolkit/locales/en-US/toolkit/about/url-classifier.ftl b/toolkit/locales/en-US/toolkit/about/url-classifier.ftl @@ -14,6 +14,7 @@ url-classifier-search-result-list = List of tables: { $list } url-classifier-search-input = URL url-classifier-search-error-invalid-url = Invalid URL url-classifier-search-error-no-features = No features selected +url-classifier-search-error-no-results = No entries found for URL url-classifier-search-btn = Start searching url-classifier-search-features = Features url-classifier-search-listType = List type