tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FileSystemEntry.cpp (2791B)


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