Backed out 2 changesets (bug 1943998) for causing wd failures @ phases.py CLOSED...
[gecko.git] / ipc / glue / URIUtils.cpp
blob62e4d07a7241bb875cbcd16e7331c1f8690c5462
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "URIUtils.h"
9 #include "mozilla/ArrayUtils.h"
10 #include "mozilla/Assertions.h"
11 #include "mozilla/dom/BlobURL.h"
12 #include "mozilla/net/DefaultURI.h"
13 #include "mozilla/net/SubstitutingJARURI.h"
14 #include "mozilla/net/SubstitutingURL.h"
15 #include "nsAboutProtocolHandler.h"
16 #include "nsComponentManagerUtils.h"
17 #include "nsDebug.h"
18 #include "nsID.h"
19 #include "nsJARURI.h"
20 #include "nsIIconURI.h"
21 #include "nsJSProtocolHandler.h"
22 #include "nsNetCID.h"
23 #include "nsSimpleNestedURI.h"
24 #include "nsThreadUtils.h"
25 #include "nsIURIMutator.h"
27 using namespace mozilla::ipc;
29 namespace {
31 NS_DEFINE_CID(kSimpleURIMutatorCID, NS_SIMPLEURIMUTATOR_CID);
32 NS_DEFINE_CID(kStandardURLMutatorCID, NS_STANDARDURLMUTATOR_CID);
33 NS_DEFINE_CID(kJARURIMutatorCID, NS_JARURIMUTATOR_CID);
34 NS_DEFINE_CID(kIconURIMutatorCID, NS_MOZICONURIMUTATOR_CID);
36 } // namespace
38 namespace mozilla {
39 namespace ipc {
41 void SerializeURI(nsIURI* aURI, URIParams& aParams) {
42 MOZ_ASSERT(aURI);
44 aURI->Serialize(aParams);
45 if (aParams.type() == URIParams::T__None) {
46 MOZ_CRASH("Serialize failed!");
50 void SerializeURI(nsIURI* aURI, Maybe<URIParams>& aParams) {
51 if (aURI) {
52 URIParams params;
53 SerializeURI(aURI, params);
54 aParams = Some(std::move(params));
55 } else {
56 aParams = Nothing();
60 already_AddRefed<nsIURI> DeserializeURI(const URIParams& aParams) {
61 nsCOMPtr<nsIURIMutator> mutator;
63 switch (aParams.type()) {
64 case URIParams::TSimpleURIParams:
65 mutator = do_CreateInstance(kSimpleURIMutatorCID);
66 break;
68 case URIParams::TStandardURLParams:
69 if (aParams.get_StandardURLParams().isSubstituting()) {
70 mutator = new net::SubstitutingURL::Mutator();
71 } else {
72 mutator = do_CreateInstance(kStandardURLMutatorCID);
74 break;
76 case URIParams::TJARURIParams:
77 mutator = do_CreateInstance(kJARURIMutatorCID);
78 break;
80 case URIParams::TJSURIParams:
81 mutator = new nsJSURI::Mutator();
82 break;
84 case URIParams::TIconURIParams:
85 mutator = do_CreateInstance(kIconURIMutatorCID);
86 break;
88 case URIParams::TSimpleNestedURIParams:
89 mutator = new net::nsSimpleNestedURI::Mutator();
90 break;
92 case URIParams::THostObjectURIParams:
93 mutator = new mozilla::dom::BlobURL::Mutator();
94 break;
96 case URIParams::TDefaultURIParams:
97 mutator = new mozilla::net::DefaultURI::Mutator();
98 break;
100 case URIParams::TNestedAboutURIParams:
101 mutator = new net::nsNestedAboutURI::Mutator();
102 break;
104 case URIParams::TSubstitutingJARURIParams:
105 mutator = new net::SubstitutingJARURI::Mutator();
106 break;
108 default:
109 MOZ_CRASH("Unknown params!");
112 MOZ_ASSERT(mutator);
114 nsresult rv = mutator->Deserialize(aParams);
115 if (NS_FAILED(rv)) {
116 MOZ_ASSERT(false, "Deserialize failed!");
117 return nullptr;
120 nsCOMPtr<nsIURI> uri;
121 DebugOnly<nsresult> rv2 = mutator->Finalize(getter_AddRefs(uri));
122 MOZ_ASSERT(uri);
123 MOZ_ASSERT(NS_SUCCEEDED(rv2));
125 return uri.forget();
128 already_AddRefed<nsIURI> DeserializeURI(const Maybe<URIParams>& aParams) {
129 nsCOMPtr<nsIURI> uri;
131 if (aParams.isSome()) {
132 uri = DeserializeURI(aParams.ref());
135 return uri.forget();
138 } // namespace ipc
139 } // namespace mozilla