diff --git a/docshell/base/URIFixup.jsm b/docshell/base/URIFixup.jsm index 8196c60e373d..001a43bf0964 100644 --- a/docshell/base/URIFixup.jsm +++ b/docshell/base/URIFixup.jsm @@ -55,13 +55,6 @@ XPCOMUtils.defineLazyServiceGetter( "nsIDNSService" ); -XPCOMUtils.defineLazyServiceGetter( - lazy, - "handlerService", - "@mozilla.org/uriloader/handler-service;1", - "nsIHandlerService" -); - XPCOMUtils.defineLazyPreferenceGetter( lazy, "fixupSchemeTypos", @@ -266,15 +259,7 @@ XPCOMUtils.defineLazyGetter(lazy, "knownSuffixes", () => { return suffixes; }); -function URIFixup() { - // There are cases that nsIExternalProtocolService.externalProtocolHandlerExists() does - // not work well and returns always true due to flatpak. In this case, in order to - // fallback to nsIHandlerService.exits(), we test whether can trust - // nsIExternalProtocolService here. - this._trustExternalProtocolService = !lazy.externalProtocolService.externalProtocolHandlerExists( - `__dummy${Date.now()}__` - ); -} +function URIFixup() {} URIFixup.prototype = { get FIXUP_FLAG_NONE() { @@ -344,7 +329,7 @@ URIFixup.prototype = { scheme && (isCommonProtocol || Services.io.getProtocolHandler(scheme) != lazy.defaultProtocolHandler || - this._isKnownExternalProtocol(scheme)); + lazy.externalProtocolService.externalProtocolHandlerExists(scheme)); if ( canHandleProtocol || @@ -646,14 +631,6 @@ URIFixup.prototype = { isDomainKnown, - _isKnownExternalProtocol(scheme) { - return this._trustExternalProtocolService - ? lazy.externalProtocolService.externalProtocolHandlerExists(scheme) - : lazy.handlerService.exists( - lazy.externalProtocolService.getProtocolHandlerInfo(scheme) - ); - }, - classID: Components.ID("{c6cf88b7-452e-47eb-bdc9-86e3561648ef}"), QueryInterface: ChromeUtils.generateQI(["nsIURIFixup"]), }; diff --git a/docshell/test/unit/test_URIFixup_external_protocol_fallback.js b/docshell/test/unit/test_URIFixup_external_protocol_fallback.js deleted file mode 100644 index 61fa921cc881..000000000000 --- a/docshell/test/unit/test_URIFixup_external_protocol_fallback.js +++ /dev/null @@ -1,100 +0,0 @@ -/* 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/. */ - -"use strict"; - -// Test whether fallback mechanism is working if don't trust nsIExternalProtocolService. - -const { MockRegistrar } = ChromeUtils.import( - "resource://testing-common/MockRegistrar.jsm" -); - -add_task(async function setup() { - info( - "Prepare mock nsIExternalProtocolService whose externalProtocolHandlerExists returns always true" - ); - const externalProtocolService = Cc[ - "@mozilla.org/uriloader/external-protocol-service;1" - ].getService(Ci.nsIExternalProtocolService); - const mockId = MockRegistrar.register( - "@mozilla.org/uriloader/external-protocol-service;1", - { - getProtocolHandlerInfo: scheme => - externalProtocolService.getProtocolHandlerInfo(scheme), - externalProtocolHandlerExists: () => true, - QueryInterface: ChromeUtils.generateQI(["nsIExternalProtocolService"]), - } - ); - const mockExternalProtocolService = Cc[ - "@mozilla.org/uriloader/external-protocol-service;1" - ].getService(Ci.nsIExternalProtocolService); - Assert.ok( - mockExternalProtocolService.externalProtocolHandlerExists("__invalid__"), - "Mock service is working" - ); - - info("Register new dummy protocol"); - const dummyProtocolHandlerInfo = externalProtocolService.getProtocolHandlerInfo( - "dummy" - ); - const handlerService = Cc[ - "@mozilla.org/uriloader/handler-service;1" - ].getService(Ci.nsIHandlerService); - handlerService.store(dummyProtocolHandlerInfo); - - info("Prepare test search engine"); - await setupSearchService(); - await addTestEngines(); - await Services.search.setDefault( - Services.search.getEngineByName(kSearchEngineID) - ); - - registerCleanupFunction(() => { - handlerService.remove(dummyProtocolHandlerInfo); - MockRegistrar.unregister(mockId); - }); -}); - -add_task(function basic() { - const testData = [ - { - input: "mailto:test@example.com", - expected: isSupportedInHandlerService("mailto") - ? "mailto:test@example.com" - : "http://mailto:test@example.com/", - }, - { - input: "keyword:search", - expected: "https://www.example.org/?search=keyword%3Asearch", - }, - { - input: "dummy:protocol", - expected: "dummy:protocol", - }, - ]; - - for (const { input, expected } of testData) { - assertFixup(input, expected); - } -}); - -function assertFixup(input, expected) { - const { preferredURI } = Services.uriFixup.getFixupURIInfo( - input, - Services.uriFixup.FIXUP_FLAG_FIX_SCHEME_TYPOS - ); - Assert.equal(preferredURI.spec, expected); -} - -function isSupportedInHandlerService(scheme) { - const externalProtocolService = Cc[ - "@mozilla.org/uriloader/external-protocol-service;1" - ].getService(Ci.nsIExternalProtocolService); - const handlerService = Cc[ - "@mozilla.org/uriloader/handler-service;1" - ].getService(Ci.nsIHandlerService); - return handlerService.exists( - externalProtocolService.getProtocolHandlerInfo(scheme) - ); -} diff --git a/docshell/test/unit/xpcshell.ini b/docshell/test/unit/xpcshell.ini index 21e63c2228d0..21cf5f321dde 100644 --- a/docshell/test/unit/xpcshell.ini +++ b/docshell/test/unit/xpcshell.ini @@ -10,7 +10,6 @@ support-files = [test_browsing_context_structured_clone.js] [test_URIFixup.js] [test_URIFixup_check_host.js] -[test_URIFixup_external_protocol_fallback.js] [test_URIFixup_forced.js] # Disabled for 1563343 -- URI fixup should be done at the app level in GV. skip-if = os == 'android' @@ -25,6 +24,6 @@ skip-if = skip-if = true [test_privacy_transition.js] [test_subframe_stop_after_parent_error.js] -skip-if = +skip-if = os == 'android' appname == 'thunderbird' # Needs to run without E10s, can't do that.