Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/xpcom/io/FileDescriptorFile.cpp
Line
Count
Source (jump to first uncovered line)
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/. */
6
7
#include "FileDescriptorFile.h"
8
9
#include "mozilla/ipc/FileDescriptorUtils.h"
10
#include "mozilla/ipc/URIUtils.h"
11
#include "mozilla/net/NeckoChild.h"
12
#include "nsIFileURL.h"
13
#include "nsNetUtil.h"
14
#include "nsProxyRelease.h"
15
#include "nsThreadUtils.h"
16
#include "private/pprio.h"
17
#include "SerializedLoadContext.h"
18
19
namespace mozilla {
20
namespace net {
21
22
NS_IMPL_ISUPPORTS(FileDescriptorFile, nsIFile)
23
24
LazyLogModule gFDFileLog("FDFile");
25
#undef DBG
26
0
#define DBG(...) MOZ_LOG(gFDFileLog, LogLevel::Debug, (__VA_ARGS__))
27
28
FileDescriptorFile::FileDescriptorFile(const FileDescriptor& aFD,
29
                                       nsIFile* aFile)
30
0
{
31
0
  MOZ_ASSERT(aFD.IsValid());
32
0
  auto platformHandle = aFD.ClonePlatformHandle();
33
0
  mFD = FileDescriptor(platformHandle.get());
34
0
  mFile = aFile;
35
0
}
36
37
FileDescriptorFile::FileDescriptorFile(const FileDescriptorFile& aOther)
38
0
{
39
0
  auto platformHandle = aOther.mFD.ClonePlatformHandle();
40
0
  mFD = FileDescriptor(platformHandle.get());
41
0
  aOther.mFile->Clone(getter_AddRefs(mFile));
42
0
}
43
44
//-----------------------------------------------------------------------------
45
// FileDescriptorFile::nsIFile functions that we override logic for
46
//-----------------------------------------------------------------------------
47
48
NS_IMETHODIMP
49
FileDescriptorFile::Clone(nsIFile** aFileOut)
50
0
{
51
0
  RefPtr<FileDescriptorFile> fdFile = new FileDescriptorFile(*this);
52
0
  fdFile.forget(aFileOut);
53
0
  return NS_OK;
54
0
}
55
56
NS_IMETHODIMP
57
FileDescriptorFile::OpenNSPRFileDesc(int32_t aFlags, int32_t aMode,
58
                                     PRFileDesc** aRetval)
59
0
{
60
0
  // Remove optional OS_READAHEAD flag so we test against PR_RDONLY
61
0
  aFlags &= ~nsIFile::OS_READAHEAD;
62
0
63
0
  // Remove optional/deprecated DELETE_ON_CLOSE flag
64
0
  aFlags &= ~nsIFile::DELETE_ON_CLOSE;
65
0
66
0
  // All other flags require write access to the file and
67
0
  // this implementation only provides read access.
68
0
  if (aFlags != PR_RDONLY) {
69
0
    DBG("OpenNSPRFileDesc flags error (%" PRIu32 ")\n", aFlags);
70
0
    return NS_ERROR_NOT_AVAILABLE;
71
0
  }
72
0
73
0
  if (!mFD.IsValid()) {
74
0
    DBG("OpenNSPRFileDesc error: no file descriptor\n");
75
0
    return NS_ERROR_NOT_AVAILABLE;
76
0
  }
77
0
78
0
  auto platformHandle = mFD.ClonePlatformHandle();
79
0
  *aRetval = PR_ImportFile(PROsfd(platformHandle.release()));
80
0
81
0
  if (!*aRetval) {
82
0
    DBG("OpenNSPRFileDesc Clone failure\n");
83
0
    return NS_ERROR_NOT_AVAILABLE;
84
0
  }
85
0
86
0
  return NS_OK;
87
0
}
88
89
//-----------------------------------------------------------------------------
90
// FileDescriptorFile::nsIFile functions that we delegate to underlying nsIFile
91
//-----------------------------------------------------------------------------
92
93
nsresult
94
FileDescriptorFile::GetLeafName(nsAString& aLeafName)
95
0
{
96
0
  return mFile->GetLeafName(aLeafName);
97
0
}
98
99
NS_IMETHODIMP
100
FileDescriptorFile::GetNativeLeafName(nsACString& aLeafName)
101
0
{
102
0
  return mFile->GetNativeLeafName(aLeafName);
103
0
}
104
105
nsresult
106
FileDescriptorFile::GetTarget(nsAString& aRetVal)
107
0
{
108
0
  return mFile->GetTarget(aRetVal);
109
0
}
110
111
NS_IMETHODIMP
112
FileDescriptorFile::GetNativeTarget(nsACString& aRetVal)
113
0
{
114
0
  return mFile->GetNativeTarget(aRetVal);
115
0
}
116
117
nsresult
118
FileDescriptorFile::GetPath(nsAString& aRetVal)
119
0
{
120
0
  return mFile->GetPath(aRetVal);
121
0
}
122
123
PathString
124
FileDescriptorFile::NativePath()
125
0
{
126
0
  return mFile->NativePath();
127
0
}
128
129
NS_IMETHODIMP
130
FileDescriptorFile::Equals(nsIFile* aOther, bool* aRetVal)
131
0
{
132
0
  return mFile->Equals(aOther, aRetVal);
133
0
}
134
135
NS_IMETHODIMP
136
FileDescriptorFile::Contains(nsIFile* aOther, bool* aRetVal)
137
0
{
138
0
  return mFile->Contains(aOther, aRetVal);
139
0
}
140
141
NS_IMETHODIMP
142
FileDescriptorFile::GetParent(nsIFile** aParent)
143
0
{
144
0
  return mFile->GetParent(aParent);
145
0
}
146
147
NS_IMETHODIMP
148
FileDescriptorFile::GetFollowLinks(bool* aFollowLinks)
149
0
{
150
0
  return mFile->GetFollowLinks(aFollowLinks);
151
0
}
152
153
NS_IMETHODIMP
154
FileDescriptorFile::GetPersistentDescriptor(nsACString& aPersistentDescriptor)
155
0
{
156
0
  return mFile->GetPersistentDescriptor(aPersistentDescriptor);
157
0
}
158
159
//-----------------------------------------------------------------------------
160
// FileDescriptorFile::nsIFile functions that are not currently supported
161
//-----------------------------------------------------------------------------
162
163
nsresult
164
FileDescriptorFile::Append(const nsAString& aNode)
165
0
{
166
0
  return NS_ERROR_NOT_IMPLEMENTED;
167
0
}
168
169
NS_IMETHODIMP
170
FileDescriptorFile::AppendNative(const nsACString& aFragment)
171
0
{
172
0
  return NS_ERROR_NOT_IMPLEMENTED;
173
0
}
174
175
NS_IMETHODIMP
176
FileDescriptorFile::Normalize()
177
0
{
178
0
  return NS_ERROR_NOT_IMPLEMENTED;
179
0
}
180
181
NS_IMETHODIMP
182
FileDescriptorFile::Create(uint32_t aType, uint32_t aPermissions)
183
0
{
184
0
  return NS_ERROR_NOT_IMPLEMENTED;
185
0
}
186
187
nsresult
188
FileDescriptorFile::SetLeafName(const nsAString& aLeafName)
189
0
{
190
0
  return NS_ERROR_NOT_IMPLEMENTED;
191
0
}
192
193
NS_IMETHODIMP
194
FileDescriptorFile::SetNativeLeafName(const nsACString& aLeafName)
195
0
{
196
0
  return NS_ERROR_NOT_IMPLEMENTED;
197
0
}
198
199
nsresult
200
FileDescriptorFile::InitWithPath(const nsAString& aPath)
201
0
{
202
0
  return NS_ERROR_NOT_IMPLEMENTED;
203
0
}
204
205
NS_IMETHODIMP
206
FileDescriptorFile::InitWithNativePath(const nsACString& aPath)
207
0
{
208
0
  return NS_ERROR_NOT_IMPLEMENTED;
209
0
}
210
211
NS_IMETHODIMP
212
FileDescriptorFile::InitWithFile(nsIFile* aFile)
213
0
{
214
0
  return NS_ERROR_NOT_IMPLEMENTED;
215
0
}
216
217
NS_IMETHODIMP
218
FileDescriptorFile::SetFollowLinks(bool aFollowLinks)
219
0
{
220
0
  return NS_ERROR_NOT_IMPLEMENTED;
221
0
}
222
223
nsresult
224
FileDescriptorFile::AppendRelativePath(const nsAString& aNode)
225
0
{
226
0
  return NS_ERROR_NOT_IMPLEMENTED;
227
0
}
228
229
NS_IMETHODIMP
230
FileDescriptorFile::AppendRelativeNativePath(const nsACString& aFragment)
231
0
{
232
0
  return NS_ERROR_NOT_IMPLEMENTED;
233
0
}
234
235
NS_IMETHODIMP
236
FileDescriptorFile::SetPersistentDescriptor(const nsACString& aPersistentDescriptor)
237
0
{
238
0
  return NS_ERROR_NOT_IMPLEMENTED;
239
0
}
240
241
NS_IMETHODIMP
242
FileDescriptorFile::GetRelativeDescriptor(nsIFile* aFromFile,
243
                                          nsACString& aRetVal)
244
0
{
245
0
  return NS_ERROR_NOT_IMPLEMENTED;
246
0
}
247
248
NS_IMETHODIMP
249
FileDescriptorFile::SetRelativeDescriptor(nsIFile* aFromFile,
250
                                          const nsACString& aRelativeDesc)
251
0
{
252
0
  return NS_ERROR_NOT_IMPLEMENTED;
253
0
}
254
255
NS_IMETHODIMP
256
FileDescriptorFile::GetRelativePath(nsIFile* aFromFile, nsACString& aRetVal)
257
0
{
258
0
  return NS_ERROR_NOT_IMPLEMENTED;
259
0
}
260
261
NS_IMETHODIMP
262
FileDescriptorFile::SetRelativePath(nsIFile* aFromFile,
263
                                    const nsACString& aRelativePath)
264
0
{
265
0
  return NS_ERROR_NOT_IMPLEMENTED;
266
0
}
267
268
nsresult
269
FileDescriptorFile::CopyTo(nsIFile* aNewParentDir, const nsAString& aNewName)
270
0
{
271
0
  return NS_ERROR_NOT_IMPLEMENTED;
272
0
}
273
274
NS_IMETHODIMP
275
FileDescriptorFile::CopyToNative(nsIFile* aNewParent,
276
                                 const nsACString& aNewName)
277
0
{
278
0
  return NS_ERROR_NOT_IMPLEMENTED;
279
0
}
280
281
nsresult
282
FileDescriptorFile::CopyToFollowingLinks(nsIFile* aNewParentDir,
283
                                         const nsAString& aNewName)
284
0
{
285
0
  return NS_ERROR_NOT_IMPLEMENTED;
286
0
}
287
288
NS_IMETHODIMP
289
FileDescriptorFile::CopyToFollowingLinksNative(nsIFile* aNewParent,
290
                                               const nsACString& aNewName)
291
0
{
292
0
  return NS_ERROR_NOT_IMPLEMENTED;
293
0
}
294
295
nsresult
296
FileDescriptorFile::MoveTo(nsIFile* aNewParentDir, const nsAString& aNewName)
297
0
{
298
0
  return NS_ERROR_NOT_IMPLEMENTED;
299
0
}
300
301
NS_IMETHODIMP
302
FileDescriptorFile::MoveToNative(nsIFile* aNewParent,
303
                                 const nsACString& aNewName)
304
0
{
305
0
  return NS_ERROR_NOT_IMPLEMENTED;
306
0
}
307
308
NS_IMETHODIMP
309
FileDescriptorFile::RenameTo(nsIFile* aNewParentDir, const nsAString& aNewName)
310
0
{
311
0
  return NS_ERROR_NOT_IMPLEMENTED;
312
0
}
313
314
NS_IMETHODIMP
315
FileDescriptorFile::RenameToNative(nsIFile* aNewParentDir,
316
                                   const nsACString& aNewName)
317
0
{
318
0
  return NS_ERROR_NOT_IMPLEMENTED;
319
0
}
320
321
NS_IMETHODIMP
322
FileDescriptorFile::Remove(bool aRecursive)
323
0
{
324
0
  return NS_ERROR_NOT_IMPLEMENTED;
325
0
}
326
327
NS_IMETHODIMP
328
FileDescriptorFile::GetPermissions(uint32_t* aPermissions)
329
0
{
330
0
  return NS_ERROR_NOT_IMPLEMENTED;
331
0
}
332
333
NS_IMETHODIMP
334
FileDescriptorFile::SetPermissions(uint32_t aPermissions)
335
0
{
336
0
  return NS_ERROR_NOT_IMPLEMENTED;
337
0
}
338
339
NS_IMETHODIMP
340
FileDescriptorFile::GetPermissionsOfLink(uint32_t* aPermissionsOfLink)
341
0
{
342
0
  return NS_ERROR_NOT_IMPLEMENTED;
343
0
}
344
345
NS_IMETHODIMP
346
FileDescriptorFile::SetPermissionsOfLink(uint32_t aPermissions)
347
0
{
348
0
  return NS_ERROR_NOT_IMPLEMENTED;
349
0
}
350
351
NS_IMETHODIMP
352
FileDescriptorFile::GetLastModifiedTime(PRTime* aLastModTime)
353
0
{
354
0
  return NS_ERROR_NOT_IMPLEMENTED;
355
0
}
356
357
NS_IMETHODIMP
358
FileDescriptorFile::SetLastModifiedTime(PRTime aLastModTime)
359
0
{
360
0
  return NS_ERROR_NOT_IMPLEMENTED;
361
0
}
362
363
NS_IMETHODIMP
364
FileDescriptorFile::GetLastModifiedTimeOfLink(PRTime* aLastModTimeOfLink)
365
0
{
366
0
  return NS_ERROR_NOT_IMPLEMENTED;
367
0
}
368
369
NS_IMETHODIMP
370
FileDescriptorFile::SetLastModifiedTimeOfLink(PRTime aLastModTimeOfLink)
371
0
{
372
0
  return NS_ERROR_NOT_IMPLEMENTED;
373
0
}
374
375
NS_IMETHODIMP
376
FileDescriptorFile::GetFileSize(int64_t* aFileSize)
377
0
{
378
0
  return NS_ERROR_NOT_IMPLEMENTED;
379
0
}
380
381
NS_IMETHODIMP
382
FileDescriptorFile::SetFileSize(int64_t aFileSize)
383
0
{
384
0
  return NS_ERROR_NOT_IMPLEMENTED;
385
0
}
386
387
NS_IMETHODIMP
388
FileDescriptorFile::GetFileSizeOfLink(int64_t* aFileSize)
389
0
{
390
0
  return NS_ERROR_NOT_IMPLEMENTED;
391
0
}
392
393
NS_IMETHODIMP
394
FileDescriptorFile::Exists(bool* aRetVal)
395
0
{
396
0
  return NS_ERROR_NOT_IMPLEMENTED;
397
0
}
398
399
NS_IMETHODIMP
400
FileDescriptorFile::IsWritable(bool* aRetVal)
401
0
{
402
0
  return NS_ERROR_NOT_IMPLEMENTED;
403
0
}
404
405
NS_IMETHODIMP
406
FileDescriptorFile::IsReadable(bool* aRetVal)
407
0
{
408
0
  return NS_ERROR_NOT_IMPLEMENTED;
409
0
}
410
411
NS_IMETHODIMP
412
FileDescriptorFile::IsExecutable(bool* aRetVal)
413
0
{
414
0
  return NS_ERROR_NOT_IMPLEMENTED;
415
0
}
416
417
NS_IMETHODIMP
418
FileDescriptorFile::IsHidden(bool* aRetVal)
419
0
{
420
0
  return NS_ERROR_NOT_IMPLEMENTED;
421
0
}
422
423
NS_IMETHODIMP
424
FileDescriptorFile::IsDirectory(bool* aRetVal)
425
0
{
426
0
  return NS_ERROR_NOT_IMPLEMENTED;
427
0
}
428
429
NS_IMETHODIMP
430
FileDescriptorFile::IsFile(bool* aRetVal)
431
0
{
432
0
  return NS_ERROR_NOT_IMPLEMENTED;
433
0
}
434
435
NS_IMETHODIMP
436
FileDescriptorFile::IsSymlink(bool* aRetVal)
437
0
{
438
0
  return NS_ERROR_NOT_IMPLEMENTED;
439
0
}
440
441
NS_IMETHODIMP
442
FileDescriptorFile::IsSpecial(bool* aRetVal)
443
0
{
444
0
  return NS_ERROR_NOT_IMPLEMENTED;
445
0
}
446
447
NS_IMETHODIMP
448
FileDescriptorFile::CreateUnique(uint32_t aType, uint32_t aAttributes)
449
0
{
450
0
  return NS_ERROR_NOT_IMPLEMENTED;
451
0
}
452
453
NS_IMETHODIMP
454
FileDescriptorFile::GetDirectoryEntriesImpl(nsIDirectoryEnumerator** aEntries)
455
0
{
456
0
  return NS_ERROR_NOT_IMPLEMENTED;
457
0
}
458
459
NS_IMETHODIMP
460
FileDescriptorFile::OpenANSIFileDesc(const char* aMode, FILE** aRetVal)
461
0
{
462
0
  return NS_ERROR_NOT_IMPLEMENTED;
463
0
}
464
465
NS_IMETHODIMP
466
FileDescriptorFile::Load(PRLibrary** aRetVal)
467
0
{
468
0
  return NS_ERROR_NOT_IMPLEMENTED;
469
0
}
470
471
NS_IMETHODIMP
472
FileDescriptorFile::GetDiskSpaceAvailable(int64_t* aDiskSpaceAvailable)
473
0
{
474
0
  return NS_ERROR_NOT_IMPLEMENTED;
475
0
}
476
477
NS_IMETHODIMP
478
FileDescriptorFile::Reveal()
479
0
{
480
0
  return NS_ERROR_NOT_IMPLEMENTED;
481
0
}
482
483
NS_IMETHODIMP
484
FileDescriptorFile::Launch()
485
0
{
486
0
  return NS_ERROR_NOT_IMPLEMENTED;
487
0
}
488
489
} // namespace net
490
} // namespace mozilla