void FileInputType::handleDOMActivateEvent(Event* event) { if (element()->disabled()) return; if (!ScriptController::processingUserGesture()) return; if (Chrome* chrome = this->chrome()) { FileChooserSettings settings; HTMLInputElement* input = element(); #if ENABLE(DIRECTORY_UPLOAD) settings.allowsDirectoryUpload = input->fastHasAttribute(webkitdirectoryAttr); settings.allowsMultipleFiles = settings.allowsDirectoryUpload || input->fastHasAttribute(multipleAttr); #else settings.allowsMultipleFiles = input->fastHasAttribute(multipleAttr); #endif settings.acceptMIMETypes = input->acceptMIMETypes(); settings.acceptFileExtensions = input->acceptFileExtensions(); settings.selectedFiles = m_fileList->paths(); #if ENABLE(MEDIA_CAPTURE) settings.capture = input->capture(); #endif chrome->runOpenPanel(input->document()->frame(), newFileChooser(settings)); } event->setDefaultHandled(); }
void EditorClientImpl::textFieldDidEndEditing(Element* element) { HTMLInputElement* inputElement = toHTMLInputElement(element); if (m_webView->autoFillClient() && inputElement) m_webView->autoFillClient()->textFieldDidEndEditing(WebInputElement(inputElement)); // Notification that focus was lost. Be careful with this, it's also sent // when the page is being closed. // Cancel any pending DoAutofill call. m_autofillArgs.clear(); m_autofillTimer.stop(); // Hide any showing popup. m_webView->hideAutoFillPopup(); if (!m_webView->client()) return; // The page is getting closed, don't fill the password. // Notify any password-listener of the focus change. if (!inputElement) return; WebFrameImpl* webframe = WebFrameImpl::fromFrame(inputElement->document()->frame()); if (!webframe) return; WebPasswordAutocompleteListener* listener = webframe->getPasswordListener(inputElement); if (!listener) return; listener->didBlurInputElement(inputElement->value()); }
void RadioButtonGroup::remove(HTMLInputElement* button) { DCHECK_EQ(button->type(), InputTypeNames::radio); auto it = m_members.find(button); if (it == m_members.end()) return; bool wasValid = isValid(); DCHECK_EQ(it->value, button->isRequired()); updateRequiredButton(*it, false); m_members.remove(it); if (m_checkedButton == button) m_checkedButton = nullptr; if (m_members.isEmpty()) { DCHECK(!m_requiredCount); DCHECK(!m_checkedButton); } else if (wasValid != isValid()) { setNeedsValidityCheckForAllButtons(); } if (!wasValid) { // A radio button not in a group is always valid. We need to make it // valid only if the group was invalid. button->setNeedsValidityCheck(); } // Send notification to update AX attributes for AXObjects which radiobutton // group has. if (!m_members.isEmpty()) { HTMLInputElement* input = m_members.begin()->key; if (AXObjectCache* cache = input->document().existingAXObjectCache()) cache->radiobuttonRemovedFromGroup(input); } }
void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input) { notifyPopupOpeningObservers(); WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(input.document().frame()); if (webframe->autofillClient()) webframe->autofillClient()->openTextDataListChooser(WebInputElement(&input)); }
void ChromeClientImpl::didEndEditingOnTextField( HTMLInputElement& inputElement) { WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(inputElement.document().frame()); if (webframe->autofillClient()) webframe->autofillClient()->textFieldDidEndEditing( WebInputElement(&inputElement)); }
void ChromeClientImpl::handleKeyboardEventOnTextField( HTMLInputElement& inputElement, KeyboardEvent& event) { WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(inputElement.document().frame()); if (webframe->autofillClient()) webframe->autofillClient()->textFieldDidReceiveKeyDown( WebInputElement(&inputElement), WebKeyboardEventBuilder(event)); }
void EditorClientImpl::doAutofill(Timer<EditorClientImpl>* timer) { OwnPtr<AutofillArgs> args(m_autofillArgs.release()); HTMLInputElement* inputElement = args->inputElement.get(); const String& value = inputElement->value(); // Enforce autofill_on_empty_value and caret_at_end. bool isCaretAtEnd = true; if (args->requireCaretAtEnd) isCaretAtEnd = inputElement->selectionStart() == inputElement->selectionEnd() && inputElement->selectionEnd() == static_cast<int>(value.length()); if ((!args->autofillOnEmptyValue && value.isEmpty()) || !isCaretAtEnd) { m_webView->hideAutoFillPopup(); return; } // First let's see if there is a password listener for that element. // We won't trigger form autofill in that case, as having both behavior on // a node would be confusing. WebFrameImpl* webframe = WebFrameImpl::fromFrame(inputElement->document()->frame()); if (!webframe) return; WebPasswordAutocompleteListener* listener = webframe->getPasswordListener(inputElement); if (listener) { if (args->autofillFormOnly) return; listener->performInlineAutocomplete(value, args->backspaceOrDeletePressed, true); return; } // Then trigger form autofill. WebString name = WebInputElement(inputElement).nameForAutofill(); ASSERT(static_cast<int>(name.length()) > 0); if (m_webView->client()) m_webView->client()->queryAutofillSuggestions(WebNode(inputElement), name, WebString(value)); }
void ChromeClientImpl::textFieldDataListChanged(HTMLInputElement& input) { WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(input.document().frame()); if (webframe->autofillClient()) webframe->autofillClient()->dataListOptionsChanged(WebInputElement(&input)); }