DOMHTMLClasses.cpp [plain text]
#include "config.h"
#include "WebKitDLL.h"
#include "DOMHTMLClasses.h"
#include "COMPtr.h"
#include "WebFrame.h"
#pragma warning(push, 0)
#include <WebCore/BString.h>
#include <WebCore/Document.h>
#include <WebCore/Element.h>
#include <WebCore/FrameView.h>
#include <WebCore/HTMLCollection.h>
#include <WebCore/HTMLDocument.h>
#include <WebCore/HTMLFormElement.h>
#include <WebCore/HTMLIFrameElement.h>
#include <WebCore/HTMLInputElement.h>
#include <WebCore/HTMLNames.h>
#include <WebCore/HTMLOptionElement.h>
#include <WebCore/HTMLOptionsCollection.h>
#include <WebCore/HTMLSelectElement.h>
#include <WebCore/HTMLTextAreaElement.h>
#include <WebCore/IntRect.h>
#include <WebCore/RenderObject.h>
#include <WebCore/RenderTextControl.h>
#pragma warning(pop)
using namespace WebCore;
using namespace HTMLNames;
DOMHTMLCollection::DOMHTMLCollection(WebCore::HTMLCollection* c)
: m_collection(c)
{
}
IDOMHTMLCollection* DOMHTMLCollection::createInstance(WebCore::HTMLCollection* c)
{
if (!c)
return 0;
IDOMHTMLCollection* htmlCollection = 0;
DOMHTMLCollection* newCollection = new DOMHTMLCollection(c);
if (FAILED(newCollection->QueryInterface(IID_IDOMHTMLCollection, (void**)&htmlCollection))) {
delete newCollection;
return 0;
}
return htmlCollection;
}
HRESULT STDMETHODCALLTYPE DOMHTMLCollection::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLCollection))
*ppvObject = static_cast<IDOMHTMLCollection*>(this);
else
return DOMObject::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLCollection::length(
UINT* result)
{
*result = 0;
if (!m_collection)
return E_POINTER;
*result = m_collection->length();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLCollection::item(
UINT index,
IDOMNode** node)
{
*node = 0;
if (!m_collection)
return E_POINTER;
*node = DOMNode::createInstance(m_collection->item(index));
return *node ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLCollection::namedItem(
BSTR ,
IDOMNode** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLOptionsCollection))
*ppvObject = static_cast<IDOMHTMLOptionsCollection*>(this);
else
return DOMObject::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
DOMHTMLOptionsCollection::DOMHTMLOptionsCollection(WebCore::HTMLOptionsCollection* collection)
: m_collection(collection)
{
}
IDOMHTMLOptionsCollection* DOMHTMLOptionsCollection::createInstance(WebCore::HTMLOptionsCollection* collection)
{
if (!collection)
return 0;
IDOMHTMLOptionsCollection* optionsCollection = 0;
DOMHTMLOptionsCollection* newCollection = new DOMHTMLOptionsCollection(collection);
if (FAILED(newCollection->QueryInterface(IID_IDOMHTMLOptionsCollection, (void**)&optionsCollection))) {
delete newCollection;
return 0;
}
return optionsCollection;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::length(
unsigned int* result)
{
if (!result)
return E_POINTER;
*result = m_collection->length();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::setLength(
unsigned int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::item(
unsigned int index,
IDOMNode** result)
{
if (!result)
return E_POINTER;
*result = DOMNode::createInstance(m_collection->item(index));
return *result ? S_OK : E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::namedItem(
BSTR ,
IDOMNode** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLDocument))
*ppvObject = static_cast<IDOMHTMLDocument*>(this);
else
return DOMDocument::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::title(
BSTR* result)
{
if (!result)
return E_POINTER;
*result = 0;
if (!m_document || !m_document->isHTMLDocument())
return E_FAIL;
*result = BString(m_document->title()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setTitle(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::referrer(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::domain(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::URL(
BSTR* result)
{
if (!result)
return E_POINTER;
*result = BString(static_cast<HTMLDocument*>(m_document)->url()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::body(
IDOMHTMLElement** bodyElement)
{
*bodyElement = 0;
if (!m_document || !m_document->isHTMLDocument())
return E_FAIL;
HTMLDocument* htmlDoc = static_cast<HTMLDocument*>(m_document);
COMPtr<IDOMElement> domElement;
domElement.adoptRef(DOMHTMLElement::createInstance(htmlDoc->body()));
if (domElement)
return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) bodyElement);
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setBody(
IDOMHTMLElement* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::images(
IDOMHTMLCollection** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::applets(
IDOMHTMLCollection** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::links(
IDOMHTMLCollection** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::forms(
IDOMHTMLCollection** collection)
{
*collection = 0;
if (!m_document || !m_document->isHTMLDocument())
return E_FAIL;
HTMLDocument* htmlDoc = static_cast<HTMLDocument*>(m_document);
*collection = DOMHTMLCollection::createInstance(htmlDoc->forms().get());
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::anchors(
IDOMHTMLCollection** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::cookie(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setCookie(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::open( void)
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::close( void)
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::write(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::writeln(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementById_(
BSTR ,
IDOMElement** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementsByName(
BSTR ,
IDOMNodeList** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLElement))
*ppvObject = static_cast<IDOMHTMLElement*>(this);
else
return DOMElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::idName(
BSTR* result)
{
if (!result)
return E_POINTER;
ASSERT(m_element && m_element->isHTMLElement());
String idString = static_cast<HTMLElement*>(m_element)->getAttribute(idAttr);
*result = BString(idString).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setIdName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::title(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setTitle(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::lang(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setLang(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::dir(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setDir(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::className(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setClassName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerHTML(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerHTML(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerText(
BSTR* result)
{
ASSERT(m_element && m_element->isHTMLElement());
WebCore::String innerTextString = static_cast<HTMLElement*>(m_element)->innerText();
*result = BString(innerTextString.characters(), innerTextString.length()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerText(
BSTR text)
{
ASSERT(m_element && m_element->isHTMLElement());
HTMLElement* htmlEle = static_cast<HTMLElement*>(m_element);
WebCore::String textString(text, SysStringLen(text));
WebCore::ExceptionCode ec = 0;
htmlEle->setInnerText(textString, ec);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLFormElement))
*ppvObject = static_cast<IDOMHTMLFormElement*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::elements(
IDOMHTMLCollection** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::length(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::name(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::acceptCharset(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAcceptCharset(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::action(
BSTR* result)
{
ASSERT(m_element && m_element->hasTagName(formTag));
WebCore::String actionString = static_cast<HTMLFormElement*>(m_element)->action();
*result = BString(actionString.characters(), actionString.length()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAction(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::encType(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setEnctype(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::method(
BSTR* result)
{
ASSERT(m_element && m_element->hasTagName(formTag));
WebCore::String methodString = static_cast<HTMLFormElement*>(m_element)->method();
*result = BString(methodString.characters(), methodString.length()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setMethod(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::target(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setTarget(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::submit( void)
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::reset( void)
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLSelectElement))
*ppvObject = static_cast<IDOMHTMLSelectElement*>(this);
else if (IsEqualGUID(riid, IID_IFormsAutoFillTransitionSelect))
*ppvObject = static_cast<IFormsAutoFillTransitionSelect*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::type(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::selectedIndex(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSelectedIndx(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::value(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setValue(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::length(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::form(
IDOMHTMLFormElement** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::options(
IDOMHTMLOptionsCollection** result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element);
ASSERT(m_element->hasTagName(selectTag));
HTMLSelectElement* selectElement = static_cast<HTMLSelectElement*>(m_element);
if (!selectElement->options())
return E_FAIL;
*result = DOMHTMLOptionsCollection::createInstance(selectElement->options().get());
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::disabled(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setDisabled(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::multiple(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setMultiple(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::name(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::size(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSize(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::tabIndex(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setTabIndex(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::add(
IDOMHTMLElement* ,
IDOMHTMLElement* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::remove(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::activateItemAtIndex(
int index)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(selectTag));
HTMLSelectElement* selectElement = static_cast<HTMLSelectElement*>(m_element);
if (index >= selectElement->length())
return E_FAIL;
selectElement->setSelectedIndex(index);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLOptionElement))
*ppvObject = static_cast<IDOMHTMLOptionElement*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::form(
IDOMHTMLFormElement** )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::defaultSelected(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDefaultSelected(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::text(
BSTR* result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element);
ASSERT(m_element->hasTagName(optionTag));
HTMLOptionElement* optionElement = static_cast<HTMLOptionElement*>(m_element);
*result = BString(optionElement->text()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::index(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::disabled(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDisabled(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::label(
BSTR* result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element);
ASSERT(m_element->hasTagName(optionTag));
HTMLOptionElement* optionElement = static_cast<HTMLOptionElement*>(m_element);
*result = BString(optionElement->label()).release();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setLabel(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::selected(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setSelected(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::value(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setValue(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLInputElement))
*ppvObject = static_cast<IDOMHTMLInputElement*>(this);
else if (IsEqualGUID(riid, IID_IFormsAutoFillTransition))
*ppvObject = static_cast<IFormsAutoFillTransition*>(this);
else if (IsEqualGUID(riid, IID_IFormPromptAdditions))
*ppvObject = static_cast<IFormPromptAdditions*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultValue(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultValue(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultChecked(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultChecked(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::form(
IDOMHTMLElement** result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
COMPtr<IDOMElement> domElement;
domElement.adoptRef(DOMHTMLElement::createInstance(inputElement->form()));
if (domElement)
return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result);
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::accept(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccept(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::accessKey(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccessKey(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::align(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlign(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::alt(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlt(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::checked(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setChecked(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::disabled(
BOOL* result)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*result = inputElement->disabled() ? TRUE : FALSE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDisabled(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::maxLength(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setMaxLength(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::name(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::readOnly(
BOOL* result)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*result = inputElement->readOnly() ? TRUE : FALSE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setReadOnly(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::size(
unsigned int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSize(
unsigned int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::src(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSrc(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::tabIndex(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setTabIndex(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::type(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setType(
BSTR type)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
WebCore::String typeString(type, SysStringLen(type));
inputElement->setType(typeString);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::useMap(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setUseMap(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::value(
BSTR* result)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
WebCore::String valueString = inputElement->value();
*result = BString(valueString.characters(), valueString.length()).release();
if (valueString.length() && !*result)
return E_OUTOFMEMORY;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setValue(
BSTR value)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->setValue(String((UChar*) value, SysStringLen(value)));
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setValueForUser(
BSTR value)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->setValueForUser(String(static_cast<UChar*>(value), SysStringLen(value)));
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::select( void)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->select();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::click( void)
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSelectionStart(
long start)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->setSelectionStart(start);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectionStart(
long *start)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*start = inputElement->selectionStart();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSelectionEnd(
long end)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->setSelectionEnd(end);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectionEnd(
long *end)
{
ASSERT(m_element && m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*end = inputElement->selectionEnd();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isTextField(
BOOL* result)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*result = inputElement->isTextField() ? TRUE : FALSE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::rectOnScreen(
LPRECT rect)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
rect->left = rect->top = rect->right = rect->bottom = 0;
RenderObject* renderer = m_element->renderer();
FrameView* view = m_element->document()->view();
if (!renderer || !view)
return E_FAIL;
IntRect coreRect = view->contentsToScreen(renderer->absoluteBoundingBoxRect());
rect->left = coreRect.x();
rect->top = coreRect.y();
rect->right = coreRect.right();
rect->bottom = coreRect.bottom();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::replaceCharactersInRange(
int startTarget,
int endTarget,
BSTR replacementString,
int index)
{
if (!replacementString)
return E_POINTER;
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
String newValue = inputElement->value();
String webCoreReplacementString(static_cast<UChar*>(replacementString), SysStringLen(replacementString));
newValue.replace(startTarget, endTarget - startTarget, webCoreReplacementString);
inputElement->setValue(newValue);
inputElement->setSelectionRange(index, newValue.length());
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::selectedRange(
int* start,
int* end)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*start = inputElement->selectionStart();
*end = inputElement->selectionEnd();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAutofilled(
BOOL filled)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
inputElement->setAutofilled(!!filled);
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isAutofilled(
BOOL* result)
{
ASSERT(m_element);
ASSERT(m_element->hasTagName(inputTag));
HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element);
*result = inputElement->isAutofilled() ? TRUE : FALSE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isUserEdited(
BOOL *result)
{
if (!result)
return E_POINTER;
*result = FALSE;
ASSERT(m_element);
BOOL textField = FALSE;
if (FAILED(isTextField(&textField)) || !textField)
return S_OK;
RenderObject* renderer = m_element->renderer();
if (renderer && toRenderTextControl(renderer)->lastChangeWasUserEdit())
*result = TRUE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLTextAreaElement))
*ppvObject = static_cast<IDOMHTMLTextAreaElement*>(this);
else if (IsEqualGUID(riid, IID_IFormPromptAdditions))
*ppvObject = static_cast<IFormPromptAdditions*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::defaultValue(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDefaultValue(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::form(
IDOMHTMLElement** result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element && m_element->hasTagName(textareaTag));
HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
COMPtr<IDOMElement> domElement;
domElement.adoptRef(DOMHTMLElement::createInstance(textareaElement->form()));
if (domElement)
return domElement->QueryInterface(IID_IDOMHTMLElement, (void**) result);
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::accessKey(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setAccessKey(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::cols(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setCols(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::disabled(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDisabled(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::name(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setName(
BSTR )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::readOnly(
BOOL* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setReadOnly(
BOOL )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::rows(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setRows(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::tabIndex(
int* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setTabIndex(
int )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::type(
BSTR* )
{
ASSERT_NOT_REACHED();
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::value(
BSTR* result)
{
ASSERT(m_element && m_element->hasTagName(textareaTag));
HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
WebCore::String valueString = textareaElement->value();
*result = BString(valueString.characters(), valueString.length()).release();
if (valueString.length() && !*result)
return E_OUTOFMEMORY;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setValue(
BSTR value)
{
ASSERT(m_element && m_element->hasTagName(textareaTag));
HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
textareaElement->setValue(String((UChar*) value, SysStringLen(value)));
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::select( void)
{
ASSERT(m_element && m_element->hasTagName(textareaTag));
HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element);
textareaElement->select();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::isUserEdited(
BOOL *result)
{
if (!result)
return E_POINTER;
*result = FALSE;
ASSERT(m_element);
RenderObject* renderer = m_element->renderer();
if (renderer && toRenderTextControl(renderer)->lastChangeWasUserEdit())
*result = TRUE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLIFrameElement::QueryInterface(REFIID riid, void** ppvObject)
{
*ppvObject = 0;
if (IsEqualGUID(riid, IID_IDOMHTMLIFrameElement))
*ppvObject = static_cast<IDOMHTMLIFrameElement*>(this);
else
return DOMHTMLElement::QueryInterface(riid, ppvObject);
AddRef();
return S_OK;
}
HRESULT STDMETHODCALLTYPE DOMHTMLIFrameElement::contentFrame(
IWebFrame **result)
{
if (!result)
return E_POINTER;
*result = 0;
ASSERT(m_element && m_element->hasTagName(iframeTag));
HTMLIFrameElement* iFrameElement = static_cast<HTMLIFrameElement*>(m_element);
COMPtr<IWebFrame> webFrame = kit(iFrameElement->contentFrame());
if (!webFrame)
return E_FAIL;
return webFrame.copyRefTo(result);
}