forked from mirrors/gecko-dev
		
	 2d4ca059e8
			
		
	
	
		2d4ca059e8
		
	
	
	
	
		
			
			The MOZ_MUST_USE macro is defined as clang's and gcc's nonstandard __attribute__((warn_unused_result)). Now that we compile as C++17 by default (bug 1560664), we can replace MOZ_MUST_USE with C++17's standard [[nodiscard]] attribute. The [[nodiscard]] attribute must precede a function declaration's declaration specifiers (like static, extern, inline, or virtual). The __attribute__((warn_unused_result)) attribute does not have this order restriction. Differential Revision: https://phabricator.services.mozilla.com/D107355
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* 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 nsJSProtocolHandler_h___
 | |
| #define nsJSProtocolHandler_h___
 | |
| 
 | |
| #include "mozilla/Attributes.h"
 | |
| #include "nsIProtocolHandler.h"
 | |
| #include "nsIURI.h"
 | |
| #include "nsISerializable.h"
 | |
| #include "nsIClassInfo.h"
 | |
| #include "nsSimpleURI.h"
 | |
| #include "nsINestedURI.h"
 | |
| 
 | |
| #define NS_JSPROTOCOLHANDLER_CID                     \
 | |
|   { /* bfc310d2-38a0-11d3-8cd3-0060b0fc14a3 */       \
 | |
|     0xbfc310d2, 0x38a0, 0x11d3, {                    \
 | |
|       0x8c, 0xd3, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3 \
 | |
|     }                                                \
 | |
|   }
 | |
| 
 | |
| #define NS_JSURI_CID                                 \
 | |
|   { /* 58f089ee-512a-42d2-a935-d0c874128930 */       \
 | |
|     0x58f089ee, 0x512a, 0x42d2, {                    \
 | |
|       0xa9, 0x35, 0xd0, 0xc8, 0x74, 0x12, 0x89, 0x30 \
 | |
|     }                                                \
 | |
|   }
 | |
| 
 | |
| #define NS_JSURIMUTATOR_CID                          \
 | |
|   { /* 574ce83e-fe9f-4095-b85c-7909abbf7c37 */       \
 | |
|     0x574ce83e, 0xfe9f, 0x4095, {                    \
 | |
|       0xb8, 0x5c, 0x79, 0x09, 0xab, 0xbf, 0x7c, 0x37 \
 | |
|     }                                                \
 | |
|   }
 | |
| 
 | |
| #define NS_JSPROTOCOLHANDLER_CONTRACTID \
 | |
|   NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "javascript"
 | |
| 
 | |
| class nsJSProtocolHandler : public nsIProtocolHandler {
 | |
|  public:
 | |
|   NS_DECL_ISUPPORTS
 | |
| 
 | |
|   // nsIProtocolHandler methods:
 | |
|   NS_DECL_NSIPROTOCOLHANDLER
 | |
| 
 | |
|   // nsJSProtocolHandler methods:
 | |
|   nsJSProtocolHandler();
 | |
| 
 | |
|   static nsresult CreateNewURI(const nsACString& aSpec, const char* aCharset,
 | |
|                                nsIURI* aBaseURI, nsIURI** result);
 | |
| 
 | |
|  protected:
 | |
|   virtual ~nsJSProtocolHandler();
 | |
| 
 | |
|   static nsresult EnsureUTF8Spec(const nsCString& aSpec, const char* aCharset,
 | |
|                                  nsACString& aUTF8Spec);
 | |
| };
 | |
| 
 | |
| class nsJSURI final : public mozilla::net::nsSimpleURI {
 | |
|  public:
 | |
|   using mozilla::net::nsSimpleURI::Read;
 | |
|   using mozilla::net::nsSimpleURI::Write;
 | |
| 
 | |
|   nsIURI* GetBaseURI() const { return mBaseURI; }
 | |
| 
 | |
|   NS_DECL_ISUPPORTS_INHERITED
 | |
| 
 | |
|   // nsIURI overrides
 | |
|   virtual mozilla::net::nsSimpleURI* StartClone(
 | |
|       RefHandlingEnum refHandlingMode, const nsACString& newRef) override;
 | |
|   NS_IMETHOD Mutate(nsIURIMutator** _retval) override;
 | |
|   NS_IMETHOD_(void) Serialize(mozilla::ipc::URIParams& aParams) override;
 | |
| 
 | |
|   // nsISerializable overrides
 | |
|   NS_IMETHOD Read(nsIObjectInputStream* aStream) override;
 | |
|   NS_IMETHOD Write(nsIObjectOutputStream* aStream) override;
 | |
| 
 | |
|  protected:
 | |
|   nsJSURI() = default;
 | |
|   explicit nsJSURI(nsIURI* aBaseURI) : mBaseURI(aBaseURI) {}
 | |
| 
 | |
|   virtual ~nsJSURI() = default;
 | |
| 
 | |
|   virtual nsresult EqualsInternal(nsIURI* other,
 | |
|                                   RefHandlingEnum refHandlingMode,
 | |
|                                   bool* result) override;
 | |
|   bool Deserialize(const mozilla::ipc::URIParams&);
 | |
|   nsresult ReadPrivate(nsIObjectInputStream* aStream);
 | |
| 
 | |
|  private:
 | |
|   nsCOMPtr<nsIURI> mBaseURI;
 | |
| 
 | |
|  public:
 | |
|   class Mutator final : public nsIURIMutator,
 | |
|                         public BaseURIMutator<nsJSURI>,
 | |
|                         public nsISerializable,
 | |
|                         public nsIJSURIMutator {
 | |
|     NS_DECL_ISUPPORTS
 | |
|     NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI)
 | |
|     NS_DEFINE_NSIMUTATOR_COMMON
 | |
| 
 | |
|     NS_IMETHOD
 | |
|     Write(nsIObjectOutputStream* aOutputStream) override {
 | |
|       return NS_ERROR_NOT_IMPLEMENTED;
 | |
|     }
 | |
| 
 | |
|     [[nodiscard]] NS_IMETHOD Read(nsIObjectInputStream* aStream) override {
 | |
|       return InitFromInputStream(aStream);
 | |
|     }
 | |
| 
 | |
|     [[nodiscard]] NS_IMETHOD SetBase(nsIURI* aBaseURI) override {
 | |
|       mURI = new nsJSURI(aBaseURI);
 | |
|       return NS_OK;
 | |
|     }
 | |
| 
 | |
|     explicit Mutator() = default;
 | |
| 
 | |
|    private:
 | |
|     virtual ~Mutator() = default;
 | |
| 
 | |
|     friend class nsJSURI;
 | |
|   };
 | |
| 
 | |
|   friend BaseURIMutator<nsJSURI>;
 | |
| };
 | |
| 
 | |
| #endif /* nsJSProtocolHandler_h___ */
 |