1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef nsResProtocolHandler_h___ 7 #define nsResProtocolHandler_h___ 8 9 #include "SubstitutingProtocolHandler.h" 10 11 #include "nsIResProtocolHandler.h" 12 #include "nsInterfaceHashtable.h" 13 #include "nsWeakReference.h" 14 #include "nsStandardURL.h" 15 16 class nsISubstitutionObserver; 17 18 struct SubstitutionMapping; 19 class nsResProtocolHandler final : public nsIResProtocolHandler, 20 public mozilla::SubstitutingProtocolHandler, 21 public nsSupportsWeakReference { 22 public: 23 NS_DECL_ISUPPORTS_INHERITED 24 NS_DECL_NSIRESPROTOCOLHANDLER 25 NS_FORWARD_NSIPROTOCOLHANDLER(mozilla::SubstitutingProtocolHandler::)26 NS_FORWARD_NSIPROTOCOLHANDLER(mozilla::SubstitutingProtocolHandler::) 27 28 nsResProtocolHandler() 29 : SubstitutingProtocolHandler( 30 "resource", URI_STD | URI_IS_UI_RESOURCE | URI_IS_LOCAL_RESOURCE, 31 /* aEnforceFileOrJar = */ false) {} 32 33 MOZ_MUST_USE nsresult Init(); 34 35 NS_IMETHOD SetSubstitution(const nsACString& aRoot, 36 nsIURI* aBaseURI) override; 37 NS_IMETHOD SetSubstitutionWithFlags(const nsACString& aRoot, nsIURI* aBaseURI, 38 uint32_t aFlags) override; 39 GetSubstitution(const nsACString & aRoot,nsIURI ** aResult)40 NS_IMETHOD GetSubstitution(const nsACString& aRoot, 41 nsIURI** aResult) override { 42 return mozilla::SubstitutingProtocolHandler::GetSubstitution(aRoot, 43 aResult); 44 } 45 HasSubstitution(const nsACString & aRoot,bool * aResult)46 NS_IMETHOD HasSubstitution(const nsACString& aRoot, bool* aResult) override { 47 return mozilla::SubstitutingProtocolHandler::HasSubstitution(aRoot, 48 aResult); 49 } 50 ResolveURI(nsIURI * aResURI,nsACString & aResult)51 NS_IMETHOD ResolveURI(nsIURI* aResURI, nsACString& aResult) override { 52 return mozilla::SubstitutingProtocolHandler::ResolveURI(aResURI, aResult); 53 } 54 AddObserver(nsISubstitutionObserver * aObserver)55 NS_IMETHOD AddObserver(nsISubstitutionObserver* aObserver) override { 56 return mozilla::SubstitutingProtocolHandler::AddObserver(aObserver); 57 } 58 RemoveObserver(nsISubstitutionObserver * aObserver)59 NS_IMETHOD RemoveObserver(nsISubstitutionObserver* aObserver) override { 60 return mozilla::SubstitutingProtocolHandler::RemoveObserver(aObserver); 61 } 62 63 protected: 64 MOZ_MUST_USE nsresult GetSubstitutionInternal(const nsACString& aRoot, 65 nsIURI** aResult, 66 uint32_t* aFlags) override; ~nsResProtocolHandler()67 virtual ~nsResProtocolHandler() {} 68 69 MOZ_MUST_USE bool ResolveSpecialCases(const nsACString& aHost, 70 const nsACString& aPath, 71 const nsACString& aPathname, 72 nsACString& aResult) override; 73 74 private: 75 nsCString mAppURI; 76 nsCString mGREURI; 77 }; 78 79 #endif /* nsResProtocolHandler_h___ */ 80