mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
2d82d50b87
The meaning of resource:///, resource://app/ and resource://gre/ needs to remain constant. Unfortunately, the model of the resource protocol handler is that it is possible to set substitutions that change their meaning. So, we forbid setting overwriting the substitutions for those three special "host names". Unfortunately, with e10s, the full list of substitutions is also sent to the content process, which then sets substitutions, making it harder to know in which cases SetSubstitution is valid for those three "host names" or not. So instead of trying to find the right heuristics, use the recently added SubstitutingProtocolHandler::ResolveSpecialCases API to handle the three "host names" instead of storing them as "normal" substitutions. Still actively reject SetSubstitution with the three special "host names" so as to find issues such as bug 1224000 instead of allowing the chrome manifest entry and have it silently ignored. Additionally, make GetSubstitution return the URIs for the three special "host names" through GetSubstitutionInternal, replacing what was originally added in bug 257162. Those changes from bug 257162 relied on the resource:app string being handled by nsXREDirProvider::GetFile, but that was removed in bug 620931, effectively making that code now in GetSubstitutionInternal useless.
64 lines
2.1 KiB
C++
64 lines
2.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* 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/. */
|
|
|
|
#ifndef nsResProtocolHandler_h___
|
|
#define nsResProtocolHandler_h___
|
|
|
|
#include "SubstitutingProtocolHandler.h"
|
|
|
|
#include "nsIResProtocolHandler.h"
|
|
#include "nsInterfaceHashtable.h"
|
|
#include "nsWeakReference.h"
|
|
#include "nsStandardURL.h"
|
|
|
|
struct SubstitutionMapping;
|
|
class nsResProtocolHandler final : public nsIResProtocolHandler,
|
|
public mozilla::SubstitutingProtocolHandler,
|
|
public nsSupportsWeakReference
|
|
{
|
|
public:
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
NS_DECL_NSIRESPROTOCOLHANDLER
|
|
|
|
NS_FORWARD_NSIPROTOCOLHANDLER(mozilla::SubstitutingProtocolHandler::)
|
|
|
|
nsResProtocolHandler()
|
|
: SubstitutingProtocolHandler("resource", URI_STD | URI_IS_UI_RESOURCE | URI_IS_LOCAL_RESOURCE,
|
|
/* aEnforceFileOrJar = */ false)
|
|
{}
|
|
|
|
nsresult Init();
|
|
|
|
NS_IMETHOD SetSubstitution(const nsACString& aRoot, nsIURI* aBaseURI) override;
|
|
|
|
NS_IMETHOD GetSubstitution(const nsACString& aRoot, nsIURI** aResult) override
|
|
{
|
|
return mozilla::SubstitutingProtocolHandler::GetSubstitution(aRoot, aResult);
|
|
}
|
|
|
|
NS_IMETHOD HasSubstitution(const nsACString& aRoot, bool* aResult) override
|
|
{
|
|
return mozilla::SubstitutingProtocolHandler::HasSubstitution(aRoot, aResult);
|
|
}
|
|
|
|
NS_IMETHOD ResolveURI(nsIURI *aResURI, nsACString& aResult) override
|
|
{
|
|
return mozilla::SubstitutingProtocolHandler::ResolveURI(aResURI, aResult);
|
|
}
|
|
|
|
protected:
|
|
nsresult GetSubstitutionInternal(const nsACString& aRoot, nsIURI** aResult) override;
|
|
virtual ~nsResProtocolHandler() {}
|
|
|
|
bool ResolveSpecialCases(const nsACString& aHost, const nsACString& aPath,
|
|
nsACString& aResult) override;
|
|
|
|
private:
|
|
nsCString mAppURI;
|
|
nsCString mGREURI;
|
|
};
|
|
|
|
#endif /* nsResProtocolHandler_h___ */
|