diff --git a/testing/web-platform/meta/workers/constructors/SharedWorker/same-origin.html.ini b/testing/web-platform/meta/workers/constructors/SharedWorker/same-origin.html.ini index 844308e76deb..92b746e48de4 100644 --- a/testing/web-platform/meta/workers/constructors/SharedWorker/same-origin.html.ini +++ b/testing/web-platform/meta/workers/constructors/SharedWorker/same-origin.html.ini @@ -1,6 +1,3 @@ [same-origin.html] - [unsupported_scheme] - expected: - if (os == "mac") and not debug: [FAIL, PASS] - if (os == "android") and not debug: [FAIL, PASS] - FAIL + expected: + if (os == "android") and fission: [OK, TIMEOUT] diff --git a/testing/web-platform/meta/workers/constructors/Worker/same-origin.html.ini b/testing/web-platform/meta/workers/constructors/Worker/same-origin.html.ini index 844308e76deb..92b746e48de4 100644 --- a/testing/web-platform/meta/workers/constructors/Worker/same-origin.html.ini +++ b/testing/web-platform/meta/workers/constructors/Worker/same-origin.html.ini @@ -1,6 +1,3 @@ [same-origin.html] - [unsupported_scheme] - expected: - if (os == "mac") and not debug: [FAIL, PASS] - if (os == "android") and not debug: [FAIL, PASS] - FAIL + expected: + if (os == "android") and fission: [OK, TIMEOUT] diff --git a/uriloader/exthandler/nsExternalProtocolHandler.cpp b/uriloader/exthandler/nsExternalProtocolHandler.cpp index 4e93977b8f39..f969cb2d66bf 100644 --- a/uriloader/exthandler/nsExternalProtocolHandler.cpp +++ b/uriloader/exthandler/nsExternalProtocolHandler.cpp @@ -7,6 +7,7 @@ #include "mozilla/dom/ContentChild.h" #include "mozilla/BasePrincipal.h" +#include "mozilla/ScopeExit.h" #include "nsIURI.h" #include "nsExternalProtocolHandler.h" #include "nsString.h" @@ -148,22 +149,25 @@ nsresult nsExtProtocolChannel::OpenURL() { nsCOMPtr extProtService( do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); + auto cleanup = mozilla::MakeScopeExit([&] { + mCallbacks = nullptr; + mListener = nullptr; + }); + if (extProtService) { -#ifdef DEBUG nsAutoCString urlScheme; mUrl->GetScheme(urlScheme); bool haveHandler = false; extProtService->ExternalProtocolHandlerExists(urlScheme.get(), &haveHandler); - NS_ASSERTION(haveHandler, - "Why do we have a channel for this url if we don't support " - "the protocol?"); -#endif + if (!haveHandler) { + return NS_ERROR_UNKNOWN_PROTOCOL; + } RefPtr ctx; rv = mLoadInfo->GetTargetBrowsingContext(getter_AddRefs(ctx)); if (NS_FAILED(rv)) { - goto finish; + return rv; } RefPtr triggeringPrincipal = mLoadInfo->TriggeringPrincipal(); @@ -189,9 +193,6 @@ nsresult nsExtProtocolChannel::OpenURL() { } } -finish: - mCallbacks = nullptr; - mListener = nullptr; return rv; } @@ -497,22 +498,6 @@ nsExternalProtocolHandler::AllowPort(int32_t port, const char* scheme, *_retval = false; return NS_OK; } -// returns TRUE if the OS can handle this protocol scheme and false otherwise. -bool nsExternalProtocolHandler::HaveExternalProtocolHandler(nsIURI* aURI) { - MOZ_ASSERT(aURI); - nsAutoCString scheme; - aURI->GetScheme(scheme); - - nsCOMPtr extProtSvc( - do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); - if (!extProtSvc) { - return false; - } - - bool haveHandler = false; - extProtSvc->ExternalProtocolHandlerExists(scheme.get(), &haveHandler); - return haveHandler; -} NS_IMETHODIMP nsExternalProtocolHandler::NewChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, @@ -520,14 +505,6 @@ nsExternalProtocolHandler::NewChannel(nsIURI* aURI, nsILoadInfo* aLoadInfo, NS_ENSURE_TRUE(aURI, NS_ERROR_UNKNOWN_PROTOCOL); NS_ENSURE_TRUE(aRetval, NS_ERROR_UNKNOWN_PROTOCOL); - // Only try to return a channel if we have a protocol handler for the url. - // nsOSHelperAppService::LoadUriInternal relies on this to check trustedness - // for some platforms at least. (win uses ::ShellExecute and unix uses - // gnome_url_show.) - if (!HaveExternalProtocolHandler(aURI)) { - return NS_ERROR_UNKNOWN_PROTOCOL; - } - nsCOMPtr channel = new nsExtProtocolChannel(aURI, aLoadInfo); channel.forget(aRetval); return NS_OK; diff --git a/uriloader/exthandler/nsExternalProtocolHandler.h b/uriloader/exthandler/nsExternalProtocolHandler.h index 373223bc3914..0b5b73da5cb6 100644 --- a/uriloader/exthandler/nsExternalProtocolHandler.h +++ b/uriloader/exthandler/nsExternalProtocolHandler.h @@ -30,7 +30,6 @@ class nsExternalProtocolHandler final : public nsIExternalProtocolHandler, ~nsExternalProtocolHandler(); // helper function - bool HaveExternalProtocolHandler(nsIURI* aURI); nsCString m_schemeName; }; diff --git a/uriloader/exthandler/win/nsOSHelperAppService.h b/uriloader/exthandler/win/nsOSHelperAppService.h index ff7c59721742..eb6ae76535c3 100644 --- a/uriloader/exthandler/win/nsOSHelperAppService.h +++ b/uriloader/exthandler/win/nsOSHelperAppService.h @@ -28,7 +28,6 @@ class nsOSHelperAppService : public nsExternalHelperAppService { // override nsIExternalProtocolService methods NS_IMETHOD OSProtocolHandlerExists(const char* aProtocolScheme, bool* aHandlerExists) override; - nsresult LoadUriInternal(nsIURI* aURL); NS_IMETHOD GetApplicationDescription(const nsACString& aScheme, nsAString& _retval) override;