1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsIIPCSerializableURI.h"
9 #include "mozilla/ArrayUtils.h"
10 #include "mozilla/Assertions.h"
11 #include "nsComponentManagerUtils.h"
15 #include "nsIIconURI.h"
17 #include "nsNetUtil.h"
18 #include "nsThreadUtils.h"
20 using namespace mozilla::ipc
;
21 using mozilla::ArrayLength
;
25 NS_DEFINE_CID(kSimpleURICID
, NS_SIMPLEURI_CID
);
26 NS_DEFINE_CID(kStandardURLCID
, NS_STANDARDURL_CID
);
27 NS_DEFINE_CID(kJARURICID
, NS_JARURI_CID
);
28 NS_DEFINE_CID(kIconURICID
, NS_MOZICONURI_CID
);
30 } // anonymous namespace
36 SerializeURI(nsIURI
* aURI
,
39 MOZ_ASSERT(NS_IsMainThread());
42 nsCOMPtr
<nsIIPCSerializableURI
> serializable
= do_QueryInterface(aURI
);
44 MOZ_CRASH("All IPDL URIs must be serializable scheme!");
47 serializable
->Serialize(aParams
);
48 if (aParams
.type() == URIParams::T__None
) {
49 MOZ_CRASH("Serialize failed!");
54 SerializeURI(nsIURI
* aURI
,
55 OptionalURIParams
& aParams
)
57 MOZ_ASSERT(NS_IsMainThread());
61 SerializeURI(aURI
, params
);
65 aParams
= mozilla::void_t();
69 already_AddRefed
<nsIURI
>
70 DeserializeURI(const URIParams
& aParams
)
72 MOZ_ASSERT(NS_IsMainThread());
74 nsCOMPtr
<nsIIPCSerializableURI
> serializable
;
76 switch (aParams
.type()) {
77 case URIParams::TSimpleURIParams
:
78 serializable
= do_CreateInstance(kSimpleURICID
);
81 case URIParams::TStandardURLParams
:
82 serializable
= do_CreateInstance(kStandardURLCID
);
85 case URIParams::TJARURIParams
:
86 serializable
= do_CreateInstance(kJARURICID
);
89 case URIParams::TIconURIParams
:
90 serializable
= do_CreateInstance(kIconURICID
);
94 MOZ_CRASH("Unknown params!");
97 MOZ_ASSERT(serializable
);
99 if (!serializable
->Deserialize(aParams
)) {
100 MOZ_ASSERT(false, "Deserialize failed!");
104 nsCOMPtr
<nsIURI
> uri
= do_QueryInterface(serializable
);
110 already_AddRefed
<nsIURI
>
111 DeserializeURI(const OptionalURIParams
& aParams
)
113 MOZ_ASSERT(NS_IsMainThread());
115 nsCOMPtr
<nsIURI
> uri
;
117 switch (aParams
.type()) {
118 case OptionalURIParams::Tvoid_t
:
121 case OptionalURIParams::TURIParams
:
122 uri
= DeserializeURI(aParams
.get_URIParams());
126 MOZ_CRASH("Unknown params!");
133 } // namespace mozilla