/src/mozilla-central/caps/NullPrincipalURI.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
2 | | * vim: sw=2 ts=2 sts=2 expandtab |
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/. */ |
6 | | |
7 | | #include "NullPrincipalURI.h" |
8 | | |
9 | | #include "mozilla/DebugOnly.h" |
10 | | #include "mozilla/MemoryReporting.h" |
11 | | |
12 | | #include "mozilla/ipc/URIParams.h" |
13 | | |
14 | | #include "nsEscape.h" |
15 | | #include "nsCRT.h" |
16 | | #include "nsIUUIDGenerator.h" |
17 | | |
18 | | using namespace mozilla; |
19 | | |
20 | | //////////////////////////////////////////////////////////////////////////////// |
21 | | //// NullPrincipalURI |
22 | | |
23 | | NullPrincipalURI::NullPrincipalURI() |
24 | 12 | { |
25 | 12 | } |
26 | | |
27 | | NullPrincipalURI::NullPrincipalURI(const NullPrincipalURI& aOther) |
28 | 0 | { |
29 | 0 | mPath.Assign(aOther.mPath); |
30 | 0 | } |
31 | | |
32 | | nsresult |
33 | | NullPrincipalURI::Init() |
34 | 12 | { |
35 | 12 | // FIXME: bug 327161 -- make sure the uuid generator is reseeding-resistant. |
36 | 12 | nsCOMPtr<nsIUUIDGenerator> uuidgen = services::GetUUIDGenerator(); |
37 | 12 | NS_ENSURE_TRUE(uuidgen, NS_ERROR_NOT_AVAILABLE); |
38 | 12 | |
39 | 12 | nsID id; |
40 | 12 | nsresult rv = uuidgen->GenerateUUIDInPlace(&id); |
41 | 12 | NS_ENSURE_SUCCESS(rv, rv); |
42 | 12 | |
43 | 12 | mPath.SetLength(NSID_LENGTH - 1); // -1 because NSID_LENGTH counts the '\0' |
44 | 12 | id.ToProvidedString( |
45 | 12 | *reinterpret_cast<char(*)[NSID_LENGTH]>(mPath.BeginWriting())); |
46 | 12 | |
47 | 12 | MOZ_ASSERT(mPath.Length() == NSID_LENGTH - 1); |
48 | 12 | MOZ_ASSERT(strlen(mPath.get()) == NSID_LENGTH - 1); |
49 | 12 | |
50 | 12 | return NS_OK; |
51 | 12 | } |
52 | | |
53 | | /* static */ |
54 | | already_AddRefed<NullPrincipalURI> |
55 | | NullPrincipalURI::Create() |
56 | 12 | { |
57 | 12 | RefPtr<NullPrincipalURI> uri = new NullPrincipalURI(); |
58 | 12 | nsresult rv = uri->Init(); |
59 | 12 | NS_ENSURE_SUCCESS(rv, nullptr); |
60 | 12 | return uri.forget(); |
61 | 12 | } |
62 | | |
63 | | static NS_DEFINE_CID(kNullPrincipalURIImplementationCID, |
64 | | NS_NULLPRINCIPALURI_IMPLEMENTATION_CID); |
65 | | |
66 | | NS_IMPL_ADDREF(NullPrincipalURI) |
67 | | NS_IMPL_RELEASE(NullPrincipalURI) |
68 | | |
69 | 0 | NS_INTERFACE_MAP_BEGIN(NullPrincipalURI) |
70 | 0 | NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIURI) |
71 | 0 | if (aIID.Equals(kNullPrincipalURIImplementationCID)) |
72 | 0 | foundInterface = static_cast<nsIURI*>(this); |
73 | 0 | else |
74 | 0 | NS_INTERFACE_MAP_ENTRY(nsIURI) |
75 | 0 | NS_INTERFACE_MAP_ENTRY(nsISizeOf) |
76 | 0 | NS_INTERFACE_MAP_ENTRY(nsIIPCSerializableURI) |
77 | 0 | NS_INTERFACE_MAP_END |
78 | | |
79 | | //////////////////////////////////////////////////////////////////////////////// |
80 | | //// nsIURI |
81 | | |
82 | | NS_IMETHODIMP |
83 | | NullPrincipalURI::GetAsciiHost(nsACString& _host) |
84 | 0 | { |
85 | 0 | _host.Truncate(); |
86 | 0 | return NS_OK; |
87 | 0 | } |
88 | | |
89 | | NS_IMETHODIMP |
90 | | NullPrincipalURI::GetAsciiHostPort(nsACString& _hostport) |
91 | 0 | { |
92 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
93 | 0 | } |
94 | | |
95 | | NS_IMETHODIMP |
96 | | NullPrincipalURI::GetAsciiSpec(nsACString& _spec) |
97 | 0 | { |
98 | 0 | nsAutoCString buffer; |
99 | 0 | // Ignore the return value -- NullPrincipalURI::GetSpec() is infallible. |
100 | 0 | Unused << GetSpec(buffer); |
101 | 0 | // This uses the infallible version of |NS_EscapeURL| as |GetSpec| is |
102 | 0 | // already infallible. |
103 | 0 | NS_EscapeURL(buffer, esc_OnlyNonASCII | esc_AlwaysCopy, _spec); |
104 | 0 | return NS_OK; |
105 | 0 | } |
106 | | |
107 | | NS_IMETHODIMP |
108 | | NullPrincipalURI::GetHost(nsACString& _host) |
109 | 0 | { |
110 | 0 | _host.Truncate(); |
111 | 0 | return NS_OK; |
112 | 0 | } |
113 | | |
114 | | nsresult |
115 | | NullPrincipalURI::SetHost(const nsACString& aHost) |
116 | 0 | { |
117 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
118 | 0 | } |
119 | | |
120 | | NS_IMETHODIMP |
121 | | NullPrincipalURI::GetHostPort(nsACString& _host) |
122 | 0 | { |
123 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
124 | 0 | } |
125 | | |
126 | | nsresult |
127 | | NullPrincipalURI::SetHostPort(const nsACString& aHost) |
128 | 0 | { |
129 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
130 | 0 | } |
131 | | |
132 | | NS_IMETHODIMP |
133 | | NullPrincipalURI::GetPassword(nsACString& _password) |
134 | 0 | { |
135 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
136 | 0 | } |
137 | | |
138 | | nsresult |
139 | | NullPrincipalURI::SetPassword(const nsACString& aPassword) |
140 | 0 | { |
141 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
142 | 0 | } |
143 | | |
144 | | NS_IMETHODIMP |
145 | | NullPrincipalURI::GetPathQueryRef(nsACString& _path) |
146 | 0 | { |
147 | 0 | _path = mPath; |
148 | 0 | return NS_OK; |
149 | 0 | } |
150 | | |
151 | | nsresult |
152 | | NullPrincipalURI::SetPathQueryRef(const nsACString& aPath) |
153 | 0 | { |
154 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
155 | 0 | } |
156 | | |
157 | | NS_IMETHODIMP |
158 | | NullPrincipalURI::GetFilePath(nsACString& aFilePath) |
159 | 0 | { |
160 | 0 | aFilePath.Truncate(); |
161 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
162 | 0 | } |
163 | | |
164 | | nsresult |
165 | | NullPrincipalURI::SetFilePath(const nsACString& aFilePath) |
166 | 0 | { |
167 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
168 | 0 | } |
169 | | |
170 | | NS_IMETHODIMP |
171 | | NullPrincipalURI::GetQuery(nsACString& aQuery) |
172 | 0 | { |
173 | 0 | aQuery.Truncate(); |
174 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
175 | 0 | } |
176 | | |
177 | | nsresult |
178 | | NullPrincipalURI::SetQuery(const nsACString& aQuery) |
179 | 0 | { |
180 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
181 | 0 | } |
182 | | |
183 | | nsresult |
184 | | NullPrincipalURI::SetQueryWithEncoding(const nsACString& aQuery, |
185 | | const Encoding* aEncoding) |
186 | 0 | { |
187 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
188 | 0 | } |
189 | | |
190 | | NS_IMETHODIMP |
191 | | NullPrincipalURI::GetRef(nsACString& _ref) |
192 | 0 | { |
193 | 0 | _ref.Truncate(); |
194 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
195 | 0 | } |
196 | | |
197 | | nsresult |
198 | | NullPrincipalURI::SetRef(const nsACString& aRef) |
199 | 0 | { |
200 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
201 | 0 | } |
202 | | |
203 | | NS_IMETHODIMP |
204 | | NullPrincipalURI::GetPrePath(nsACString& _prePath) |
205 | 0 | { |
206 | 0 | _prePath = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME ":"); |
207 | 0 | return NS_OK; |
208 | 0 | } |
209 | | |
210 | | NS_IMETHODIMP |
211 | | NullPrincipalURI::GetPort(int32_t* _port) |
212 | 0 | { |
213 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
214 | 0 | } |
215 | | |
216 | | nsresult |
217 | | NullPrincipalURI::SetPort(int32_t aPort) |
218 | 0 | { |
219 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
220 | 0 | } |
221 | | |
222 | | NS_IMETHODIMP |
223 | | NullPrincipalURI::GetScheme(nsACString& _scheme) |
224 | 0 | { |
225 | 0 | _scheme = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME); |
226 | 0 | return NS_OK; |
227 | 0 | } |
228 | | |
229 | | nsresult |
230 | | NullPrincipalURI::SetScheme(const nsACString& aScheme) |
231 | 0 | { |
232 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
233 | 0 | } |
234 | | |
235 | | NS_IMETHODIMP |
236 | | NullPrincipalURI::GetSpec(nsACString& _spec) |
237 | 9 | { |
238 | 9 | _spec = NS_LITERAL_CSTRING(NS_NULLPRINCIPAL_SCHEME ":") + mPath; |
239 | 9 | return NS_OK; |
240 | 9 | } |
241 | | |
242 | | // result may contain unescaped UTF-8 characters |
243 | | NS_IMETHODIMP |
244 | | NullPrincipalURI::GetSpecIgnoringRef(nsACString& _result) |
245 | 0 | { |
246 | 0 | return GetSpec(_result); |
247 | 0 | } |
248 | | |
249 | | NS_IMETHODIMP |
250 | | NullPrincipalURI::GetHasRef(bool* _result) |
251 | 0 | { |
252 | 0 | *_result = false; |
253 | 0 | return NS_OK; |
254 | 0 | } |
255 | | |
256 | | nsresult |
257 | | NullPrincipalURI::SetSpecInternal(const nsACString& aSpec) |
258 | 0 | { |
259 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
260 | 0 | } |
261 | | |
262 | | NS_IMETHODIMP |
263 | | NullPrincipalURI::GetUsername(nsACString& _username) |
264 | 0 | { |
265 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
266 | 0 | } |
267 | | |
268 | | nsresult |
269 | | NullPrincipalURI::SetUsername(const nsACString& aUsername) |
270 | 0 | { |
271 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
272 | 0 | } |
273 | | |
274 | | NS_IMETHODIMP |
275 | | NullPrincipalURI::GetUserPass(nsACString& _userPass) |
276 | 0 | { |
277 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
278 | 0 | } |
279 | | |
280 | | nsresult |
281 | | NullPrincipalURI::SetUserPass(const nsACString& aUserPass) |
282 | 0 | { |
283 | 0 | return NS_ERROR_NOT_IMPLEMENTED; |
284 | 0 | } |
285 | | |
286 | | nsresult |
287 | | NullPrincipalURI::Clone(nsIURI** _newURI) |
288 | 0 | { |
289 | 0 | nsCOMPtr<nsIURI> uri = new NullPrincipalURI(*this); |
290 | 0 | uri.forget(_newURI); |
291 | 0 | return NS_OK; |
292 | 0 | } |
293 | | |
294 | | NS_IMPL_ISUPPORTS(NullPrincipalURI::Mutator, nsIURISetters, nsIURIMutator) |
295 | | |
296 | | NS_IMETHODIMP |
297 | | NullPrincipalURI::Mutate(nsIURIMutator** aMutator) |
298 | 0 | { |
299 | 0 | RefPtr<NullPrincipalURI::Mutator> mutator = new NullPrincipalURI::Mutator(); |
300 | 0 | nsresult rv = mutator->InitFromURI(this); |
301 | 0 | if (NS_FAILED(rv)) { |
302 | 0 | return rv; |
303 | 0 | } |
304 | 0 | mutator.forget(aMutator); |
305 | 0 | return NS_OK; |
306 | 0 | } |
307 | | |
308 | | NS_IMETHODIMP |
309 | | NullPrincipalURI::Equals(nsIURI* aOther, bool* _equals) |
310 | 0 | { |
311 | 0 | *_equals = false; |
312 | 0 | RefPtr<NullPrincipalURI> otherURI; |
313 | 0 | nsresult rv = aOther->QueryInterface(kNullPrincipalURIImplementationCID, |
314 | 0 | getter_AddRefs(otherURI)); |
315 | 0 | if (NS_SUCCEEDED(rv)) { |
316 | 0 | *_equals = mPath == otherURI->mPath; |
317 | 0 | } |
318 | 0 | return NS_OK; |
319 | 0 | } |
320 | | |
321 | | NS_IMETHODIMP |
322 | | NullPrincipalURI::EqualsExceptRef(nsIURI* aOther, bool* _equals) |
323 | 0 | { |
324 | 0 | // GetRef/SetRef not supported by NullPrincipalURI, so |
325 | 0 | // EqualsExceptRef() is the same as Equals(). |
326 | 0 | return Equals(aOther, _equals); |
327 | 0 | } |
328 | | |
329 | | NS_IMETHODIMP |
330 | | NullPrincipalURI::Resolve(const nsACString& aRelativePath, |
331 | | nsACString& _resolvedURI) |
332 | 0 | { |
333 | 0 | _resolvedURI = aRelativePath; |
334 | 0 | return NS_OK; |
335 | 0 | } |
336 | | |
337 | | NS_IMETHODIMP |
338 | | NullPrincipalURI::SchemeIs(const char* aScheme, bool* _schemeIs) |
339 | 6 | { |
340 | 6 | *_schemeIs = (0 == nsCRT::strcasecmp(NS_NULLPRINCIPAL_SCHEME, aScheme)); |
341 | 6 | return NS_OK; |
342 | 6 | } |
343 | | |
344 | | NS_IMETHODIMP |
345 | | NullPrincipalURI::GetDisplaySpec(nsACString &aUnicodeSpec) |
346 | 0 | { |
347 | 0 | return GetSpec(aUnicodeSpec); |
348 | 0 | } |
349 | | |
350 | | NS_IMETHODIMP |
351 | | NullPrincipalURI::GetDisplayHostPort(nsACString &aUnicodeHostPort) |
352 | 0 | { |
353 | 0 | return GetHostPort(aUnicodeHostPort); |
354 | 0 | } |
355 | | |
356 | | NS_IMETHODIMP |
357 | | NullPrincipalURI::GetDisplayHost(nsACString &aUnicodeHost) |
358 | 0 | { |
359 | 0 | return GetHost(aUnicodeHost); |
360 | 0 | } |
361 | | |
362 | | NS_IMETHODIMP |
363 | | NullPrincipalURI::GetDisplayPrePath(nsACString &aPrePath) |
364 | 0 | { |
365 | 0 | return GetPrePath(aPrePath); |
366 | 0 | } |
367 | | |
368 | | //////////////////////////////////////////////////////////////////////////////// |
369 | | //// nsIIPCSerializableURI |
370 | | |
371 | | void |
372 | | NullPrincipalURI::Serialize(mozilla::ipc::URIParams& aParams) |
373 | 0 | { |
374 | 0 | aParams = mozilla::ipc::NullPrincipalURIParams(); |
375 | 0 | } |
376 | | |
377 | | bool |
378 | | NullPrincipalURI::Deserialize(const mozilla::ipc::URIParams& aParams) |
379 | 0 | { |
380 | 0 | if (aParams.type() != mozilla::ipc::URIParams::TNullPrincipalURIParams) { |
381 | 0 | MOZ_ASSERT_UNREACHABLE("unexpected URIParams type"); |
382 | 0 | return false; |
383 | 0 | } |
384 | 0 |
|
385 | 0 | nsresult rv = Init(); |
386 | 0 | NS_ENSURE_SUCCESS(rv, false); |
387 | 0 |
|
388 | 0 | return true; |
389 | 0 | } |
390 | | |
391 | | //////////////////////////////////////////////////////////////////////////////// |
392 | | //// nsISizeOf |
393 | | |
394 | | size_t |
395 | | NullPrincipalURI::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const |
396 | 0 | { |
397 | 0 | return mPath.SizeOfExcludingThisIfUnshared(aMallocSizeOf); |
398 | 0 | } |
399 | | |
400 | | size_t |
401 | | NullPrincipalURI::SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const |
402 | 0 | { |
403 | 0 | return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf); |
404 | 0 | } |