no bug - Correct some typos in the comments. a=typo-fix
[gecko.git] / netwerk / protocol / about / nsAboutProtocolHandler.h
blobe861f065b32081aaf0a59712909f18ad8b170b99
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 nsAboutProtocolHandler_h___
7 #define nsAboutProtocolHandler_h___
9 #include "nsIProtocolHandler.h"
10 #include "nsSimpleNestedURI.h"
11 #include "nsWeakReference.h"
12 #include "mozilla/Attributes.h"
13 #include "nsIURIMutator.h"
15 class nsIURI;
17 namespace mozilla {
18 namespace net {
20 class nsAboutProtocolHandler : public nsIProtocolHandlerWithDynamicFlags,
21 public nsIProtocolHandler,
22 public nsSupportsWeakReference {
23 public:
24 NS_DECL_ISUPPORTS
26 // nsIProtocolHandler methods:
27 NS_DECL_NSIPROTOCOLHANDLER
28 NS_DECL_NSIPROTOCOLHANDLERWITHDYNAMICFLAGS
30 // nsAboutProtocolHandler methods:
31 nsAboutProtocolHandler() = default;
33 static nsresult CreateNewURI(const nsACString& aSpec, const char* aCharset,
34 nsIURI* aBaseURI, nsIURI** result);
36 private:
37 virtual ~nsAboutProtocolHandler() = default;
40 class nsSafeAboutProtocolHandler final : public nsIProtocolHandler,
41 public nsSupportsWeakReference {
42 public:
43 NS_DECL_ISUPPORTS
45 // nsIProtocolHandler methods:
46 NS_DECL_NSIPROTOCOLHANDLER
48 // nsSafeAboutProtocolHandler methods:
49 nsSafeAboutProtocolHandler() = default;
51 private:
52 ~nsSafeAboutProtocolHandler() = default;
55 // Class to allow us to propagate the base URI to about:blank correctly
56 class nsNestedAboutURI final : public nsSimpleNestedURI {
57 private:
58 nsNestedAboutURI(nsIURI* aInnerURI, nsIURI* aBaseURI)
59 : nsSimpleNestedURI(aInnerURI), mBaseURI(aBaseURI) {}
60 nsNestedAboutURI() {}
61 virtual ~nsNestedAboutURI() = default;
63 public:
64 // Override QI so we can QI to our CID as needed
65 NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr) override;
67 // Override StartClone(), the nsISerializable methods, and
68 virtual nsSimpleURI* StartClone(RefHandlingEnum aRefHandlingMode,
69 const nsACString& newRef) override;
70 NS_IMETHOD Mutate(nsIURIMutator** _retval) override;
71 NS_IMETHOD_(void) Serialize(ipc::URIParams& aParams) override;
73 // nsISerializable
74 NS_IMETHOD Read(nsIObjectInputStream* aStream) override;
75 NS_IMETHOD Write(nsIObjectOutputStream* aStream) override;
77 nsIURI* GetBaseURI() const { return mBaseURI; }
79 protected:
80 nsCOMPtr<nsIURI> mBaseURI;
81 bool Deserialize(const mozilla::ipc::URIParams&);
82 nsresult ReadPrivate(nsIObjectInputStream* stream);
84 public:
85 class Mutator final : public nsIURIMutator,
86 public BaseURIMutator<nsNestedAboutURI>,
87 public nsISerializable,
88 public nsINestedAboutURIMutator {
89 NS_DECL_ISUPPORTS
90 NS_FORWARD_SAFE_NSIURISETTERS_RET(mURI)
92 explicit Mutator() = default;
94 private:
95 virtual ~Mutator() = default;
97 [[nodiscard]] NS_IMETHOD Deserialize(
98 const mozilla::ipc::URIParams& aParams) override {
99 return InitFromIPCParams(aParams);
102 NS_IMETHOD
103 Write(nsIObjectOutputStream* aOutputStream) override {
104 return NS_ERROR_NOT_IMPLEMENTED;
107 [[nodiscard]] NS_IMETHOD Read(nsIObjectInputStream* aStream) override {
108 return InitFromInputStream(aStream);
111 [[nodiscard]] NS_IMETHOD Finalize(nsIURI** aURI) override {
112 mURI.forget(aURI);
113 return NS_OK;
116 [[nodiscard]] NS_IMETHOD SetSpec(const nsACString& aSpec,
117 nsIURIMutator** aMutator) override {
118 if (aMutator) {
119 NS_ADDREF(*aMutator = this);
121 return InitFromSpec(aSpec);
124 [[nodiscard]] NS_IMETHOD InitWithBase(nsIURI* aInnerURI,
125 nsIURI* aBaseURI) override {
126 mURI = new nsNestedAboutURI(aInnerURI, aBaseURI);
127 return NS_OK;
130 friend class nsNestedAboutURI;
133 friend BaseURIMutator<nsNestedAboutURI>;
136 } // namespace net
137 } // namespace mozilla
139 #endif /* nsAboutProtocolHandler_h___ */