Coverage Report

Created: 2018-09-25 14:53

/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
}