// static
EntryHeapVector HTMLInputElementFileSystem::webkitEntries(ExecutionContext* executionContext, HTMLInputElement& input)
{
    EntryHeapVector entries;
    FileList* files = input.files();

    if (!files)
        return entries;

    RefPtrWillBeRawPtr<DOMFileSystem> filesystem = DOMFileSystem::createIsolatedFileSystem(executionContext, input.droppedFileSystemId());
    if (!filesystem) {
        // Drag-drop isolated filesystem is not available.
        return entries;
    }

    for (unsigned i = 0; i < files->length(); ++i) {
        File* file = files->item(i);

        // FIXME: This involves synchronous file operation.
        FileMetadata metadata;
        if (!getFileMetadata(file->path(), metadata))
            continue;

        // The dropped entries are mapped as top-level entries in the isolated filesystem.
        String virtualPath = DOMFilePath::append("/", file->name());
        if (metadata.type == FileMetadata::TypeDirectory)
            entries.append(DirectoryEntry::create(filesystem, virtualPath));
        else
            entries.append(FileEntry::create(filesystem, virtualPath));
    }
    return entries;
}
 void handleEvent(const EntryHeapVector& entries) override {
   EntrySyncHeapVector syncEntries;
   syncEntries.reserveInitialCapacity(entries.size());
   for (size_t i = 0; i < entries.size(); ++i)
     syncEntries.uncheckedAppend(EntrySync::create(entries[i].get()));
   m_reader->addEntries(syncEntries);
 }
Exemple #3
0
void DirectoryReader::addEntries(const EntryHeapVector& entries) {
  m_entries.appendVector(entries);
  m_errorCallback = nullptr;
  if (m_entriesCallback) {
    EntriesCallback* entriesCallback = m_entriesCallback.release();
    EntryHeapVector entries;
    entries.swap(m_entries);
    entriesCallback->handleEvent(entries);
  }
}
void EntriesCallbacks::didReadDirectoryEntries(bool hasMore)
{
    m_directoryReader->setHasMoreEntries(hasMore);
    EntryHeapVector entries;
    entries.swap(m_entries);
    // FIXME: delay the callback iff shouldScheduleCallback() is true.
    InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_executionContext.get(), m_asyncOperationId);
    if (m_successCallback)
        m_successCallback->handleEvent(entries);
    InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    if (!hasMore)
        InspectorInstrumentation::traceAsyncOperationCompleted(m_executionContext.get(), m_asyncOperationId);
}