static void AppendBlobImplAsDirectory(nsTArray<OwningFileOrDirectory>& aArray, BlobImpl* aBlobImpl, nsIContent* aContent) { MOZ_ASSERT(aBlobImpl); MOZ_ASSERT(aBlobImpl->IsDirectory()); nsAutoString fullpath; ErrorResult err; aBlobImpl->GetMozFullPath(fullpath, err); if (err.Failed()) { err.SuppressException(); return; } nsCOMPtr<nsIFile> file; NS_ConvertUTF16toUTF8 path(fullpath); nsresult rv = NS_NewNativeLocalFile(path, true, getter_AddRefs(file)); if (NS_WARN_IF(NS_FAILED(rv))) { return; } nsPIDOMWindowInner* inner = aContent->OwnerDoc()->GetInnerWindow(); if (!inner || !inner->IsCurrentInnerWindow()) { return; } RefPtr<Directory> directory = Directory::Create(inner, file); MOZ_ASSERT(directory); OwningFileOrDirectory* element = aArray.AppendElement(); element->SetAsDirectory() = directory; }
void GetDirectoryListingTaskChild::SetSuccessRequestResult(const FileSystemResponseValue& aValue, ErrorResult& aRv) { mFileSystem->AssertIsOnOwningThread(); MOZ_ASSERT(aValue.type() == FileSystemResponseValue::TFileSystemDirectoryListingResponse); FileSystemDirectoryListingResponse r = aValue; for (uint32_t i = 0; i < r.data().Length(); ++i) { const FileSystemDirectoryListingResponseData& data = r.data()[i]; OwningFileOrDirectory* ofd = mTargetData.AppendElement(fallible); if (!ofd) { aRv.Throw(NS_ERROR_OUT_OF_MEMORY); return; } if (data.type() == FileSystemDirectoryListingResponseData::TFileSystemDirectoryListingResponseFile) { const FileSystemDirectoryListingResponseFile& d = data.get_FileSystemDirectoryListingResponseFile(); RefPtr<BlobImpl> blobImpl = static_cast<BlobChild*>(d.blobChild())->GetBlobImpl(); MOZ_ASSERT(blobImpl); RefPtr<File> file = File::Create(mFileSystem->GetParentObject(), blobImpl); MOZ_ASSERT(file); ofd->SetAsFile() = file; } else { MOZ_ASSERT(data.type() == FileSystemDirectoryListingResponseData::TFileSystemDirectoryListingResponseDirectory); const FileSystemDirectoryListingResponseDirectory& d = data.get_FileSystemDirectoryListingResponseDirectory(); nsCOMPtr<nsIFile> path; aRv = NS_NewLocalFile(d.directoryRealPath(), true, getter_AddRefs(path)); if (NS_WARN_IF(aRv.Failed())) { return; } RefPtr<Directory> directory = Directory::Create(mFileSystem->GetParentObject(), path, mFileSystem); MOZ_ASSERT(directory); ofd->SetAsDirectory() = directory; } } }
bool nsFilePickerProxy::Recv__delete__(const MaybeInputData& aData, const int16_t& aResult) { if (aData.type() == MaybeInputData::TInputBlobs) { const InfallibleTArray<PBlobChild*>& blobs = aData.get_InputBlobs().blobsChild(); for (uint32_t i = 0; i < blobs.Length(); ++i) { BlobChild* actor = static_cast<BlobChild*>(blobs[i]); RefPtr<BlobImpl> blobImpl = actor->GetBlobImpl(); NS_ENSURE_TRUE(blobImpl, true); if (!blobImpl->IsFile()) { return true; } nsPIDOMWindowInner* inner = mParent ? mParent->GetCurrentInnerWindow() : nullptr; RefPtr<File> file = File::Create(inner, blobImpl); MOZ_ASSERT(file); OwningFileOrDirectory* element = mFilesOrDirectories.AppendElement(); element->SetAsFile() = file; } } else if (aData.type() == MaybeInputData::TInputDirectory) { nsCOMPtr<nsIFile> file; NS_ConvertUTF16toUTF8 path(aData.get_InputDirectory().directoryPath()); nsresult rv = NS_NewNativeLocalFile(path, true, getter_AddRefs(file)); if (NS_WARN_IF(NS_FAILED(rv))) { return true; } RefPtr<Directory> directory = Directory::Create(mParent->GetCurrentInnerWindow(), file, Directory::eDOMRootDirectory); MOZ_ASSERT(directory); OwningFileOrDirectory* element = mFilesOrDirectories.AppendElement(); element->SetAsDirectory() = directory; } if (mCallback) { mCallback->Done(aResult); mCallback = nullptr; } return true; }