18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple, Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKitDLL.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebHTMLRepresentation.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKit.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebFrame.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebKitStatisticsPrivate.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/BString.h>
34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <WebCore/Frame.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/HTMLInputElement.h>
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WebCore/TextResourceDecoder.h>
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore;
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// WebHTMLRepresentation ------------------------------------------------------
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebHTMLRepresentation::WebHTMLRepresentation()
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_refCount(0)
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_frame(0)
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebHTMLRepresentationCount++;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassCount++;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassNameCount.add("WebHTMLRepresentation");
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebHTMLRepresentation::~WebHTMLRepresentation()
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_frame) {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_frame->Release();
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_frame = 0;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebHTMLRepresentationCount--;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassCount--;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gClassNameCount.remove("WebHTMLRepresentation");
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebHTMLRepresentation* WebHTMLRepresentation::createInstance(WebFrame* frame)
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebHTMLRepresentation* instance = new WebHTMLRepresentation();
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    instance->m_frame = frame;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    frame->AddRef();
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    instance->AddRef();
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return instance;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// IUnknown -------------------------------------------------------------------
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::QueryInterface(REFIID riid, void** ppvObject)
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *ppvObject = 0;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (IsEqualGUID(riid, IID_IUnknown))
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *ppvObject = static_cast<IWebHTMLRepresentation*>(this);
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else if (IsEqualGUID(riid, IID_IWebHTMLRepresentation))
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *ppvObject = static_cast<IWebHTMLRepresentation*>(this);
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else if (IsEqualGUID(riid, IID_IWebDocumentRepresentation))
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *ppvObject = static_cast<IWebDocumentRepresentation*>(this);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_NOINTERFACE;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    AddRef();
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebHTMLRepresentation::AddRef()
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ++m_refCount;
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectULONG STDMETHODCALLTYPE WebHTMLRepresentation::Release()
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ULONG newRef = --m_refCount;
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!newRef)
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        delete(this);
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return newRef;
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// IWebHTMLRepresentation --------------------------------------------------------------------
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
106d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::supportedMIMETypes(
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ BSTR* /*types*/,
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ int* /*cTypes*/)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
114d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::supportedNonImageMIMETypes(
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ BSTR* /*types*/,
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ int* /*cTypes*/)
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
122d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::supportedImageMIMETypes(
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ BSTR* /*types*/,
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ int* /*cTypes*/)
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
130d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::attributedStringFromDOMNodes(
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMNode* /*startNode*/,
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ int /*startOffset*/,
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMNode* /*endNode*/,
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ int /*endOffset*/,
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ IDataObject** /*attributedString*/)
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
141d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::elementWithName(
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ BSTR name,
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* form,
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ IDOMElement** element)
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_frame)
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_frame->elementWithName(name, form, element);
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
152d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::elementDoesAutoComplete(
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* element,
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BOOL* result)
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    BOOL doesAutoComplete;
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    HRESULT hr = m_frame->elementDoesAutoComplete(element, &doesAutoComplete);
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *result = doesAutoComplete ? TRUE : FALSE;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return hr;
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
162d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::elementIsPassword(
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* element,
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BOOL* result)
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isPassword;
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    HRESULT hr = m_frame->elementIsPassword(element, &isPassword);
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *result = isPassword ?  TRUE : FALSE;
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return hr;
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
172d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::formForElement(
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* element,
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ IDOMElement** form)
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_frame)
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_frame->formForElement(element, form);
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
182d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::currentForm(
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ IDOMElement** form)
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_frame)
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_frame->currentForm(form);
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
191d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::controlsInForm(
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* form,
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ IDOMElement** controls,
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [out][in] */ int* cControls)
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_frame->controlsInForm(form, controls, cControls);
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
199d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::deprecatedSearchForLabels(
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [size_is][in] */ BSTR* labels,
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ int cLabels,
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* beforeElement,
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BSTR* result)
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
205d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_frame->searchForLabelsBeforeElement(labels, cLabels, beforeElement, 0, 0, result);
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::matchLabels(
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [size_is][in] */ BSTR* labels,
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ int cLabels,
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IDOMElement* againstElement,
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BSTR* result)
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_frame->matchLabelsAgainstElement(labels, cLabels, againstElement, result);
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
217d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT WebHTMLRepresentation::searchForLabels(BSTR* labels, unsigned cLabels, IDOMElement* beforeElement, unsigned* resultDistance, BOOL* resultIsInCellAbove, BSTR* result)
218d0825bca7fe65beaee391d30da42e937db621564Steve Block{
219d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_frame->searchForLabelsBeforeElement(labels, cLabels, beforeElement, resultDistance, resultIsInCellAbove, result);
220d0825bca7fe65beaee391d30da42e937db621564Steve Block}
221d0825bca7fe65beaee391d30da42e937db621564Steve Block
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// IWebDocumentRepresentation ----------------------------------------------------------------
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
224d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::setDataSource(
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IWebDataSource* /*dataSource*/)
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
231d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::receivedData(
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IStream* /*data*/,
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IWebDataSource* /*dataSource*/)
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
239d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::receivedError(
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IWebError* /*error*/,
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IWebDataSource* /*dataSource*/)
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
247d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::finishedLoadingWithDataSource(
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [in] */ IWebDataSource* /*dataSource*/)
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
254d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::canProvideDocumentSource(
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BOOL* result)
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool canProvideSource;
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    HRESULT hr = this->m_frame->canProvideDocumentSource(&canProvideSource);
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *result = canProvideSource ? TRUE : FALSE;
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return hr;
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
263d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::documentSource(
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BSTR* source)
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!source)
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *source = 0;
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    HRESULT hr = S_OK;
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    COMPtr<IWebDataSource> dataSource;
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    hr = m_frame->dataSource(&dataSource);
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (FAILED(hr))
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return hr;
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    COMPtr<IStream> data;
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    hr = dataSource->data(&data);
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (FAILED(hr))
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return hr;
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    STATSTG stat;
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    hr = data->Stat(&stat, STATFLAG_NONAME);
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (FAILED(hr))
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return hr;
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (stat.cbSize.HighPart || !stat.cbSize.LowPart)
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Vector<char> dataBuffer(stat.cbSize.LowPart);
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ULONG read;
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    hr = data->Read(dataBuffer.data(), static_cast<ULONG>(dataBuffer.size()), &read);
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (FAILED(hr))
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return hr;
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Frame* frame = core(m_frame);
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!frame)
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::Document* doc = frame->document();
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!doc)
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCore::TextResourceDecoder* decoder = doc->decoder();
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!decoder)
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return E_FAIL;
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *source = WebCore::BString(decoder->encoding().decode(dataBuffer.data(), dataBuffer.size())).release();
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return S_OK;
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
314d0825bca7fe65beaee391d30da42e937db621564Steve BlockHRESULT STDMETHODCALLTYPE WebHTMLRepresentation::title(
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /* [retval][out] */ BSTR* /*docTitle*/)
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return E_NOTIMPL;
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
320