void WebEditorClient::textDidChangeInTextArea(Element* e) { IWebFormDelegate* formDelegate; if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { IDOMElement* domElement = DOMElement::createInstance(e); if (domElement) { IDOMHTMLTextAreaElement* domTextAreaElement; if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLTextAreaElement, (void**)&domTextAreaElement))) { formDelegate->textDidChangeInTextArea(domTextAreaElement, kit(e->document()->frame())); domTextAreaElement->Release(); } domElement->Release(); } formDelegate->Release(); } }
void WebEditorClient::textFieldDidBeginEditing(Element* e) { IWebFormDelegate* formDelegate; if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { IDOMElement* domElement = DOMElement::createInstance(e); if (domElement) { IDOMHTMLInputElement* domInputElement; if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { formDelegate->textFieldDidBeginEditing(domInputElement, kit(e->document()->frame())); domInputElement->Release(); } domElement->Release(); } formDelegate->Release(); } }
void WebEditorClient::textWillBeDeletedInTextField(Element* e) { // We're using the deleteBackward command for all deletion operations since the autofill code treats all deletions the same way. IWebFormDelegate* formDelegate; if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { IDOMElement* domElement = DOMElement::createInstance(e); if (domElement) { IDOMHTMLInputElement* domInputElement; if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { BOOL result; formDelegate->doPlatformCommand(domInputElement, BString(L"DeleteBackward"), kit(e->document()->frame()), &result); domInputElement->Release(); } domElement->Release(); } formDelegate->Release(); } }
void WebEditorClient::textDidChangeInTextField(Element* e) { if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != e) return; IWebFormDelegate* formDelegate; if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { IDOMElement* domElement = DOMElement::createInstance(e); if (domElement) { IDOMHTMLInputElement* domInputElement; if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { formDelegate->textDidChangeInTextField(domInputElement, kit(e->document()->frame())); domInputElement->Release(); } domElement->Release(); } formDelegate->Release(); } }
IDOMNode* DOMNode::createInstance(WebCore::Node* n) { if (!n) return 0; HRESULT hr = S_OK; IDOMNode* domNode = 0; WebCore::Node::NodeType nodeType = n->nodeType(); switch (nodeType) { case WebCore::Node::ELEMENT_NODE: { IDOMElement* newElement = DOMElement::createInstance(static_cast<WebCore::Element*>(n)); if (newElement) { hr = newElement->QueryInterface(IID_IDOMNode, (void**)&domNode); newElement->Release(); } } break; case WebCore::Node::DOCUMENT_NODE: { IDOMDocument* newDocument = DOMDocument::createInstance(&n->document()); if (newDocument) { hr = newDocument->QueryInterface(IID_IDOMNode, (void**)&domNode); newDocument->Release(); } } break; default: { DOMNode* newNode = new DOMNode(n); hr = newNode->QueryInterface(IID_IDOMNode, (void**)&domNode); } break; } if (FAILED(hr)) return 0; return domNode; }
bool WebEditorClient::doTextFieldCommandFromEvent(Element* e, KeyboardEvent* ke) { BOOL result = FALSE; IWebFormDelegate* formDelegate; if (SUCCEEDED(m_webView->formDelegate(&formDelegate)) && formDelegate) { IDOMElement* domElement = DOMElement::createInstance(e); if (domElement) { IDOMHTMLInputElement* domInputElement; if (SUCCEEDED(domElement->QueryInterface(IID_IDOMHTMLInputElement, (void**)&domInputElement))) { String command = m_webView->interpretKeyEvent(ke); // We allow empty commands here because the app code actually depends on this being called for all key presses. // We may want to revisit this later because it doesn't really make sense to send an empty command. formDelegate->doPlatformCommand(domInputElement, BString(command), kit(e->document()->frame()), &result); domInputElement->Release(); } domElement->Release(); } formDelegate->Release(); } return !!result; }