Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; 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 : /**
7 : * URI class to be used for cases when a simple URI actually resolves to some
8 : * other sort of URI, with the latter being what's loaded when the load
9 : * happens. All objects of this class should always be immutable, so that the
10 : * inner URI and this URI don't get out of sync. The Clone() implementation
11 : * will guarantee this for the clone, but it's up to the protocol handlers
12 : * creating these URIs to ensure that in the first place. The innerURI passed
13 : * to this URI will be set immutable if possible.
14 : */
15 :
16 : #ifndef nsSimpleNestedURI_h__
17 : #define nsSimpleNestedURI_h__
18 :
19 : #include "nsCOMPtr.h"
20 : #include "nsSimpleURI.h"
21 : #include "nsINestedURI.h"
22 :
23 : #include "nsIIPCSerializableURI.h"
24 :
25 : namespace mozilla {
26 : namespace net {
27 :
28 : class nsSimpleNestedURI : public nsSimpleURI,
29 : public nsINestedURI
30 : {
31 : protected:
32 5 : ~nsSimpleNestedURI() {}
33 :
34 : public:
35 : // To be used by deserialization only. Leaves this object in an
36 : // uninitialized state that will throw on most accesses.
37 0 : nsSimpleNestedURI()
38 0 : {
39 0 : }
40 :
41 : // Constructor that should generally be used when constructing an object of
42 : // this class with |operator new|.
43 : explicit nsSimpleNestedURI(nsIURI* innerURI);
44 :
45 : NS_DECL_ISUPPORTS_INHERITED
46 : NS_DECL_NSINESTEDURI
47 :
48 : // Overrides for various methods nsSimpleURI implements follow.
49 :
50 : // nsSimpleURI overrides
51 : virtual nsresult EqualsInternal(nsIURI* other,
52 : RefHandlingEnum refHandlingMode,
53 : bool* result) override;
54 : virtual nsSimpleURI* StartClone(RefHandlingEnum refHandlingMode,
55 : const nsACString& newRef) override;
56 :
57 : // nsISerializable overrides
58 : NS_IMETHOD Read(nsIObjectInputStream* aStream) override;
59 : NS_IMETHOD Write(nsIObjectOutputStream* aStream) override;
60 :
61 : // nsIIPCSerializableURI overrides
62 : NS_DECL_NSIIPCSERIALIZABLEURI
63 :
64 : // Override the nsIClassInfo method GetClassIDNoAlloc to make sure our
65 : // nsISerializable impl works right.
66 : NS_IMETHOD GetClassIDNoAlloc(nsCID *aClassIDNoAlloc) override;
67 :
68 : protected:
69 : nsCOMPtr<nsIURI> mInnerURI;
70 : };
71 :
72 : } // namespace net
73 : } // namespace mozilla
74 :
75 : #endif /* nsSimpleNestedURI_h__ */
|