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/. */
6 #ifndef nsJSProtocolHandler_h___
7 #define nsJSProtocolHandler_h___
9 #include "mozilla/Attributes.h"
10 #include "nsIProtocolHandler.h"
12 #include "nsISerializable.h"
13 #include "nsIClassInfo.h"
14 #include "nsSimpleURI.h"
15 #include "nsINestedURI.h"
17 #define NS_JSPROTOCOLHANDLER_CID \
18 { /* bfc310d2-38a0-11d3-8cd3-0060b0fc14a3 */ \
19 0xbfc310d2, 0x38a0, 0x11d3, { \
20 0x8c, 0xd3, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3 \
24 #define NS_JSURI_CID \
25 { /* 58f089ee-512a-42d2-a935-d0c874128930 */ \
26 0x58f089ee, 0x512a, 0x42d2, { \
27 0xa9, 0x35, 0xd0, 0xc8, 0x74, 0x12, 0x89, 0x30 \
31 #define NS_JSURIMUTATOR_CID \
32 { /* 574ce83e-fe9f-4095-b85c-7909abbf7c37 */ \
33 0x574ce83e, 0xfe9f, 0x4095, { \
34 0xb8, 0x5c, 0x79, 0x09, 0xab, 0xbf, 0x7c, 0x37 \
38 #define NS_JSPROTOCOLHANDLER_CONTRACTID \
39 NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "javascript"
41 class nsJSProtocolHandler
: public nsIProtocolHandler
{
45 // nsIProtocolHandler methods:
46 NS_DECL_NSIPROTOCOLHANDLER
48 // nsJSProtocolHandler methods:
49 nsJSProtocolHandler();
51 static nsresult
CreateNewURI(const nsACString
& aSpec
, const char* aCharset
,
52 nsIURI
* aBaseURI
, nsIURI
** result
);
55 virtual ~nsJSProtocolHandler();
57 static nsresult
EnsureUTF8Spec(const nsCString
& aSpec
, const char* aCharset
,
58 nsACString
& aUTF8Spec
);
61 class nsJSURI final
: public mozilla::net::nsSimpleURI
{
63 using mozilla::net::nsSimpleURI::Read
;
64 using mozilla::net::nsSimpleURI::Write
;
66 nsIURI
* GetBaseURI() const { return mBaseURI
; }
68 NS_DECL_ISUPPORTS_INHERITED
71 virtual mozilla::net::nsSimpleURI
* StartClone(
72 RefHandlingEnum refHandlingMode
, const nsACString
& newRef
) override
;
73 NS_IMETHOD
Mutate(nsIURIMutator
** _retval
) override
;
74 NS_IMETHOD_(void) Serialize(mozilla::ipc::URIParams
& aParams
) override
;
76 // nsISerializable overrides
77 NS_IMETHOD
Read(nsIObjectInputStream
* aStream
) override
;
78 NS_IMETHOD
Write(nsIObjectOutputStream
* aStream
) override
;
82 explicit nsJSURI(nsIURI
* aBaseURI
) : mBaseURI(aBaseURI
) {}
84 virtual ~nsJSURI() = default;
86 virtual nsresult
EqualsInternal(nsIURI
* other
,
87 RefHandlingEnum refHandlingMode
,
88 bool* result
) override
;
89 bool Deserialize(const mozilla::ipc::URIParams
&);
90 nsresult
ReadPrivate(nsIObjectInputStream
* aStream
);
93 nsCOMPtr
<nsIURI
> mBaseURI
;
96 class Mutator final
: public nsIURIMutator
,
97 public BaseURIMutator
<nsJSURI
>,
98 public nsISerializable
,
99 public nsIJSURIMutator
{
101 NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI
)
102 NS_DEFINE_NSIMUTATOR_COMMON
105 Write(nsIObjectOutputStream
* aOutputStream
) override
{
106 return NS_ERROR_NOT_IMPLEMENTED
;
109 [[nodiscard
]] NS_IMETHOD
Read(nsIObjectInputStream
* aStream
) override
{
110 return InitFromInputStream(aStream
);
113 [[nodiscard
]] NS_IMETHOD
SetBase(nsIURI
* aBaseURI
) override
{
114 mURI
= new nsJSURI(aBaseURI
);
118 explicit Mutator() = default;
121 virtual ~Mutator() = default;
123 friend class nsJSURI
;
126 friend BaseURIMutator
<nsJSURI
>;
129 #endif /* nsJSProtocolHandler_h___ */