tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

nsResProtocolHandler.h (2776B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      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 "mozilla/net/SubstitutingProtocolHandler.h"
     10 
     11 #include "nsIResProtocolHandler.h"
     12 #include "nsInterfaceHashtable.h"
     13 #include "nsWeakReference.h"
     14 
     15 struct SubstitutionMapping;
     16 class nsResProtocolHandler final
     17    : public nsIResProtocolHandler,
     18      public mozilla::net::SubstitutingProtocolHandler,
     19      public nsSupportsWeakReference {
     20 public:
     21  NS_DECL_ISUPPORTS_INHERITED
     22  NS_DECL_NSIRESPROTOCOLHANDLER
     23 
     24  static already_AddRefed<nsResProtocolHandler> GetSingleton();
     25 
     26  NS_FORWARD_NSIPROTOCOLHANDLER(mozilla::net::SubstitutingProtocolHandler::)
     27 
     28  nsResProtocolHandler()
     29      : mozilla::net::SubstitutingProtocolHandler(
     30            "resource",
     31            /* aEnforceFileOrJar = */ false) {}
     32 
     33  NS_IMETHOD SetSubstitution(const nsACString& aRoot,
     34                             nsIURI* aBaseURI) override;
     35  NS_IMETHOD SetSubstitutionWithFlags(const nsACString& aRoot, nsIURI* aBaseURI,
     36                                      uint32_t aFlags) override;
     37  NS_IMETHOD HasSubstitution(const nsACString& aRoot, bool* aResult) override;
     38 
     39  NS_IMETHOD GetSubstitution(const nsACString& aRoot,
     40                             nsIURI** aResult) override {
     41    return mozilla::net::SubstitutingProtocolHandler::GetSubstitution(aRoot,
     42                                                                      aResult);
     43  }
     44 
     45  NS_IMETHOD ResolveURI(nsIURI* aResURI, nsACString& aResult) override {
     46    return mozilla::net::SubstitutingProtocolHandler::ResolveURI(aResURI,
     47                                                                 aResult);
     48  }
     49 
     50 protected:
     51  [[nodiscard]] uint32_t GetJARFlags(const nsACString& aRoot) override;
     52  [[nodiscard]] nsresult GetSubstitutionInternal(const nsACString& aRoot,
     53                                                 nsIURI** aResult) override;
     54  virtual ~nsResProtocolHandler() = default;
     55 
     56  [[nodiscard]] bool ResolveSpecialCases(const nsACString& aHost,
     57                                         const nsACString& aPath,
     58                                         const nsACString& aPathname,
     59                                         nsACString& aResult) override;
     60 
     61 private:
     62  [[nodiscard]] nsresult Init();
     63  static mozilla::StaticRefPtr<nsResProtocolHandler> sSingleton;
     64 
     65  nsCString mAppURI;
     66  nsCString mGREURI;
     67 #ifdef ANDROID
     68  // Used for resource://android URIs
     69  nsCString mApkURI;
     70  nsresult GetApkURI(nsACString& aResult);
     71 #endif
     72 };
     73 
     74 #endif /* nsResProtocolHandler_h___ */