summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/win/DOMHTMLClasses.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-13 16:23:25 +0100
committerBen Murdoch <benm@google.com>2011-05-16 11:35:02 +0100
commit65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch)
treef478babb801e720de7bfaee23443ffe029f58731 /Source/WebKit/win/DOMHTMLClasses.cpp
parent47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff)
downloadexternal_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.cpp1621
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);
+}