Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/filesystem/compat/FileSystemEntry.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 file,
5
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#include "FileSystemEntry.h"
8
#include "FileSystemDirectoryEntry.h"
9
#include "FileSystemFileEntry.h"
10
#include "mozilla/dom/FileSystemEntryBinding.h"
11
#include "mozilla/dom/UnionTypes.h"
12
13
namespace mozilla {
14
namespace dom {
15
16
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(FileSystemEntry, mParent, mParentEntry,
17
                                      mFileSystem)
18
19
NS_IMPL_CYCLE_COLLECTING_ADDREF(FileSystemEntry)
20
NS_IMPL_CYCLE_COLLECTING_RELEASE(FileSystemEntry)
21
22
0
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(FileSystemEntry)
23
0
  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
24
0
  NS_INTERFACE_MAP_ENTRY(nsISupports)
25
0
NS_INTERFACE_MAP_END
26
27
/* static */ already_AddRefed<FileSystemEntry>
28
FileSystemEntry::Create(nsIGlobalObject* aGlobalObject,
29
                        const OwningFileOrDirectory& aFileOrDirectory,
30
                        FileSystem* aFileSystem)
31
0
{
32
0
  MOZ_ASSERT(aGlobalObject);
33
0
  MOZ_ASSERT(aFileSystem);
34
0
35
0
  RefPtr<FileSystemEntry> entry;
36
0
  if (aFileOrDirectory.IsFile()) {
37
0
    entry = new FileSystemFileEntry(aGlobalObject,
38
0
                                    aFileOrDirectory.GetAsFile(),
39
0
                                    nullptr,
40
0
                                    aFileSystem);
41
0
  } else {
42
0
    MOZ_ASSERT(aFileOrDirectory.IsDirectory());
43
0
    entry = new FileSystemDirectoryEntry(aGlobalObject,
44
0
                                         aFileOrDirectory.GetAsDirectory(),
45
0
                                         nullptr,
46
0
                                         aFileSystem);
47
0
  }
48
0
49
0
  return entry.forget();
50
0
}
51
52
FileSystemEntry::FileSystemEntry(nsIGlobalObject* aGlobal,
53
                                 FileSystemEntry* aParentEntry,
54
                                 FileSystem* aFileSystem)
55
  : mParent(aGlobal)
56
  , mParentEntry(aParentEntry)
57
  , mFileSystem(aFileSystem)
58
0
{
59
0
  MOZ_ASSERT(aGlobal);
60
0
  MOZ_ASSERT(aFileSystem);
61
0
}
62
63
FileSystemEntry::~FileSystemEntry()
64
0
{}
65
66
JSObject*
67
FileSystemEntry::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
68
0
{
69
0
  return FileSystemEntry_Binding::Wrap(aCx, this, aGivenProto);
70
0
}
71
72
void
73
FileSystemEntry::GetParent(const Optional<OwningNonNull<FileSystemEntryCallback>>& aSuccessCallback,
74
                           const Optional<OwningNonNull<ErrorCallback>>& aErrorCallback)
75
0
{
76
0
  if (!aSuccessCallback.WasPassed() && !aErrorCallback.WasPassed()) {
77
0
    return;
78
0
  }
79
0
80
0
  if (mParentEntry) {
81
0
    FileSystemEntryCallbackHelper::Call(GetParentObject(), aSuccessCallback,
82
0
                                        mParentEntry);
83
0
    return;
84
0
  }
85
0
86
0
  FileSystemEntryCallbackHelper::Call(GetParentObject(), aSuccessCallback, this);
87
0
}
88
89
} // dom namespace
90
} // mozilla namespace