Fix typo in 9b54bd30006c008b4a951331b273613d5bac3abf
[pm.git] / ipc / glue / URIUtils.cpp
blob415ea09fb17d8b4bdf79c97bfc93ebf62fc5c8e5
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/. */
5 #include "URIUtils.h"
7 #include "nsIIPCSerializableURI.h"
9 #include "mozilla/ArrayUtils.h"
10 #include "mozilla/Assertions.h"
11 #include "nsComponentManagerUtils.h"
12 #include "nsDebug.h"
13 #include "nsID.h"
14 #include "nsJARURI.h"
15 #include "nsIIconURI.h"
16 #include "nsNetCID.h"
17 #include "nsNetUtil.h"
18 #include "nsThreadUtils.h"
20 using namespace mozilla::ipc;
21 using mozilla::ArrayLength;
23 namespace {
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
32 namespace mozilla {
33 namespace ipc {
35 void
36 SerializeURI(nsIURI* aURI,
37 URIParams& aParams)
39 MOZ_ASSERT(NS_IsMainThread());
40 MOZ_ASSERT(aURI);
42 nsCOMPtr<nsIIPCSerializableURI> serializable = do_QueryInterface(aURI);
43 if (!serializable) {
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!");
53 void
54 SerializeURI(nsIURI* aURI,
55 OptionalURIParams& aParams)
57 MOZ_ASSERT(NS_IsMainThread());
59 if (aURI) {
60 URIParams params;
61 SerializeURI(aURI, params);
62 aParams = params;
64 else {
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);
79 break;
81 case URIParams::TStandardURLParams:
82 serializable = do_CreateInstance(kStandardURLCID);
83 break;
85 case URIParams::TJARURIParams:
86 serializable = do_CreateInstance(kJARURICID);
87 break;
89 case URIParams::TIconURIParams:
90 serializable = do_CreateInstance(kIconURICID);
91 break;
93 default:
94 MOZ_CRASH("Unknown params!");
97 MOZ_ASSERT(serializable);
99 if (!serializable->Deserialize(aParams)) {
100 MOZ_ASSERT(false, "Deserialize failed!");
101 return nullptr;
104 nsCOMPtr<nsIURI> uri = do_QueryInterface(serializable);
105 MOZ_ASSERT(uri);
107 return uri.forget();
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:
119 break;
121 case OptionalURIParams::TURIParams:
122 uri = DeserializeURI(aParams.get_URIParams());
123 break;
125 default:
126 MOZ_CRASH("Unknown params!");
129 return uri.forget();
132 } // namespace ipc
133 } // namespace mozilla