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]; Directory::FileOrDirectoryPath element; if (data.type() == FileSystemDirectoryListingResponseData::TFileSystemDirectoryListingResponseFile) { element.mType = Directory::FileOrDirectoryPath::eFilePath; element.mPath = data.get_FileSystemDirectoryListingResponseFile().fileRealPath(); } else { MOZ_ASSERT(data.type() == FileSystemDirectoryListingResponseData::TFileSystemDirectoryListingResponseDirectory); element.mType = Directory::FileOrDirectoryPath::eDirectoryPath; element.mPath = data.get_FileSystemDirectoryListingResponseDirectory().directoryRealPath(); } if (!mTargetData.AppendElement(element, fallible)) { aRv.Throw(NS_ERROR_OUT_OF_MEMORY); return; } } }
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; } } }
FileSystemResponseValue GetDirectoryListingTaskParent::GetSuccessRequestResult(ErrorResult& aRv) const { AssertIsOnBackgroundThread(); InfallibleTArray<PBlobParent*> blobs; nsTArray<FileSystemDirectoryListingResponseData> inputs; for (unsigned i = 0; i < mTargetData.Length(); i++) { if (mTargetData[i].mType == Directory::FileOrDirectoryPath::eFilePath) { FileSystemDirectoryListingResponseFile fileData; fileData.fileRealPath() = mTargetData[i].mPath; inputs.AppendElement(fileData); } else { MOZ_ASSERT(mTargetData[i].mType == Directory::FileOrDirectoryPath::eDirectoryPath); FileSystemDirectoryListingResponseDirectory directoryData; directoryData.directoryRealPath() = mTargetData[i].mPath; inputs.AppendElement(directoryData); } } FileSystemDirectoryListingResponse response; response.data().SwapElements(inputs); return response; }
FileSystemResponseValue GetDirectoryListingTaskParent::GetSuccessRequestResult(ErrorResult& aRv) const { AssertIsOnBackgroundThread(); InfallibleTArray<PBlobParent*> blobs; nsTArray<FileSystemDirectoryListingResponseData> inputs; for (unsigned i = 0; i < mTargetData.Length(); i++) { if (mTargetData[i].mType == FileOrDirectoryPath::eFilePath) { nsCOMPtr<nsIFile> path; nsresult rv = NS_NewLocalFile(mTargetData[i].mPath, true, getter_AddRefs(path)); if (NS_WARN_IF(NS_FAILED(rv))) { return FileSystemErrorResponse(rv); } FileSystemDirectoryListingResponseFile fileData; RefPtr<BlobImpl> blobImpl = new FileBlobImpl(path); nsAutoString filePath; filePath.Assign(mDOMPath); // This is specific for unix root filesystem. if (!mDOMPath.EqualsLiteral(FILESYSTEM_DOM_PATH_SEPARATOR_LITERAL)) { filePath.AppendLiteral(FILESYSTEM_DOM_PATH_SEPARATOR_LITERAL); } nsAutoString name; blobImpl->GetName(name); filePath.Append(name); blobImpl->SetDOMPath(filePath); fileData.blobParent() = BlobParent::GetOrCreate(mRequestParent->Manager(), blobImpl); inputs.AppendElement(fileData); } else { MOZ_ASSERT(mTargetData[i].mType == FileOrDirectoryPath::eDirectoryPath); FileSystemDirectoryListingResponseDirectory directoryData; directoryData.directoryRealPath() = mTargetData[i].mPath; inputs.AppendElement(directoryData); } } FileSystemDirectoryListingResponse response; response.data().SwapElements(inputs); return response; }