This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-91.9.0esr-11.5-1 in repository tor-browser.
commit a4f7580cfdaf1440e1be6d7fa841d401658c4354 Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Wed Feb 23 11:36:33 2022 +0100
fixup! Bug 28005: Implement .onion alias urlbar rewrites
The old patch to support .tor.onion hosts was implemented through HTTPS-Everywhere. Now that the extension has been deprecated (or is going to soon), we have a new implementation, so we need only the code that interacts with HTTPS-Everywhere, which we use to remove all SecureDrop channels, rather than adding the 2021 one. --- browser/actors/ClickHandlerChild.jsm | 20 -- browser/actors/ClickHandlerParent.jsm | 1 - browser/actors/ContextMenuChild.jsm | 4 - browser/base/content/browser-places.js | 12 +- browser/base/content/browser-siteIdentity.js | 12 +- browser/base/content/browser.js | 43 +---- browser/base/content/nsContextMenu.js | 18 -- browser/base/content/pageinfo/pageInfo.js | 2 +- browser/base/content/pageinfo/pageInfo.xhtml | 10 - browser/base/content/pageinfo/security.js | 17 +- browser/base/content/tabbrowser.js | 7 - browser/base/content/utilityOverlay.js | 12 -- browser/components/BrowserGlue.jsm | 29 --- .../onionservices/HttpsEverywhereControl.jsm | 69 ++----- .../components/onionservices/OnionAliasStore.jsm | 201 --------------------- browser/components/onionservices/moz.build | 1 - browser/components/urlbar/UrlbarInput.jsm | 13 +- docshell/base/nsDocShell.cpp | 52 ------ docshell/base/nsDocShell.h | 6 - docshell/base/nsDocShellLoadState.cpp | 4 - docshell/base/nsIDocShell.idl | 5 - docshell/base/nsIWebNavigation.idl | 5 - docshell/shistory/SessionHistoryEntry.cpp | 14 -- docshell/shistory/SessionHistoryEntry.h | 1 - docshell/shistory/nsISHEntry.idl | 5 - docshell/shistory/nsSHEntry.cpp | 22 +-- docshell/shistory/nsSHEntry.h | 1 - dom/interfaces/base/nsIBrowser.idl | 3 +- dom/ipc/BrowserChild.cpp | 2 - dom/ipc/BrowserParent.cpp | 3 +- dom/ipc/PBrowser.ipdl | 1 - modules/libpref/init/StaticPrefList.yaml | 6 - netwerk/dns/effective_tld_names.dat | 2 - netwerk/ipc/DocumentLoadListener.cpp | 10 - toolkit/content/widgets/browser-custom-element.js | 13 +- toolkit/modules/sessionstore/SessionHistory.jsm | 5 - xpcom/reflect/xptinfo/xptinfo.h | 3 +- 37 files changed, 40 insertions(+), 594 deletions(-)
diff --git a/browser/actors/ClickHandlerChild.jsm b/browser/actors/ClickHandlerChild.jsm index 0f0f9330197fd..0f3bf42e2290c 100644 --- a/browser/actors/ClickHandlerChild.jsm +++ b/browser/actors/ClickHandlerChild.jsm @@ -146,26 +146,6 @@ class ClickHandlerChild extends JSWindowActorChild { json.originStoragePrincipal = ownerDoc.effectiveStoragePrincipal; json.triggeringPrincipal = ownerDoc.nodePrincipal;
- // Check if the link needs to be opened with .tor.onion urlbar rewrites - // allowed. Only when the owner doc has onionUrlbarRewritesAllowed = true - // and the same origin we should allow this. - json.onionUrlbarRewritesAllowed = false; - if (this.docShell.onionUrlbarRewritesAllowed) { - const sm = Services.scriptSecurityManager; - try { - let targetURI = Services.io.newURI(href); - let isPrivateWin = - ownerDoc.nodePrincipal.originAttributes.privateBrowsingId > 0; - sm.checkSameOriginURI( - docshell.currentDocumentChannel.URI, - targetURI, - false, - isPrivateWin - ); - json.onionUrlbarRewritesAllowed = true; - } catch (e) {} - } - // If a link element is clicked with middle button, user wants to open // the link somewhere rather than pasting clipboard content. Therefore, // when it's clicked with middle button, we should prevent multiple diff --git a/browser/actors/ClickHandlerParent.jsm b/browser/actors/ClickHandlerParent.jsm index 3a5be306be467..89363074ed148 100644 --- a/browser/actors/ClickHandlerParent.jsm +++ b/browser/actors/ClickHandlerParent.jsm @@ -103,7 +103,6 @@ class ClickHandlerParent extends JSWindowActorParent { let params = { charset: browser.characterSet, referrerInfo: E10SUtils.deserializeReferrerInfo(data.referrerInfo), - onionUrlbarRewritesAllowed: data.onionUrlbarRewritesAllowed, isContentWindowPrivate: data.isContentWindowPrivate, originPrincipal: data.originPrincipal, originStoragePrincipal: data.originStoragePrincipal, diff --git a/browser/actors/ContextMenuChild.jsm b/browser/actors/ContextMenuChild.jsm index dd7809eeb1cad..a9521642e4953 100644 --- a/browser/actors/ContextMenuChild.jsm +++ b/browser/actors/ContextMenuChild.jsm @@ -545,9 +545,6 @@ class ContextMenuChild extends JSWindowActorChild { doc.defaultView ).getFieldContext(aEvent.composedTarget);
- let parentAllowsOnionUrlbarRewrites = this.docShell - .onionUrlbarRewritesAllowed; - let disableSetDesktopBackground = null;
// Media related cache info parent needs for saving @@ -659,7 +656,6 @@ class ContextMenuChild extends JSWindowActorChild { frameID, frameBrowsingContextID, disableSetDesktopBackground, - parentAllowsOnionUrlbarRewrites, };
if (context.inFrame && !context.inSrcdocFrame) { diff --git a/browser/base/content/browser-places.js b/browser/base/content/browser-places.js index d90dc636f8db6..b0c9f6623097a 100644 --- a/browser/base/content/browser-places.js +++ b/browser/base/content/browser-places.js @@ -470,8 +470,7 @@ var PlacesCommandHook = { */ async bookmarkPage() { let browser = gBrowser.selectedBrowser; - const uri = browser.currentOnionAliasURI || browser.currentURI; - let url = new URL(uri.spec); + let url = new URL(browser.currentURI.spec); let info = await PlacesUtils.bookmarks.fetch({ url }); let isNewBookmark = !info; let showEditUI = !isNewBookmark || StarUI.showForNewBookmarks; @@ -582,7 +581,7 @@ var PlacesCommandHook = {
tabs.forEach(tab => { let browser = tab.linkedBrowser; - let uri = browser.currentOnionAliasURI || browser.currentURI; + let uri = browser.currentURI; let title = browser.contentTitle || tab.label; let spec = uri.spec; if (!(spec in uniquePages)) { @@ -1829,17 +1828,14 @@ var BookmarkingUI = { },
onLocationChange: function BUI_onLocationChange() { - const uri = - gBrowser.selectedBrowser.currentOnionAliasURI || gBrowser.currentURI; - if (this._uri && uri.equals(this._uri)) { + if (this._uri && gBrowser.currentURI.equals(this._uri)) { return; } this.updateStarState(); },
updateStarState: function BUI_updateStarState() { - this._uri = - gBrowser.selectedBrowser.currentOnionAliasURI || gBrowser.currentURI; + this._uri = gBrowser.currentURI; this._itemGuids.clear(); let guids = new Set();
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js index 45b992c14fca0..6682ae8b096fe 100644 --- a/browser/base/content/browser-siteIdentity.js +++ b/browser/base/content/browser-siteIdentity.js @@ -658,13 +658,13 @@ var gIdentityHandler = { * nsIURI for which the identity UI should be displayed, already * processed by createExposableURI. */ - updateIdentity(state, uri, onionAliasURI) { + updateIdentity(state, uri) { let shouldHidePopup = this._uri && this._uri.spec != uri.spec; this._state = state;
// Firstly, populate the state properties required to display the UI. See // the documentation of the individual properties for details. - this.setURI(uri, onionAliasURI); + this.setURI(uri); this._secInfo = gBrowser.securityUI.secInfo; this._isSecureContext = gBrowser.securityUI.isSecureContext;
@@ -687,18 +687,17 @@ var gIdentityHandler = { * Attempt to provide proper IDN treatment for host names */ getEffectiveHost() { - let uri = this._onionAliasURI || this._uri; if (!this._IDNService) { this._IDNService = Cc["@mozilla.org/network/idn-service;1"].getService( Ci.nsIIDNService ); } try { - return this._IDNService.convertToDisplayIDN(uri.host, {}); + return this._IDNService.convertToDisplayIDN(this._uri.host, {}); } catch (e) { // If something goes wrong (e.g. host is an IP address) just fail back // to the full domain. - return uri.host; + return this._uri.host; } },
@@ -1141,12 +1140,11 @@ var gIdentityHandler = { this._identityPopupContentVerif.textContent = verifier; },
- setURI(uri, onionAliasURI) { + setURI(uri) { if (uri.schemeIs("view-source")) { uri = Services.io.newURI(uri.spec.replace(/^view-source:/i, "")); } this._uri = uri; - this._onionAliasURI = onionAliasURI;
try { // Account for file: urls and catch when "" is the value diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 16123f02ff49b..faf6433ccacf8 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -82,7 +82,6 @@ XPCOMUtils.defineLazyModuleGetters(this, { TelemetryEnvironment: "resource://gre/modules/TelemetryEnvironment.jsm", TorConnect: "resource:///modules/TorConnect.jsm", Translation: "resource:///modules/translation/TranslationParent.jsm", - OnionAliasStore: "resource:///modules/OnionAliasStore.jsm", UITour: "resource:///modules/UITour.jsm", UpdateUtils: "resource://gre/modules/UpdateUtils.jsm", UrlbarInput: "resource:///modules/UrlbarInput.jsm", @@ -2249,7 +2248,6 @@ var gBrowserInit = { // [9]: allowInheritPrincipal (bool) // [10]: csp (nsIContentSecurityPolicy) // [11]: nsOpenWindowInfo - // [12]: onionUrlbarRewritesAllowed (bool) let userContextId = window.arguments[5] != undefined ? window.arguments[5] @@ -2269,8 +2267,7 @@ var gBrowserInit = { // TODO fix allowInheritPrincipal to default to false. // Default to true unless explicitly set to false because of bug 1475201. window.arguments[9] !== false, - window.arguments[10], - window.arguments[12] + window.arguments[10] ); window.focus(); } else { @@ -3068,8 +3065,7 @@ function loadURI( forceAboutBlankViewerInCurrent, triggeringPrincipal, allowInheritPrincipal = false, - csp = null, - onionUrlbarRewritesAllowed = false + csp = null ) { if (!triggeringPrincipal) { throw new Error("Must load with a triggering Principal"); @@ -3087,7 +3083,6 @@ function loadURI( csp, forceAboutBlankViewerInCurrent, allowInheritPrincipal, - onionUrlbarRewritesAllowed, }); } catch (e) { Cu.reportError(e); @@ -5214,24 +5209,11 @@ var XULBrowserWindow = { this.reloadCommand.removeAttribute("disabled"); }
- // The onion memorable alias needs to be used in gURLBar.setURI, but also in - // other parts of the code (like the bookmarks UI), so we save it. - if (gBrowser.selectedBrowser.onionUrlbarRewritesAllowed) { - gBrowser.selectedBrowser.currentOnionAliasURI = OnionAliasStore.getShortURI( - aLocationURI - ); - } else { - gBrowser.selectedBrowser.currentOnionAliasURI = null; - } - // We want to update the popup visibility if we received this notification // via simulated locationchange events such as switching between tabs, however // if this is a document navigation then PopupNotifications will be updated // via TabsProgressListener.onLocationChange and we do not want it called twice - gURLBar.setURI( - gBrowser.selectedBrowser.currentOnionAliasURI || aLocationURI, - aIsSimulated - ); + gURLBar.setURI(aLocationURI, aIsSimulated);
BookmarkingUI.onLocationChange(); // If we've actually changed document, update the toolbar visibility. @@ -5455,7 +5437,6 @@ var XULBrowserWindow = { // Don't need to do anything if the data we use to update the UI hasn't // changed let uri = gBrowser.currentURI; - let onionAliasURI = gBrowser.selectedBrowser.currentOnionAliasURI; let spec = uri.spec; let isSecureContext = gBrowser.securityUI.isSecureContext; if ( @@ -5479,7 +5460,7 @@ var XULBrowserWindow = { try { uri = Services.io.createExposableURI(uri); } catch (e) {} - gIdentityHandler.updateIdentity(this._state, uri, onionAliasURI); + gIdentityHandler.updateIdentity(this._state, uri); },
// simulate all change notifications after switching tabs @@ -6998,21 +6979,6 @@ function handleLinkClick(event, href, linkNode) { return true; }
- // Check if the link needs to be opened with .tor.onion urlbar rewrites - // allowed. Only when the owner doc has onionUrlbarRewritesAllowed = true - // and the same origin we should allow this. - let persistOnionUrlbarRewritesAllowedInChildTab = false; - if (where == "tab" && gBrowser.docShell.onionUrlbarRewritesAllowed) { - const sm = Services.scriptSecurityManager; - try { - let tURI = makeURI(href); - let isPrivateWin = - doc.nodePrincipal.originAttributes.privateBrowsingId > 0; - sm.checkSameOriginURI(doc.documentURIObject, tURI, false, isPrivateWin); - persistOnionUrlbarRewritesAllowedInChildTab = true; - } catch (e) {} - } - let frameID = WebNavigationFrames.getFrameId(doc.defaultView);
urlSecurityCheck(href, doc.nodePrincipal); @@ -7024,7 +6990,6 @@ function handleLinkClick(event, href, linkNode) { triggeringPrincipal: doc.nodePrincipal, csp: doc.csp, frameID, - onionUrlbarRewritesAllowed: persistOnionUrlbarRewritesAllowedInChildTab, };
// The new tab/window must use the same userContextId diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index e96df23142f86..1ff16ffbab9f1 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -58,7 +58,6 @@ function openContextMenu(aMessage, aBrowser, aActor) { selectionInfo: data.selectionInfo, disableSetDesktopBackground: data.disableSetDesktopBackground, loginFillInfo: data.loginFillInfo, - parentAllowsOnionUrlbarRewrites: data.parentAllowsOnionUrlbarRewrites, userContextId: data.userContextId, webExtContextData: data.webExtContextData, cookieJarSettings: E10SUtils.deserializeCookieJarSettings( @@ -1198,7 +1197,6 @@ class nsContextMenu { triggeringPrincipal: this.principal, csp: this.csp, frameID: this.contentData.frameID, - onionUrlbarRewritesAllowed: false, }; for (let p in extra) { params[p] = extra[p]; @@ -1222,22 +1220,6 @@ class nsContextMenu { }
params.referrerInfo = referrerInfo; - - // Check if the link needs to be opened with .tor.onion urlbar rewrites - // allowed. Only when parent has onionUrlbarRewritesAllowed = true - // and the same origin we should allow this. - if (this.contentData.parentAllowsOnionUrlbarRewrites) { - let referrerURI = this.contentData.documentURIObject; - const sm = Services.scriptSecurityManager; - try { - let targetURI = this.linkURI; - let isPrivateWin = - this.browser.contentPrincipal.originAttributes.privateBrowsingId > 0; - sm.checkSameOriginURI(referrerURI, targetURI, false, isPrivateWin); - params.onionUrlbarRewritesAllowed = true; - } catch (e) {} - } - return params; }
diff --git a/browser/base/content/pageinfo/pageInfo.js b/browser/base/content/pageinfo/pageInfo.js index dd1a4a90fedf8..cd02b73bd0c76 100644 --- a/browser/base/content/pageinfo/pageInfo.js +++ b/browser/base/content/pageinfo/pageInfo.js @@ -398,7 +398,7 @@ async function onNonMediaPageInfoLoad(browser, pageInfoData, imageInfo) { ); } onLoadPermission(uri, principal); - securityOnLoad(uri, windowInfo, browser.currentOnionAliasURI); + securityOnLoad(uri, windowInfo); }
function resetPageInfo(args) { diff --git a/browser/base/content/pageinfo/pageInfo.xhtml b/browser/base/content/pageinfo/pageInfo.xhtml index a23f2bb5748c6..f40ffd3778d8c 100644 --- a/browser/base/content/pageinfo/pageInfo.xhtml +++ b/browser/base/content/pageinfo/pageInfo.xhtml @@ -312,16 +312,6 @@ <input id="security-identity-domain-value" readonly="readonly"/> </td> </tr> - <!-- Onion Alias --> - <tr id="security-view-identity-onionalias-row"> - <th> - <xul:label id="security-view-identity-onionalias" - control="security-view-identity-onionalias-value"/> - </th> - <td> - <input id="security-view-identity-onionalias-value" readonly="true"/> - </td> - </tr> <!-- Owner --> <tr> <th> diff --git a/browser/base/content/pageinfo/security.js b/browser/base/content/pageinfo/security.js index 2e22f4670503d..8d10c8df814c4 100644 --- a/browser/base/content/pageinfo/security.js +++ b/browser/base/content/pageinfo/security.js @@ -248,7 +248,7 @@ var security = { }, };
-async function securityOnLoad(uri, windowInfo, onionAliasURI) { +async function securityOnLoad(uri, windowInfo) { await security.init(uri, windowInfo);
let info = security.securityInfo; @@ -261,21 +261,6 @@ async function securityOnLoad(uri, windowInfo, onionAliasURI) { } document.getElementById("securityTab").hidden = false;
- if (onionAliasURI) { - setText( - "security-view-identity-onionalias", - gTorButtonBundle.GetStringFromName("pageInfo_OnionName") - ); - setText("security-view-identity-onionalias-value", onionAliasURI.host); - document.getElementById( - "security-view-identity-onionalias-row" - ).hidden = false; - } else { - document.getElementById( - "security-view-identity-onionalias-row" - ).hidden = true; - } - /* Set Identity section text */ setText("security-identity-domain-value", windowInfo.hostName);
diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js index 520fea7cc3457..e47c81541bfab 100644 --- a/browser/base/content/tabbrowser.js +++ b/browser/base/content/tabbrowser.js @@ -1635,7 +1635,6 @@ var aFromExternal; var aRelatedToCurrent; var aAllowInheritPrincipal; - var aOnionUrlbarRewritesAllowed; var aSkipAnimation; var aForceNotRemote; var aPreferredRemoteType; @@ -1665,7 +1664,6 @@ aFromExternal = params.fromExternal; aRelatedToCurrent = params.relatedToCurrent; aAllowInheritPrincipal = !!params.allowInheritPrincipal; - aOnionUrlbarRewritesAllowed = params.onionUrlbarRewritesAllowed; aSkipAnimation = params.skipAnimation; aForceNotRemote = params.forceNotRemote; aPreferredRemoteType = params.preferredRemoteType; @@ -1706,7 +1704,6 @@ fromExternal: aFromExternal, relatedToCurrent: aRelatedToCurrent, skipAnimation: aSkipAnimation, - onionUrlbarRewritesAllowed: aOnionUrlbarRewritesAllowed, forceNotRemote: aForceNotRemote, createLazyBrowser: aCreateLazyBrowser, preferredRemoteType: aPreferredRemoteType, @@ -2539,7 +2536,6 @@ aURI, { allowInheritPrincipal, - onionUrlbarRewritesAllowed, allowThirdPartyFixup, bulkOrderedOpen, charset, @@ -2881,9 +2877,6 @@ // lands. flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FIRST_LOAD; } - if (onionUrlbarRewritesAllowed) { - flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES; - } if (!allowInheritPrincipal) { flags |= Ci.nsIWebNavigation.LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL; } diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js index 4926885cca3bd..a95717544b80f 100644 --- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -303,7 +303,6 @@ function openLinkIn(url, where, params) { : new ReferrerInfo(Ci.nsIReferrerInfo.EMPTY, true, null); var aRelatedToCurrent = params.relatedToCurrent; var aAllowInheritPrincipal = !!params.allowInheritPrincipal; - var aOnionUrlbarRewritesAllowed = params.onionUrlbarRewritesAllowed; var aForceAllowDataURI = params.forceAllowDataURI; var aInBackground = params.inBackground; var aInitiatingDoc = params.initiatingDoc; @@ -420,11 +419,6 @@ function openLinkIn(url, where, params) { ].createInstance(Ci.nsISupportsPRBool); allowThirdPartyFixupSupports.data = aAllowThirdPartyFixup;
- var onionUrlbarRewritesAllowed = Cc[ - "@mozilla.org/supports-PRBool;1" - ].createInstance(Ci.nsISupportsPRBool); - onionUrlbarRewritesAllowed.data = aOnionUrlbarRewritesAllowed; - var userContextIdSupports = Cc[ "@mozilla.org/supports-PRUint32;1" ].createInstance(Ci.nsISupportsPRUint32); @@ -441,8 +435,6 @@ function openLinkIn(url, where, params) { sa.appendElement(aTriggeringPrincipal); sa.appendElement(null); // allowInheritPrincipal sa.appendElement(aCsp); - sa.appendElement(null); // nsOpenWindowInfo - sa.appendElement(onionUrlbarRewritesAllowed);
const sourceWindow = w || window; let win; @@ -560,9 +552,6 @@ function openLinkIn(url, where, params) { if (aForceAllowDataURI) { flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FORCE_ALLOW_DATA_URI; } - if (aOnionUrlbarRewritesAllowed) { - flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES; - }
let { URI_INHERITS_SECURITY_CONTEXT } = Ci.nsIProtocolHandler; if ( @@ -609,7 +598,6 @@ function openLinkIn(url, where, params) { allowThirdPartyFixup: aAllowThirdPartyFixup, relatedToCurrent: aRelatedToCurrent, skipAnimation: aSkipTabAnimation, - onionUrlbarRewritesAllowed: aOnionUrlbarRewritesAllowed, userContextId: aUserContextId, originPrincipal: aPrincipal, originStoragePrincipal: aStoragePrincipal, diff --git a/browser/components/BrowserGlue.jsm b/browser/components/BrowserGlue.jsm index e2824bffdf070..08fed785874fd 100644 --- a/browser/components/BrowserGlue.jsm +++ b/browser/components/BrowserGlue.jsm @@ -85,7 +85,6 @@ XPCOMUtils.defineLazyModuleGetters(this, { TabUnloader: "resource:///modules/TabUnloader.jsm", TelemetryUtils: "resource://gre/modules/TelemetryUtils.jsm", TRRRacer: "resource:///modules/TRRPerformance.jsm", - OnionAliasStore: "resource:///modules/OnionAliasStore.jsm", UIState: "resource://services-sync/UIState.jsm", UrlbarQuickSuggest: "resource:///modules/UrlbarQuickSuggest.jsm", UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm", @@ -2029,7 +2028,6 @@ BrowserGlue.prototype = { Normandy.uninit(); RFPHelper.uninit(); ASRouterNewTabHook.destroy(); - OnionAliasStore.uninit(); },
// Set up a listener to enable/disable the screenshots extension @@ -2534,33 +2532,6 @@ BrowserGlue.prototype = { }, },
- { - task: () => { - const { TorConnect, TorConnectTopics } = ChromeUtils.import( - "resource:///modules/TorConnect.jsm" - ); - if (!TorConnect.shouldShowTorConnect) { - // we will take this path when the user is using the legacy tor launcher or - // when Tor Browser didn't launch its own tor. - OnionAliasStore.init(); - } else { - // this path is taken when using about:torconnect, we wait to init - // after we are bootstrapped and connected to tor - const topic = TorConnectTopics.BootstrapComplete; - let bootstrapObserver = { - observe(aSubject, aTopic, aData) { - if (aTopic === topic) { - OnionAliasStore.init(); - // we only need to init once, so remove ourselves as an obvserver - Services.obs.removeObserver(this, topic); - } - } - }; - Services.obs.addObserver(bootstrapObserver, topic); - } - }, - }, - { task: () => { Blocklist.loadBlocklistAsync(); diff --git a/browser/components/onionservices/HttpsEverywhereControl.jsm b/browser/components/onionservices/HttpsEverywhereControl.jsm index d673de4cd6e57..9e14b7d88b501 100644 --- a/browser/components/onionservices/HttpsEverywhereControl.jsm +++ b/browser/components/onionservices/HttpsEverywhereControl.jsm @@ -59,9 +59,9 @@ class HttpsEverywhereControl { }
/** - * Installs the .tor.onion update channel in https-everywhere + * Uninstalls old .tor.onion update channels from https-everywhere */ - async installTorOnionUpdateChannel(retries = 5) { + async uninstallTorOnionUpdateChannel(retries = 5) {
// TODO: https-everywhere store is initialized asynchronously, so sending a message // immediately results in a `store.get is undefined` error. @@ -70,73 +70,35 @@ class HttpsEverywhereControl { // for that here. await HttpsEverywhereControl.wait();
+ // We now handle .tor.onion domains with our first-party component, so we + // remove known rules from HTTPS-Everywhere. + try { - // Delete the previous channel signing key, and add the new one below. await this._sendMessage( "delete_update_channel", SECUREDROP_TOR_ONION_CHANNEL_2020.name ); } catch (e) { if (retries <= 0) { - throw new Error("Could not uninstall SecureDropTorOnion update channel"); + console.warn("Cannot uninstall the SecureDropTorOnion 2020 channel", e); + throw new Error("Could not uninstall the SecureDropTorOnion update channel"); } - await this.installTorOnionUpdateChannel(retries - 1); + await this.uninstallTorOnionUpdateChannel(retries - 1); return; } - try { - // TODO: we may want a way to "lock" this update channel, so that it cannot be modified - // by the user via UI, but I think this is not possible at the time of writing via - // the existing messages in https-everywhere. await this._sendMessage( - "create_update_channel", + "delete_update_channel", SECUREDROP_TOR_ONION_CHANNEL.name ); } catch (e) { if (retries <= 0) { - throw new Error("Could not install SecureDropTorOnion update channel"); + console.warn("Cannot uninstall the SecureDropTorOnion 2021 channel", e); + throw new Error("Could not uninstall the SecureDropTorOnion update channel"); } - await this.installTorOnionUpdateChannel(retries - 1); + await this.uninstallTorOnionUpdateChannel(retries - 1); return; } - - await this._sendMessage( - "update_update_channel", - SECUREDROP_TOR_ONION_CHANNEL - ); - } - - /** - * Returns the .tor.onion rulesets available in https-everywhere - */ - async getTorOnionRules() { - return this._sendMessage("get_simple_rules_ending_with", ".tor.onion"); - } - - /** - * Returns the timestamp of the last .tor.onion update channel update. - */ - async getRulesetTimestamp() { - const rulesets = await this._sendMessage("get_update_channel_timestamps"); - const securedrop = - rulesets && - rulesets.find(([{ name }]) => name === SECUREDROP_TOR_ONION_CHANNEL.name); - if (securedrop) { - const [ - updateChannel, // This has the same structure as SECUREDROP_TOR_ONION_CHANNEL - lastUpdatedTimestamp, // An integer, 0 if the update channel was never updated - ] = securedrop; - void updateChannel; // Ignore eslint unused warning for ruleset - return lastUpdatedTimestamp; - } - return null; - } - - unload() { - if (this._extensionMessaging) { - this._extensionMessaging.unload(); - this._extensionMessaging = null; - } }
_init() { @@ -146,6 +108,8 @@ class HttpsEverywhereControl {
// update all of the existing https-everywhere channels setTimeout(async () => { + await this.uninstallTorOnionUpdateChannel(); + let pinnedChannels = await this._sendMessage("get_pinned_update_channels"); for(let channel of pinnedChannels.update_channels) { this._sendMessage("update_update_channel", channel); @@ -155,8 +119,9 @@ class HttpsEverywhereControl { for(let channel of storedChannels.update_channels) { this._sendMessage("update_update_channel", channel); } - }, 0); -
+ this._extensionMessaging.unload(); + this._extensionMessaging = null; + }, 0); } } diff --git a/browser/components/onionservices/OnionAliasStore.jsm b/browser/components/onionservices/OnionAliasStore.jsm deleted file mode 100644 index 66cf569227bf7..0000000000000 --- a/browser/components/onionservices/OnionAliasStore.jsm +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright (c) 2020, The Tor Project, Inc. - -"use strict"; - -const EXPORTED_SYMBOLS = ["OnionAliasStore"]; - -const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); -const { XPCOMUtils } = ChromeUtils.import( - "resource://gre/modules/XPCOMUtils.jsm" -); -const { setTimeout, clearTimeout } = ChromeUtils.import( - "resource://gre/modules/Timer.jsm" -); -const { HttpsEverywhereControl } = ChromeUtils.import( - "resource:///modules/HttpsEverywhereControl.jsm" -); - -// Logger adapted from CustomizableUI.jsm -const kPrefOnionAliasDebug = "browser.onionalias.debug"; -XPCOMUtils.defineLazyPreferenceGetter( - this, - "gDebuggingEnabled", - kPrefOnionAliasDebug, - false, - (pref, oldVal, newVal) => { - if (typeof log != "undefined") { - log.maxLogLevel = newVal ? "all" : "log"; - } - } -); -XPCOMUtils.defineLazyGetter(this, "log", () => { - let scope = {}; - ChromeUtils.import("resource://gre/modules/Console.jsm", scope); - let consoleOptions = { - maxLogLevel: gDebuggingEnabled ? "all" : "log", - prefix: "OnionAlias", - }; - return new scope.ConsoleAPI(consoleOptions); -}); - -function observe(topic, callback) { - let observer = { - observe(aSubject, aTopic, aData) { - if (topic === aTopic) { - callback(aSubject, aData); - } - }, - }; - Services.obs.addObserver(observer, topic); - return () => Services.obs.removeObserver(observer, topic); -} - -class _OnionAliasStore { - static get RULESET_CHECK_INTERVAL() { - return 1000 * 60; // 1 minute - } - - static get RULESET_CHECK_INTERVAL_FAST() { - return 1000 * 5; // 5 seconds - } - - constructor() { - this._onionMap = new Map(); - this._rulesetTimeout = null; - this._removeObserver = () => {}; - this._canLoadRules = false; - this._rulesetTimestamp = null; - this._updateChannelInstalled = false; - } - - async _periodicRulesetCheck() { - // TODO: it would probably be preferable to listen to some message broadcasted by - // the https-everywhere extension when some update channel is updated, instead of - // polling every N seconds. - log.debug("Checking for new rules"); - const ts = await this.httpsEverywhereControl.getRulesetTimestamp(); - log.debug( - `Found ruleset timestamp ${ts}, current is ${this._rulesetTimestamp}` - ); - if (ts !== this._rulesetTimestamp) { - this._rulesetTimestamp = ts; - log.debug("New rules found, updating"); - // We clear the mappings even if we cannot load the rules from https-everywhere, - // since we cannot be sure if the stored mappings are correct anymore. - this._clear(); - if (this._canLoadRules) { - await this._loadRules(); - } - } - // If the timestamp is 0, that means the update channel was not yet updated, so - // we schedule a check soon. - this._rulesetTimeout = setTimeout( - () => this._periodicRulesetCheck(), - ts === 0 - ? _OnionAliasStore.RULESET_CHECK_INTERVAL_FAST - : _OnionAliasStore.RULESET_CHECK_INTERVAL - ); - } - - async init() { - this.httpsEverywhereControl = new HttpsEverywhereControl(); - - // Setup .tor.onion rule loading. - // The http observer is a fallback, and is removed in _loadRules() as soon as we are able - // to load some rules from HTTPS Everywhere. - this._loadHttpObserver(); - try { - await this.httpsEverywhereControl.installTorOnionUpdateChannel(); - this._updateChannelInstalled = true; - await this.httpsEverywhereControl.getTorOnionRules(); - this._canLoadRules = true; - } catch (e) { - // Loading rules did not work, probably because "get_simple_rules_ending_with" is not yet - // working in https-everywhere. Use an http observer as a fallback for learning the rules. - log.debug(`Could not load rules: ${e.message}`); - } - - // Setup checker for https-everywhere ruleset updates - if (this._updateChannelInstalled) { - this._periodicRulesetCheck(); - } - } - - /** - * Loads the .tor.onion mappings from https-everywhere. - */ - async _loadRules() { - const rules = await this.httpsEverywhereControl.getTorOnionRules(); - // Remove http observer if we are able to load some rules directly. - if (rules.length) { - this._removeObserver(); - this._removeObserver = () => {}; - } - this._clear(); - log.debug(`Loading ${rules.length} rules`, rules); - for (const rule of rules) { - // Here we are trusting that the securedrop ruleset follows some conventions so that we can - // assume there is a host mapping from `rule.host` to the hostname of the URL in `rule.to`. - try { - const url = new URL(rule.to); - const shortHost = rule.host; - const longHost = url.hostname; - this._addMapping(shortHost, longHost); - } catch (e) { - log.error("Could not process rule:", rule); - } - } - } - - /** - * Loads a http observer to listen for local redirects for populating - * the .tor.onion -> .onion mappings. Should only be used if we cannot ask https-everywhere - * directly for the mappings. - */ - _loadHttpObserver() { - this._removeObserver = observe("http-on-before-connect", channel => { - if ( - channel.isMainDocumentChannel && - channel.originalURI.host.endsWith(".tor.onion") - ) { - this._addMapping(channel.originalURI.host, channel.URI.host); - } - }); - } - - uninit() { - this._clear(); - this._removeObserver(); - this._removeObserver = () => {}; - if (this.httpsEverywhereControl) { - this.httpsEverywhereControl.unload(); - delete this.httpsEverywhereControl; - } - clearTimeout(this._rulesetTimeout); - this._rulesetTimeout = null; - this._rulesetTimestamp = null; - } - - _clear() { - this._onionMap.clear(); - } - - _addMapping(shortOnionHost, longOnionHost) { - this._onionMap.set(longOnionHost, shortOnionHost); - } - - getShortURI(onionURI) { - if ( - (onionURI.schemeIs("http") || onionURI.schemeIs("https")) && - this._onionMap.has(onionURI.host) - ) { - return onionURI - .mutate() - .setHost(this._onionMap.get(onionURI.host)) - .finalize(); - } - return null; - } -} - -let OnionAliasStore = new _OnionAliasStore(); diff --git a/browser/components/onionservices/moz.build b/browser/components/onionservices/moz.build index 8027233d65a68..6187035ca00af 100644 --- a/browser/components/onionservices/moz.build +++ b/browser/components/onionservices/moz.build @@ -3,7 +3,6 @@ JAR_MANIFESTS += ["jar.mn"] EXTRA_JS_MODULES += [ "ExtensionMessaging.jsm", "HttpsEverywhereControl.jsm", - "OnionAliasStore.jsm", "OnionLocationChild.jsm", "OnionLocationParent.jsm", ] diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm index 29ee12914719b..db83e09109bf2 100644 --- a/browser/components/urlbar/UrlbarInput.jsm +++ b/browser/components/urlbar/UrlbarInput.jsm @@ -359,10 +359,7 @@ class UrlbarInput { // user makes the input empty, switches tabs, and switches back, we want the // URI to become visible again so the user knows what URI they're viewing. if (value === null || (!value && dueToTabSwitch)) { - uri = - uri || - this.window.gBrowser.selectedBrowser.currentOnionAliasURI || - this.window.gBrowser.currentURI; + uri = uri || this.window.gBrowser.currentURI; // Strip off usernames and passwords for the location bar try { uri = Services.io.createExposableURI(uri); @@ -2132,13 +2129,7 @@ class UrlbarInput { }
let uri; - // When we rewrite .onion to an alias, gBrowser.currentURI will be different than - // the URI displayed in the urlbar. We need to use the urlbar value to copy the - // alias instead of the actual .onion URI that is loaded. - if ( - this.getAttribute("pageproxystate") == "valid" && - !this.window.gBrowser.selectedBrowser.currentOnionAliasURI - ) { + if (this.getAttribute("pageproxystate") == "valid") { uri = this.window.gBrowser.currentURI; } else { // The value could be: diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 0632b6fac2598..d8a059910a0f9 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -5766,10 +5766,6 @@ void nsDocShell::OnRedirectStateChange(nsIChannel* aOldChannel, return; }
- if (!mOnionUrlbarRewritesAllowed && IsTorOnionRedirect(oldURI, newURI)) { - mOnionUrlbarRewritesAllowed = true; - } - // DocumentChannel adds redirect chain to global history in the parent // process. The redirect chain can't be queried from the content process, so // there's no need to update global history here. @@ -9191,20 +9187,6 @@ static bool NavigationShouldTakeFocus(nsDocShell* aDocShell, return !Preferences::GetBool("browser.tabs.loadDivertedInBackground", false); }
-/* static */ -bool nsDocShell::IsTorOnionRedirect(nsIURI* aOldURI, nsIURI* aNewURI) { - nsAutoCString oldHost; - nsAutoCString newHost; - if (aOldURI && aNewURI && NS_SUCCEEDED(aOldURI->GetHost(oldHost)) && - StringEndsWith(oldHost, ".tor.onion"_ns) && - NS_SUCCEEDED(aNewURI->GetHost(newHost)) && - StringEndsWith(newHost, ".onion"_ns) && - !StringEndsWith(newHost, ".tor.onion"_ns)) { - return true; - } - return false; -} - nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState, Maybe<uint32_t> aCacheKey) { MOZ_ASSERT(aLoadState, "need a load state!"); @@ -9358,30 +9340,6 @@ nsresult nsDocShell::InternalLoad(nsDocShellLoadState* aLoadState,
mAllowKeywordFixup = aLoadState->HasInternalLoadFlags( INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP); - - if (mOnionUrlbarRewritesAllowed) { - mOnionUrlbarRewritesAllowed = false; - nsCOMPtr<nsIURI> referrer; - nsIReferrerInfo* referrerInfo = aLoadState->GetReferrerInfo(); - if (referrerInfo) { - referrerInfo->GetOriginalReferrer(getter_AddRefs(referrer)); - bool isPrivateWin = false; - Document* doc = GetDocument(); - if (doc) { - isPrivateWin = - doc->NodePrincipal()->OriginAttributesRef().mPrivateBrowsingId > 0; - nsCOMPtr<nsIScriptSecurityManager> secMan = - do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID); - mOnionUrlbarRewritesAllowed = - secMan && NS_SUCCEEDED(secMan->CheckSameOriginURI( - aLoadState->URI(), referrer, false, isPrivateWin)); - } - } - } - mOnionUrlbarRewritesAllowed = - mOnionUrlbarRewritesAllowed || - aLoadState->HasInternalLoadFlags(INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES); - mURIResultedInDocument = false; // reset the clock...
// See if this is actually a load between two history entries for the same @@ -11804,7 +11762,6 @@ nsresult nsDocShell::AddToSessionHistory( HistoryID(), GetCreatedDynamically(), originalURI, resultPrincipalURI, loadReplace, referrerInfo, srcdoc, srcdocEntry, baseURI, saveLayoutState, expired, userActivation); - entry->SetOnionUrlbarRewritesAllowed(mOnionUrlbarRewritesAllowed);
if (mBrowsingContext->IsTop() && GetSessionHistory()) { bool shouldPersist = ShouldAddToSessionHistory(aURI, aChannel); @@ -13735,12 +13692,3 @@ void nsDocShell::MaybeDisconnectChildListenersOnPageHide() { mChannelToDisconnectOnPageHide = 0; } } - -NS_IMETHODIMP -nsDocShell::GetOnionUrlbarRewritesAllowed(bool* aOnionUrlbarRewritesAllowed) { - NS_ENSURE_ARG(aOnionUrlbarRewritesAllowed); - *aOnionUrlbarRewritesAllowed = - StaticPrefs::browser_urlbar_onionRewrites_enabled() && - mOnionUrlbarRewritesAllowed; - return NS_OK; -} diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h index adbbf38ef2775..1b06af5c84e5c 100644 --- a/docshell/base/nsDocShell.h +++ b/docshell/base/nsDocShell.h @@ -134,9 +134,6 @@ class nsDocShell final : public nsDocLoader,
// Whether the load should go through LoadURIDelegate. INTERNAL_LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE = 0x2000, - - // Whether rewriting the urlbar to a short .onion alias is allowed. - INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES = 0x4000, };
// Event type dispatched by RestorePresentation @@ -571,8 +568,6 @@ class nsDocShell final : public nsDocLoader,
virtual void DestroyChildren() override;
- static bool IsTorOnionRedirect(nsIURI* aOldURI, nsIURI* aNewURI); - // Overridden from nsDocLoader, this provides more information than the // normal OnStateChange with flags STATE_REDIRECTING virtual void OnRedirectStateChange(nsIChannel* aOldChannel, @@ -1270,7 +1265,6 @@ class nsDocShell final : public nsDocLoader, bool mCSSErrorReportingEnabled : 1; bool mAllowAuth : 1; bool mAllowKeywordFixup : 1; - bool mOnionUrlbarRewritesAllowed : 1; bool mDisableMetaRefreshWhenInactive : 1; bool mIsAppTab : 1; bool mDeviceSizeIsPageSize : 1; diff --git a/docshell/base/nsDocShellLoadState.cpp b/docshell/base/nsDocShellLoadState.cpp index 9eb0e9307113e..6cac48a517283 100644 --- a/docshell/base/nsDocShellLoadState.cpp +++ b/docshell/base/nsDocShellLoadState.cpp @@ -874,10 +874,6 @@ void nsDocShellLoadState::CalculateLoadURIFlags() { mInternalLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_FIRST_LOAD; }
- if (mLoadFlags & nsIWebNavigation::LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES) { - mInternalLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES; - } - if (mLoadFlags & nsIWebNavigation::LOAD_FLAGS_BYPASS_CLASSIFIER) { mInternalLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_BYPASS_CLASSIFIER; } diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl index bd373c54a6327..352b70d120305 100644 --- a/docshell/base/nsIDocShell.idl +++ b/docshell/base/nsIDocShell.idl @@ -838,9 +838,4 @@ interface nsIDocShell : nsIDocShellTreeItem * until session history state is moved into the parent process. */ void persistLayoutHistoryState(); - - /** - * Whether rewriting the urlbar to a short .onion alias is allowed. - */ - [infallible] readonly attribute boolean onionUrlbarRewritesAllowed; }; diff --git a/docshell/base/nsIWebNavigation.idl b/docshell/base/nsIWebNavigation.idl index 2ee46f3d68869..bec4f13d8b2b2 100644 --- a/docshell/base/nsIWebNavigation.idl +++ b/docshell/base/nsIWebNavigation.idl @@ -268,11 +268,6 @@ interface nsIWebNavigation : nsISupports */ const unsigned long LOAD_FLAGS_USER_ACTIVATION = 0x8000000;
- /** - * Allow rewriting the urlbar to a short .onion alias. - */ - const unsigned long LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES = 0x10000000; - /** * Loads a given URI. This will give priority to loading the requested URI * in the object implementing this interface. If it can't be loaded here diff --git a/docshell/shistory/SessionHistoryEntry.cpp b/docshell/shistory/SessionHistoryEntry.cpp index 3a882dd1ffe79..509955485108e 100644 --- a/docshell/shistory/SessionHistoryEntry.cpp +++ b/docshell/shistory/SessionHistoryEntry.cpp @@ -934,20 +934,6 @@ SessionHistoryEntry::SetPersist(bool aPersist) { return NS_OK; }
-NS_IMETHODIMP -SessionHistoryEntry::GetOnionUrlbarRewritesAllowed( - bool* aOnionUrlbarRewritesAllowed) { - *aOnionUrlbarRewritesAllowed = mInfo->mOnionUrlbarRewritesAllowed; - return NS_OK; -} - -NS_IMETHODIMP -SessionHistoryEntry::SetOnionUrlbarRewritesAllowed( - bool aOnionUrlbarRewritesAllowed) { - mInfo->mOnionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed; - return NS_OK; -} - NS_IMETHODIMP SessionHistoryEntry::GetScrollPosition(int32_t* aX, int32_t* aY) { *aX = mInfo->mScrollPositionX; diff --git a/docshell/shistory/SessionHistoryEntry.h b/docshell/shistory/SessionHistoryEntry.h index 8f7e6f3193e97..2fa195cf3b8f0 100644 --- a/docshell/shistory/SessionHistoryEntry.h +++ b/docshell/shistory/SessionHistoryEntry.h @@ -170,7 +170,6 @@ class SessionHistoryInfo { bool mPersist = true; bool mHasUserInteraction = false; bool mHasUserActivation = false; - bool mOnionUrlbarRewritesAllowed = false;
union SharedState { SharedState(); diff --git a/docshell/shistory/nsISHEntry.idl b/docshell/shistory/nsISHEntry.idl index 622402456d076..73ac40551d4e4 100644 --- a/docshell/shistory/nsISHEntry.idl +++ b/docshell/shistory/nsISHEntry.idl @@ -260,11 +260,6 @@ interface nsISHEntry : nsISupports */ [infallible] attribute boolean persist;
- /** - * Whether rewriting the urlbar to a short .onion alias is allowed. - */ - [infallible] attribute boolean onionUrlbarRewritesAllowed; - /** * Set/Get the visual viewport scroll position if session history is * changed through anchor navigation or pushState. diff --git a/docshell/shistory/nsSHEntry.cpp b/docshell/shistory/nsSHEntry.cpp index 41ea6086df8b4..1e4000eacd2bc 100644 --- a/docshell/shistory/nsSHEntry.cpp +++ b/docshell/shistory/nsSHEntry.cpp @@ -44,8 +44,7 @@ nsSHEntry::nsSHEntry() mLoadedInThisProcess(false), mPersist(true), mHasUserInteraction(false), - mHasUserActivation(false), - mOnionUrlbarRewritesAllowed(false) {} + mHasUserActivation(false) {}
nsSHEntry::nsSHEntry(const nsSHEntry& aOther) : mShared(aOther.mShared), @@ -73,8 +72,7 @@ nsSHEntry::nsSHEntry(const nsSHEntry& aOther) mLoadedInThisProcess(aOther.mLoadedInThisProcess), mPersist(aOther.mPersist), mHasUserInteraction(false), - mHasUserActivation(aOther.mHasUserActivation), - mOnionUrlbarRewritesAllowed(aOther.mOnionUrlbarRewritesAllowed) {} + mHasUserActivation(aOther.mHasUserActivation) {}
nsSHEntry::~nsSHEntry() { // Null out the mParent pointers on all our kids. @@ -882,18 +880,6 @@ nsSHEntry::SetPersist(bool aPersist) { return NS_OK; }
-NS_IMETHODIMP -nsSHEntry::GetOnionUrlbarRewritesAllowed(bool* aOnionUrlbarRewritesAllowed) { - *aOnionUrlbarRewritesAllowed = mOnionUrlbarRewritesAllowed; - return NS_OK; -} - -NS_IMETHODIMP -nsSHEntry::SetOnionUrlbarRewritesAllowed(bool aOnionUrlbarRewritesAllowed) { - mOnionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed; - return NS_OK; -} - NS_IMETHODIMP nsSHEntry::CreateLoadInfo(nsDocShellLoadState** aLoadState) { nsCOMPtr<nsIURI> uri = GetURI(); @@ -943,10 +929,6 @@ nsSHEntry::CreateLoadInfo(nsDocShellLoadState** aLoadState) { } else { srcdoc = VoidString(); } - if (GetOnionUrlbarRewritesAllowed()) { - flags |= nsDocShell::InternalLoad:: - INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES; - } loadState->SetSrcdocData(srcdoc); loadState->SetBaseURI(baseURI); loadState->SetInternalLoadFlags(flags); diff --git a/docshell/shistory/nsSHEntry.h b/docshell/shistory/nsSHEntry.h index 76be0ac650505..326b0092cf940 100644 --- a/docshell/shistory/nsSHEntry.h +++ b/docshell/shistory/nsSHEntry.h @@ -66,7 +66,6 @@ class nsSHEntry : public nsISHEntry { bool mPersist; bool mHasUserInteraction; bool mHasUserActivation; - bool mOnionUrlbarRewritesAllowed; };
#endif /* nsSHEntry_h */ diff --git a/dom/interfaces/base/nsIBrowser.idl b/dom/interfaces/base/nsIBrowser.idl index b8a25de3629e1..973a9244b8f8b 100644 --- a/dom/interfaces/base/nsIBrowser.idl +++ b/dom/interfaces/base/nsIBrowser.idl @@ -127,8 +127,7 @@ interface nsIBrowser : nsISupports in boolean aIsSynthetic, in boolean aHasRequestContextID, in uint64_t aRequestContextID, - in AString aContentType, - in boolean aOnionUrlbarRewritesAllowed); + in AString aContentType);
/** * Determine what process switching behavior this browser element should have. diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp index bb368b38c5f42..9f1bccda2efef 100644 --- a/dom/ipc/BrowserChild.cpp +++ b/dom/ipc/BrowserChild.cpp @@ -3714,8 +3714,6 @@ NS_IMETHODIMP BrowserChild::OnLocationChange(nsIWebProgress* aWebProgress,
locationChangeData->mayEnableCharacterEncodingMenu() = docShell->GetMayEnableCharacterEncodingMenu(); - locationChangeData->onionUrlbarRewritesAllowed() = - docShell->GetOnionUrlbarRewritesAllowed();
locationChangeData->contentPrincipal() = document->NodePrincipal(); locationChangeData->contentPartitionedPrincipal() = diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp index 10f94926a53ef..4145111ae8490 100644 --- a/dom/ipc/BrowserParent.cpp +++ b/dom/ipc/BrowserParent.cpp @@ -2788,8 +2788,7 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnLocationChange( aLocationChangeData->isSyntheticDocument(), aLocationChangeData->requestContextID().isSome(), aLocationChangeData->requestContextID().valueOr(0), - aLocationChangeData->contentType(), - aLocationChangeData->onionUrlbarRewritesAllowed()); + aLocationChangeData->contentType()); } }
diff --git a/dom/ipc/PBrowser.ipdl b/dom/ipc/PBrowser.ipdl index 5b21a809251e5..5706c7f5da003 100644 --- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -143,7 +143,6 @@ struct WebProgressLocationChangeData bool isNavigating; bool isSyntheticDocument; bool mayEnableCharacterEncodingMenu; - bool onionUrlbarRewritesAllowed; nsString contentType; nsString title; nsString charset; diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 8567b4e5a2272..e6efcc4c16d63 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -1338,12 +1338,6 @@ value: true mirror: always
- # Whether rewriting the urlbar to a short .onion alias is allowed. -- name: browser.urlbar.onionRewrites.enabled - type: RelaxedAtomicBool - value: true - mirror: always - - name: browser.viewport.desktopWidth type: RelaxedAtomicInt32 value: 980 diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index bdad4efc7f99b..4c0c6e9a98695 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -5527,8 +5527,6 @@ pro.om
// onion : https://tools.ietf.org/html/rfc7686 onion -tor.onion -securedrop.tor.onion
// org : https://en.wikipedia.org/wiki/.org org diff --git a/netwerk/ipc/DocumentLoadListener.cpp b/netwerk/ipc/DocumentLoadListener.cpp index d76a14e1203af..0b460750971a0 100644 --- a/netwerk/ipc/DocumentLoadListener.cpp +++ b/netwerk/ipc/DocumentLoadListener.cpp @@ -2539,16 +2539,6 @@ DocumentLoadListener::AsyncOnChannelRedirect( "mHaveVisibleRedirect=%c", this, mHaveVisibleRedirect ? 'T' : 'F'));
- // Like the code above for allowing mixed content, we need to check this here - // in case the redirect is not handled in the docshell. - nsCOMPtr<nsIURI> oldURI, newURI; - aOldChannel->GetURI(getter_AddRefs(oldURI)); - aNewChannel->GetURI(getter_AddRefs(newURI)); - if (nsDocShell::IsTorOnionRedirect(oldURI, newURI)) { - mLoadStateInternalLoadFlags |= - nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_ONION_URLBAR_REWRITES; - } - // We need the original URI of the current channel to use to open the real // channel in the content process. Unfortunately we overwrite the original // uri of the new channel with the original pre-redirect URI, so grab diff --git a/toolkit/content/widgets/browser-custom-element.js b/toolkit/content/widgets/browser-custom-element.js index 8120ca995103a..59a7a5b435229 100644 --- a/toolkit/content/widgets/browser-custom-element.js +++ b/toolkit/content/widgets/browser-custom-element.js @@ -255,8 +255,6 @@
this._mayEnableCharacterEncodingMenu = null;
- this._onionUrlbarRewritesAllowed = false; - this._contentPrincipal = null;
this._contentPartitionedPrincipal = null; @@ -585,12 +583,6 @@ } }
- get onionUrlbarRewritesAllowed() { - return this.isRemoteBrowser - ? this._onionUrlbarRewritesAllowed - : this.docShell.onionUrlbarRewritesAllowed; - } - get contentPrincipal() { return this.isRemoteBrowser ? this._contentPrincipal @@ -1120,8 +1112,7 @@ aIsSynthetic, aHaveRequestContextID, aRequestContextID, - aContentType, - aOnionUrlbarRewritesAllowed + aContentType ) { if (this.isRemoteBrowser && this.messageManager) { if (aCharset != null) { @@ -1143,7 +1134,6 @@ this._contentRequestContextID = aHaveRequestContextID ? aRequestContextID : null; - this._onionUrlbarRewritesAllowed = aOnionUrlbarRewritesAllowed; } }
@@ -1545,7 +1535,6 @@ "_contentPrincipal", "_contentPartitionedPrincipal", "_isSyntheticDocument", - "_onionUrlbarRewritesAllowed", ] ); } diff --git a/toolkit/modules/sessionstore/SessionHistory.jsm b/toolkit/modules/sessionstore/SessionHistory.jsm index e78ec8ddf6b74..f02930aa6e22d 100644 --- a/toolkit/modules/sessionstore/SessionHistory.jsm +++ b/toolkit/modules/sessionstore/SessionHistory.jsm @@ -310,7 +310,6 @@ var SessionHistoryInternal = { }
entry.persist = shEntry.persist; - entry.onionUrlbarRewritesAllowed = shEntry.onionUrlbarRewritesAllowed;
return entry; }, @@ -605,10 +604,6 @@ var SessionHistoryInternal = { } }
- if (entry.onionUrlbarRewritesAllowed) { - shEntry.onionUrlbarRewritesAllowed = entry.onionUrlbarRewritesAllowed; - } - return shEntry; },
diff --git a/xpcom/reflect/xptinfo/xptinfo.h b/xpcom/reflect/xptinfo/xptinfo.h index 4295efb39f1fc..efee881c14217 100644 --- a/xpcom/reflect/xptinfo/xptinfo.h +++ b/xpcom/reflect/xptinfo/xptinfo.h @@ -514,8 +514,7 @@ static_assert(sizeof(nsXPTMethodInfo) == 8, "wrong size"); #if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE) # define PARAM_BUFFER_COUNT 18 #else -// The max is currently updateForLocationChange in nsIBrowser.idl -# define PARAM_BUFFER_COUNT 15 +# define PARAM_BUFFER_COUNT 14 #endif
/**