void RenderFileUploadControl::updateFromElement() { HTMLInputElement* input = static_cast<HTMLInputElement*>(node()); ASSERT(input->isFileUpload()); if (HTMLInputElement* button = uploadButton()) { bool newDisabled = !theme()->isEnabled(this); // We should avoid to call HTMLFormControlElement::setDisabled() as // possible because setAttribute() in setDisabled() can cause style // recalculation, and HTMLFormControlElement::recalcStyle() calls // updateFromElement() eventually. if (button->disabled() != newDisabled) button->setDisabled(newDisabled); bool newCanReceiveDroppedFilesState = input->canReceiveDroppedFiles(); if (m_canReceiveDroppedFiles != newCanReceiveDroppedFilesState) { m_canReceiveDroppedFiles = newCanReceiveDroppedFilesState; button->setActive(newCanReceiveDroppedFilesState); } } // This only supports clearing out the files, but that's OK because for // security reasons that's the only change the DOM is allowed to make. FileList* files = input->files(); ASSERT(files); if (files && files->isEmpty()) repaint(); }
void RenderFileUploadControl::updateFromElement() { HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(node()); ASSERT(inputElement->inputType() == HTMLInputElement::FILE); if (!m_button) { m_button = new HTMLFileUploadInnerButtonElement(document(), inputElement); m_button->setInputType("button"); m_button->setValue(fileButtonChooseFileLabel()); RefPtr<RenderStyle> buttonStyle = createButtonStyle(style()); RenderObject* renderer = m_button->createRenderer(renderArena(), buttonStyle.get()); m_button->setRenderer(renderer); renderer->setStyle(buttonStyle.release()); renderer->updateFromElement(); m_button->setAttached(); m_button->setInDocument(true); addChild(renderer); } m_button->setDisabled(!theme()->isEnabled(this)); // This only supports clearing out the files, but that's OK because for // security reasons that's the only change the DOM is allowed to make. FileList* files = inputElement->files(); ASSERT(files); if (files && files->isEmpty() && !m_fileChooser->filenames().isEmpty()) { m_fileChooser->clear(); repaint(); } }
// 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; }
JSValue jsHTMLInputElementFiles(ExecState* exec, const Identifier&, const PropertySlot& slot) { JSHTMLInputElement* castedThis = static_cast<JSHTMLInputElement*>(asObject(slot.slotBase())); UNUSED_PARAM(exec); HTMLInputElement* imp = static_cast<HTMLInputElement*>(castedThis->impl()); return toJS(exec, castedThis->globalObject(), WTF::getPtr(imp->files())); }
void Chrome::setToolTip(const HitTestResult& result) { // First priority is a potential toolTip representing a spelling or grammar error String toolTip = result.spellingToolTip(); // Next priority is a toolTip from a URL beneath the mouse (if preference is set to show those). if (toolTip.isEmpty() && m_page->settings()->showsURLsInToolTips()) { if (Node* node = result.innerNonSharedNode()) { // Get tooltip representing form action, if relevant if (node->hasTagName(inputTag)) { HTMLInputElement* input = static_cast<HTMLInputElement*>(node); if (input->inputType() == HTMLInputElement::SUBMIT) if (HTMLFormElement* form = input->form()) toolTip = form->action(); } } // Get tooltip representing link's URL if (toolTip.isEmpty()) // FIXME: Need to pass this URL through userVisibleString once that's in WebCore toolTip = result.absoluteLinkURL().string(); } // Next we'll consider a tooltip for element with "title" attribute if (toolTip.isEmpty()) toolTip = result.title(); // Lastly, for <input type="file"> that allow multiple files, we'll consider a tooltip for the selected filenames if (toolTip.isEmpty()) { if (Node* node = result.innerNonSharedNode()) { if (node->hasTagName(inputTag)) { HTMLInputElement* input = static_cast<HTMLInputElement*>(node); if (input->inputType() == HTMLInputElement::FILE) { FileList* files = input->files(); unsigned listSize = files->length(); if (files && listSize > 1) { Vector<UChar> names; for (size_t i = 0; i < listSize; ++i) { append(names, files->item(i)->fileName()); if (i != listSize - 1) names.append('\n'); } toolTip = String::adopt(names); } } } } } m_client->setToolTip(toolTip); }
void RenderFileUploadControl::updateFromElement() { HTMLInputElement* input = static_cast<HTMLInputElement*>(node()); ASSERT(input->isFileUpload()); if (HTMLInputElement* button = uploadButton()) { bool newCanReceiveDroppedFilesState = input->canReceiveDroppedFiles(); if (m_canReceiveDroppedFiles != newCanReceiveDroppedFilesState) { m_canReceiveDroppedFiles = newCanReceiveDroppedFilesState; button->setActive(newCanReceiveDroppedFilesState); } } // This only supports clearing out the files, but that's OK because for // security reasons that's the only change the DOM is allowed to make. FileList* files = input->files(); ASSERT(files); if (files && files->isEmpty()) repaint(); }
String RenderFileUploadControl::fileTextValue() const { HTMLInputElement* input = static_cast<HTMLInputElement*>(node()); ASSERT(input->files()); return theme()->fileListNameForWidth(input->files()->paths(), style()->font(), maxFilenameWidth(), input->multiple()); }
String RenderFileUploadControl::fileTextValue() const { HTMLInputElement* input = toHTMLInputElement(node()); ASSERT(input->files()); return RenderTheme::theme().fileListNameForWidth(input->locale(), input->files(), style()->font(), maxFilenameWidth()); }
void FileInputType::copyNonAttributeProperties(const HTMLInputElement& source) { DCHECK(m_fileList->isEmpty()); const FileList* sourceList = source.files(); for (unsigned i = 0; i < sourceList->length(); ++i) m_fileList->append(sourceList->item(i)->clone()); }