void FilePickerParent::SendFilesOrDirectories(const nsTArray<BlobImplOrString>& aData) { if (mMode == nsIFilePicker::modeGetFolder) { MOZ_ASSERT(aData.Length() <= 1); if (aData.IsEmpty()) { Unused << Send__delete__(this, void_t(), mResult); return; } MOZ_ASSERT(aData[0].mType == BlobImplOrString::eDirectoryPath); InputDirectory input; input.directoryPath() = aData[0].mDirectoryPath; Unused << Send__delete__(this, input, mResult); return; } nsIContentParent* parent = TabParent::GetFrom(Manager())->Manager(); InfallibleTArray<PBlobParent*> blobs; for (unsigned i = 0; i < aData.Length(); i++) { MOZ_ASSERT(aData[i].mType == BlobImplOrString::eBlobImpl); BlobParent* blobParent = parent->GetOrCreateActorForBlobImpl(aData[i].mBlobImpl); if (blobParent) { blobs.AppendElement(blobParent); } } InputBlobs inblobs; inblobs.blobsParent().SwapElements(blobs); Unused << Send__delete__(this, inblobs, mResult); }
void FilePickerParent::SendFilesOrDirectories( const nsTArray<BlobImplOrString>& aData) { ContentParent* parent = TabParent::GetFrom(Manager())->Manager(); if (mMode == nsIFilePicker::modeGetFolder) { MOZ_ASSERT(aData.Length() <= 1); if (aData.IsEmpty()) { Unused << Send__delete__(this, void_t(), mResult); return; } MOZ_ASSERT(aData[0].mType == BlobImplOrString::eDirectoryPath); // Let's inform the security singleton about the given access of this tab on // this directory path. RefPtr<FileSystemSecurity> fss = FileSystemSecurity::GetOrCreate(); fss->GrantAccessToContentProcess(parent->ChildID(), aData[0].mDirectoryPath); InputDirectory input; input.directoryPath() = aData[0].mDirectoryPath; Unused << Send__delete__(this, input, mResult); return; } InfallibleTArray<IPCBlob> ipcBlobs; for (unsigned i = 0; i < aData.Length(); i++) { IPCBlob ipcBlob; MOZ_ASSERT(aData[i].mType == BlobImplOrString::eBlobImpl); nsresult rv = IPCBlobUtils::Serialize(aData[i].mBlobImpl, parent, ipcBlob); if (NS_WARN_IF(NS_FAILED(rv))) { break; } ipcBlobs.AppendElement(ipcBlob); } InputBlobs inblobs; inblobs.blobs().SwapElements(ipcBlobs); Unused << Send__delete__(this, inblobs, mResult); }