diff options
author | Ben Murdoch <benm@google.com> | 2011-05-13 16:23:25 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-16 11:35:02 +0100 |
commit | 65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch) | |
tree | f478babb801e720de7bfaee23443ffe029f58731 /Source/WebKit/win/DOMHTMLClasses.cpp | |
parent | 47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff) | |
download | external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.zip external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.gz external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.bz2 |
Merge WebKit at r75993: Initial merge by git.
Change-Id: I602bbdc3974787a3b0450456a30a7868286921c3
Diffstat (limited to 'Source/WebKit/win/DOMHTMLClasses.cpp')
-rw-r--r-- | Source/WebKit/win/DOMHTMLClasses.cpp | 1621 |
1 files changed, 1621 insertions, 0 deletions
diff --git a/Source/WebKit/win/DOMHTMLClasses.cpp b/Source/WebKit/win/DOMHTMLClasses.cpp new file mode 100644 index 0000000..2dd6deb --- /dev/null +++ b/Source/WebKit/win/DOMHTMLClasses.cpp @@ -0,0 +1,1621 @@ +/* + * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#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::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; +} + +// DOMHTMLCollection - IUnknown ----------------------------------------------- + +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; +} + +// DOMHTMLCollection ---------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLCollection::length( + /* [retval][out] */ UINT* result) +{ + *result = 0; + if (!m_collection) + return E_POINTER; + + *result = m_collection->length(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLCollection::item( + /* [in] */ UINT index, + /* [retval][out] */ 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( + /* [in] */ BSTR /*name*/, + /* [retval][out] */ IDOMNode** /*node*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +// DOMHTMLOptionsCollection - IUnknown ---------------------------------------- + +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::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( + /* [retval][out] */ unsigned int* result) +{ + if (!result) + return E_POINTER; + + *result = m_collection->length(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::setLength( + /* [in] */ unsigned int /*length*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::item( + /* [in] */ unsigned int index, + /* [retval][out] */ IDOMNode** result) +{ + if (!result) + return E_POINTER; + + *result = DOMNode::createInstance(m_collection->item(index)); + + return *result ? S_OK : E_FAIL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionsCollection::namedItem( + /* [in] */ BSTR /*name*/, + /* [retval][out] */ IDOMNode** /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +// DOMHTMLDocument - IUnknown ------------------------------------------------- + +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; +} + +// DOMHTMLDocument ------------------------------------------------------------ + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::title( + /* [retval][out] */ 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( + /* [in] */ BSTR /*title*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::referrer( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::domain( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::URL( + /* [retval][out] */ BSTR* result) +{ + if (!result) + return E_POINTER; + + *result = BString(static_cast<HTMLDocument*>(m_document)->url()).release(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::body( + /* [retval][out] */ 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( + /* [in] */ IDOMHTMLElement* /*body*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::images( + /* [retval][out] */ IDOMHTMLCollection** /*collection*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::applets( + /* [retval][out] */ IDOMHTMLCollection** /*collection*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::links( + /* [retval][out] */ IDOMHTMLCollection** /*collection*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::forms( + /* [retval][out] */ 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( + /* [retval][out] */ IDOMHTMLCollection** /*collection*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::cookie( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::setCookie( + /* [in] */ BSTR /*cookie*/) +{ + 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( + /* [in] */ BSTR /*text*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::writeln( + /* [in] */ BSTR /*text*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementById_( + /* [in] */ BSTR /*elementId*/, + /* [retval][out] */ IDOMElement** /*element*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLDocument::getElementsByName( + /* [in] */ BSTR /*elementName*/, + /* [retval][out] */ IDOMNodeList** /*nodeList*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +// DOMHTMLElement - IUnknown -------------------------------------------------- + +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; +} + +// DOMHTMLElement ------------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::idName( + /* [retval][out] */ 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( + /* [in] */ BSTR /*idName*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::title( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setTitle( + /* [in] */ BSTR /*title*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::lang( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setLang( + /* [in] */ BSTR /*lang*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::dir( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setDir( + /* [in] */ BSTR /*dir*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::className( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setClassName( + /* [in] */ BSTR /*className*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerHTML( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerHTML( + /* [in] */ BSTR /*html*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::innerText( + /* [retval][out] */ BSTR* result) +{ + ASSERT(m_element && m_element->isHTMLElement()); + WTF::String innerTextString = static_cast<HTMLElement*>(m_element)->innerText(); + *result = BString(innerTextString.characters(), innerTextString.length()).release(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLElement::setInnerText( + /* [in] */ BSTR text) +{ + ASSERT(m_element && m_element->isHTMLElement()); + HTMLElement* htmlEle = static_cast<HTMLElement*>(m_element); + WTF::String textString(text, SysStringLen(text)); + WebCore::ExceptionCode ec = 0; + htmlEle->setInnerText(textString, ec); + return S_OK; +} + +// DOMHTMLFormElement - IUnknown ---------------------------------------------- + +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; +} + +// DOMHTMLFormElement --------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::elements( + /* [retval][out] */ IDOMHTMLCollection** /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::length( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::name( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setName( + /* [in] */ BSTR /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::acceptCharset( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAcceptCharset( + /* [in] */ BSTR /*acceptCharset*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::action( + /* [retval][out] */ BSTR* result) +{ + ASSERT(m_element && m_element->hasTagName(formTag)); + WTF::String actionString = static_cast<HTMLFormElement*>(m_element)->action(); + *result = BString(actionString.characters(), actionString.length()).release(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setAction( + /* [in] */ BSTR /*action*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::encType( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setEnctype( + /* [retval][out] */ BSTR* /*encType*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::method( + /* [retval][out] */ BSTR* result) +{ + ASSERT(m_element && m_element->hasTagName(formTag)); + WTF::String methodString = static_cast<HTMLFormElement*>(m_element)->method(); + *result = BString(methodString.characters(), methodString.length()).release(); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setMethod( + /* [in] */ BSTR /*method*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::target( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLFormElement::setTarget( + /* [in] */ BSTR /*target*/) +{ + 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; +} + +// DOMHTMLSelectElement - IUnknown ---------------------------------------------- + +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; +} + +// DOMHTMLSelectElement ------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::type( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::selectedIndex( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSelectedIndx( + /* [in] */ int /*selectedIndex*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::value( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setValue( + /* [in] */ BSTR /*value*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::length( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::form( + /* [retval][out] */ IDOMHTMLFormElement** /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::options( + /* [retval][out] */ 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( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setDisabled( + /* [in] */ BOOL /*disabled*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::multiple( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setMultiple( + /* [in] */ BOOL /*multiple*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::name( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setName( + /* [in] */ BSTR /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::size( + /* [retval][out] */ int* /*size*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setSize( + /* [in] */ int /*size*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::tabIndex( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::setTabIndex( + /* [in] */ int /*tabIndex*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::add( + /* [in] */ IDOMHTMLElement* /*element*/, + /* [in] */ IDOMHTMLElement* /*before*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::remove( + /* [in] */ int /*index*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +// DOMHTMLSelectElement - IFormsAutoFillTransitionSelect ---------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLSelectElement::activateItemAtIndex( + /* [in] */ 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; +} + +// DOMHTMLOptionElement - IUnknown -------------------------------------------- + +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; +} + +// DOMHTMLOptionElement ------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::form( + /* [retval][out] */ IDOMHTMLFormElement** /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::defaultSelected( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDefaultSelected( + /* [in] */ BOOL /*defaultSelected*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::text( + /* [retval][out] */ 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( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::disabled( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setDisabled( + /* [in] */ BOOL /*disabled*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::label( + /* [retval][out] */ 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( + /* [in] */ BSTR /*label*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::selected( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setSelected( + /* [in] */ BOOL /*selected*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::value( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLOptionElement::setValue( + /* [in] */ BSTR /*value*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +// DOMHTMLInputElement - IUnknown ---------------------------------------------- + +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; +} + +// DOMHTMLInputElement -------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultValue( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultValue( + /* [in] */ BSTR /*val*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::defaultChecked( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setDefaultChecked( + /* [in] */ BSTR /*checked*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::form( + /* [retval][out] */ 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( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccept( + /* [in] */ BSTR /*accept*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::accessKey( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAccessKey( + /* [in] */ BSTR /*key*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::align( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlign( + /* [in] */ BSTR /*align*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::alt( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setAlt( + /* [in] */ BSTR /*alt*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::checked( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setChecked( + /* [in] */ BOOL /*checked*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::disabled( + /* [retval][out] */ 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( + /* [in] */ BOOL /*disabled*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::maxLength( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setMaxLength( + /* [in] */ int /*maxLength*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::name( + /* [retval][out] */ BSTR* /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setName( + /* [in] */ BSTR /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::readOnly( + /* [retval][out] */ 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( + /* [in] */ BOOL /*readOnly*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::size( + /* [retval][out] */ unsigned int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSize( + /* [in] */ unsigned int /*size*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::src( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setSrc( + /* [in] */ BSTR /*src*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::tabIndex( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setTabIndex( + /* [in] */ int /*tabIndex*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::type( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setType( + /* [in] */ BSTR type) +{ + ASSERT(m_element && m_element->hasTagName(inputTag)); + HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element); + WTF::String typeString(type, SysStringLen(type)); + inputElement->setType(typeString); + return S_OK; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::useMap( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::setUseMap( + /* [in] */ BSTR /*useMap*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::value( + /* [retval][out] */ BSTR* result) +{ + ASSERT(m_element && m_element->hasTagName(inputTag)); + HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element); + WTF::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( + /* [in] */ 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( + /* [in] */ 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( + /* [in] */ 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( + /* [retval][out] */ 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( + /* [in] */ 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( + /* [retval][out] */ long *end) +{ + ASSERT(m_element && m_element->hasTagName(inputTag)); + HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(m_element); + *end = inputElement->selectionEnd(); + return S_OK; +} + +// DOMHTMLInputElement -- IFormsAutoFillTransition ---------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isTextField( + /* [retval][out] */ 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( + /* [retval][out] */ 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( + /* [in] */ int startTarget, + /* [in] */ int endTarget, + /* [in] */ BSTR replacementString, + /* [in] */ 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( + /* [out] */ int* start, + /* [out] */ 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( + /* [in] */ 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( + /* [retval][out] */ 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; +} + +// DOMHTMLInputElement -- IFormPromptAdditions ------------------------------------ + +HRESULT STDMETHODCALLTYPE DOMHTMLInputElement::isUserEdited( + /* [retval][out] */ 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; +} + +// DOMHTMLTextAreaElement - IUnknown ---------------------------------------------- + +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; +} + +// DOMHTMLTextAreaElement ----------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::defaultValue( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDefaultValue( + /* [in] */ BSTR /*val*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::form( + /* [retval][out] */ 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( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setAccessKey( + /* [in] */ BSTR /*key*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::cols( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setCols( + /* [in] */ int /*cols*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::disabled( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setDisabled( + /* [in] */ BOOL /*disabled*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::name( + /* [retval][out] */ BSTR* /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setName( + /* [in] */ BSTR /*name*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::readOnly( + /* [retval][out] */ BOOL* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setReadOnly( + /* [in] */ BOOL /*readOnly*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::rows( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setRows( + /* [in] */ int /*rows*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::tabIndex( + /* [retval][out] */ int* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::setTabIndex( + /* [in] */ int /*tabIndex*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::type( + /* [retval][out] */ BSTR* /*result*/) +{ + ASSERT_NOT_REACHED(); + return E_NOTIMPL; +} + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::value( + /* [retval][out] */ BSTR* result) +{ + ASSERT(m_element && m_element->hasTagName(textareaTag)); + HTMLTextAreaElement* textareaElement = static_cast<HTMLTextAreaElement*>(m_element); + WTF::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( + /* [in] */ 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; +} + +// DOMHTMLTextAreaElement -- IFormPromptAdditions ------------------------------------ + +HRESULT STDMETHODCALLTYPE DOMHTMLTextAreaElement::isUserEdited( + /* [retval][out] */ 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; +} + +// DOMHTMLIFrameElement - IUnknown -------------------------------------------------- + +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; +} + +// DOMHTMLIFrameElement ------------------------------------------------------------- + +HRESULT STDMETHODCALLTYPE DOMHTMLIFrameElement::contentFrame( + /* [retval][out] */ 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); +} |