void MultipartBlobImpl::GetMozFullPathInternal(nsAString& aFilename, ErrorResult& aRv) { if (!mIsFromNsIFile || mBlobImpls.Length() == 0) { BlobImplBase::GetMozFullPathInternal(aFilename, aRv); return; } BlobImpl* blobImpl = mBlobImpls.ElementAt(0).get(); if (!blobImpl) { BlobImplBase::GetMozFullPathInternal(aFilename, aRv); return; } blobImpl->GetMozFullPathInternal(aFilename, aRv); }
already_AddRefed<FileSystemEntry> DataTransferItem::GetAsEntryWithPrincipal(nsIPrincipal* aPrincipal, ErrorResult& aRv) { RefPtr<File> file = GetAsFileWithPrincipal(aPrincipal, aRv); if (NS_WARN_IF(aRv.Failed()) || !file) { return nullptr; } nsCOMPtr<nsIGlobalObject> global; // This is annoying, but DataTransfer may have various things as parent. nsCOMPtr<EventTarget> target = do_QueryInterface(mDataTransfer->GetParentObject()); if (target) { global = target->GetOwnerGlobal(); } else { nsCOMPtr<nsIDOMEvent> event = do_QueryInterface(mDataTransfer->GetParentObject()); if (event) { global = event->InternalDOMEvent()->GetParentObject(); } } if (!global) { return nullptr; } RefPtr<FileSystem> fs = FileSystem::Create(global); RefPtr<FileSystemEntry> entry; BlobImpl* impl = file->Impl(); MOZ_ASSERT(impl); if (impl->IsDirectory()) { nsAutoString fullpath; impl->GetMozFullPathInternal(fullpath, aRv); if (aRv.Failed()) { aRv.SuppressException(); return nullptr; } nsCOMPtr<nsIFile> directoryFile; nsresult rv = NS_NewNativeLocalFile(NS_ConvertUTF16toUTF8(fullpath), true, getter_AddRefs(directoryFile)); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr; } RefPtr<Directory> directory = Directory::Create(global, directoryFile); entry = new FileSystemDirectoryEntry(global, directory, fs); } else { entry = new FileSystemFileEntry(global, file, fs); } Sequence<RefPtr<FileSystemEntry>> entries; if (!entries.AppendElement(entry, fallible)) { return nullptr; } fs->CreateRoot(entries); return entry.forget(); }