Home | History | Annotate | Download | only in win
      1 /*
      2  * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef DOMCoreClasses_H
     27 #define DOMCoreClasses_H
     28 
     29 #include "WebKit.h"
     30 #include "WebScriptObject.h"
     31 
     32 namespace WebCore {
     33     class Element;
     34     class Document;
     35     class Node;
     36     class NodeList;
     37 }
     38 
     39 class DOMObject : public WebScriptObject, public IDOMObject
     40 {
     41 public:
     42     // IUnknown
     43     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
     44     virtual ULONG STDMETHODCALLTYPE AddRef(void) { return WebScriptObject::AddRef(); }
     45     virtual ULONG STDMETHODCALLTYPE Release(void) { return WebScriptObject::Release(); }
     46 
     47     // IWebScriptObject
     48     virtual HRESULT STDMETHODCALLTYPE throwException(
     49         /* [in] */ BSTR exceptionMessage,
     50         /* [retval][out] */ BOOL *result) { return WebScriptObject::throwException(exceptionMessage, result); }
     51 
     52     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
     53         /* [in] */ BSTR name,
     54         /* [size_is][in] */ const VARIANT args[  ],
     55         /* [in] */ int cArgs,
     56         /* [retval][out] */ VARIANT *result) { return WebScriptObject::callWebScriptMethod(name, args, cArgs, result); }
     57 
     58     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
     59         /* [in] */ BSTR script,
     60         /* [retval][out] */ VARIANT *result) { return WebScriptObject::evaluateWebScript(script, result); }
     61 
     62     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
     63         /* [in] */ BSTR name) { return WebScriptObject::removeWebScriptKey(name); }
     64 
     65     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
     66         /* [retval][out] */ BSTR* stringRepresentation) { return WebScriptObject::stringRepresentation(stringRepresentation); }
     67 
     68     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
     69         /* [in] */ unsigned int index,
     70         /* [retval][out] */ VARIANT *result) { return WebScriptObject::webScriptValueAtIndex(index, result); }
     71 
     72     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
     73         /* [in] */ unsigned int index,
     74         /* [in] */ VARIANT val) { return WebScriptObject::setWebScriptValueAtIndex(index, val); }
     75 
     76     virtual HRESULT STDMETHODCALLTYPE setException(
     77         /* [in] */ BSTR description) { return WebScriptObject::setException(description); }
     78 };
     79 
     80 class DECLSPEC_UUID("062AEEE3-9E42-44DC-A8A9-236B216FE011") DOMNode : public DOMObject, public IDOMNode, public IDOMEventTarget
     81 {
     82 protected:
     83     DOMNode(WebCore::Node* n);
     84     ~DOMNode();
     85 
     86 public:
     87     static IDOMNode* createInstance(WebCore::Node* n);
     88 
     89 public:
     90     // IUnknown
     91     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
     92     virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMObject::AddRef(); }
     93     virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMObject::Release(); }
     94 
     95     // IWebScriptObject
     96     virtual HRESULT STDMETHODCALLTYPE throwException(
     97         /* [in] */ BSTR exceptionMessage,
     98         /* [retval][out] */ BOOL *result) { return DOMObject::throwException(exceptionMessage, result); }
     99 
    100     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
    101         /* [in] */ BSTR name,
    102         /* [size_is][in] */ const VARIANT args[  ],
    103         /* [in] */ int cArgs,
    104         /* [retval][out] */ VARIANT *result) { return DOMObject::callWebScriptMethod(name, args, cArgs, result); }
    105 
    106     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
    107         /* [in] */ BSTR script,
    108         /* [retval][out] */ VARIANT *result) { return DOMObject::evaluateWebScript(script, result); }
    109 
    110     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
    111         /* [in] */ BSTR name) { return DOMObject::removeWebScriptKey(name); }
    112 
    113     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
    114         /* [retval][out] */ BSTR* stringRepresentation) { return DOMObject::stringRepresentation(stringRepresentation); }
    115 
    116     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
    117         /* [in] */ unsigned int index,
    118         /* [retval][out] */ VARIANT *result) { return DOMObject::webScriptValueAtIndex(index, result); }
    119 
    120     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
    121         /* [in] */ unsigned int index,
    122         /* [in] */ VARIANT val) { return DOMObject::setWebScriptValueAtIndex(index, val); }
    123 
    124     virtual HRESULT STDMETHODCALLTYPE setException(
    125         /* [in] */ BSTR description) { return DOMObject::setException(description); }
    126 
    127     // IDOMNode
    128     virtual HRESULT STDMETHODCALLTYPE nodeName(
    129         /* [retval][out] */ BSTR *result);
    130 
    131     virtual HRESULT STDMETHODCALLTYPE nodeValue(
    132         /* [retval][out] */ BSTR *result);
    133 
    134     virtual HRESULT STDMETHODCALLTYPE setNodeValue(
    135         /* [in] */ BSTR value);
    136 
    137     virtual HRESULT STDMETHODCALLTYPE nodeType(
    138         /* [retval][out] */ unsigned short *result);
    139 
    140     virtual HRESULT STDMETHODCALLTYPE parentNode(
    141         /* [retval][out] */ IDOMNode **result);
    142 
    143     virtual HRESULT STDMETHODCALLTYPE childNodes(
    144         /* [retval][out] */ IDOMNodeList **result);
    145 
    146     virtual HRESULT STDMETHODCALLTYPE firstChild(
    147         /* [retval][out] */ IDOMNode **result);
    148 
    149     virtual HRESULT STDMETHODCALLTYPE lastChild(
    150         /* [retval][out] */ IDOMNode **result);
    151 
    152     virtual HRESULT STDMETHODCALLTYPE previousSibling(
    153         /* [retval][out] */ IDOMNode **result);
    154 
    155     virtual HRESULT STDMETHODCALLTYPE nextSibling(
    156         /* [retval][out] */ IDOMNode **result);
    157 
    158     virtual HRESULT STDMETHODCALLTYPE attributes(
    159         /* [retval][out] */ IDOMNamedNodeMap **result);
    160 
    161     virtual HRESULT STDMETHODCALLTYPE ownerDocument(
    162         /* [retval][out] */ IDOMDocument **result);
    163 
    164     virtual HRESULT STDMETHODCALLTYPE insertBefore(
    165         /* [in] */ IDOMNode *newChild,
    166         /* [in] */ IDOMNode *refChild,
    167         /* [retval][out] */ IDOMNode **result);
    168 
    169     virtual HRESULT STDMETHODCALLTYPE replaceChild(
    170         /* [in] */ IDOMNode *newChild,
    171         /* [in] */ IDOMNode *oldChild,
    172         /* [retval][out] */ IDOMNode **result);
    173 
    174     virtual HRESULT STDMETHODCALLTYPE removeChild(
    175         /* [in] */ IDOMNode *oldChild,
    176         /* [retval][out] */ IDOMNode **result);
    177 
    178     virtual HRESULT STDMETHODCALLTYPE appendChild(
    179         /* [in] */ IDOMNode *oldChild,
    180         /* [retval][out] */ IDOMNode **result);
    181 
    182     virtual HRESULT STDMETHODCALLTYPE hasChildNodes(
    183         /* [retval][out] */ BOOL *result);
    184 
    185     virtual HRESULT STDMETHODCALLTYPE cloneNode(
    186         /* [in] */ BOOL deep,
    187         /* [retval][out] */ IDOMNode **result);
    188 
    189     virtual HRESULT STDMETHODCALLTYPE normalize( void);
    190 
    191     virtual HRESULT STDMETHODCALLTYPE isSupported(
    192         /* [in] */ BSTR feature,
    193         /* [in] */ BSTR version,
    194         /* [retval][out] */ BOOL *result);
    195 
    196     virtual HRESULT STDMETHODCALLTYPE namespaceURI(
    197         /* [retval][out] */ BSTR *result);
    198 
    199     virtual HRESULT STDMETHODCALLTYPE prefix(
    200         /* [retval][out] */ BSTR *result);
    201 
    202     virtual HRESULT STDMETHODCALLTYPE setPrefix(
    203         /* [in] */ BSTR prefix);
    204 
    205     virtual HRESULT STDMETHODCALLTYPE localName(
    206         /* [retval][out] */ BSTR *result);
    207 
    208     virtual HRESULT STDMETHODCALLTYPE hasAttributes(
    209         /* [retval][out] */ BOOL *result);
    210 
    211     virtual HRESULT STDMETHODCALLTYPE isSameNode(
    212         /* [in] */ IDOMNode* other,
    213         /* [retval][out] */ BOOL* result);
    214 
    215     virtual HRESULT STDMETHODCALLTYPE isEqualNode(
    216         /* [in] */ IDOMNode* other,
    217         /* [retval][out] */ BOOL* result);
    218 
    219     virtual HRESULT STDMETHODCALLTYPE textContent(
    220         /* [retval][out] */ BSTR* result);
    221 
    222     virtual HRESULT STDMETHODCALLTYPE setTextContent(
    223         /* [in] */ BSTR text);
    224 
    225     // IDOMEventTarget
    226     virtual HRESULT STDMETHODCALLTYPE addEventListener(
    227         /* [in] */ BSTR type,
    228         /* [in] */ IDOMEventListener *listener,
    229         /* [in] */ BOOL useCapture);
    230 
    231     virtual HRESULT STDMETHODCALLTYPE removeEventListener(
    232         /* [in] */ BSTR type,
    233         /* [in] */ IDOMEventListener *listener,
    234         /* [in] */ BOOL useCapture);
    235 
    236     virtual HRESULT STDMETHODCALLTYPE dispatchEvent(
    237         /* [in] */ IDOMEvent *evt,
    238         /* [retval][out] */ BOOL *result);
    239 
    240     // DOMNode
    241     WebCore::Node* node() const { return m_node; }
    242 
    243 protected:
    244     WebCore::Node* m_node;
    245 };
    246 
    247 class DOMNodeList : public DOMObject, public IDOMNodeList
    248 {
    249 protected:
    250     DOMNodeList(WebCore::NodeList* l);
    251     ~DOMNodeList();
    252 
    253 public:
    254     static IDOMNodeList* createInstance(WebCore::NodeList* l);
    255 
    256 public:
    257     // IUnknown
    258     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
    259     virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMObject::AddRef(); }
    260     virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMObject::Release(); }
    261 
    262     // IWebScriptObject
    263     virtual HRESULT STDMETHODCALLTYPE throwException(
    264         /* [in] */ BSTR exceptionMessage,
    265         /* [retval][out] */ BOOL *result) { return DOMObject::throwException(exceptionMessage, result); }
    266 
    267     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
    268         /* [in] */ BSTR name,
    269         /* [size_is][in] */ const VARIANT args[  ],
    270         /* [in] */ int cArgs,
    271         /* [retval][out] */ VARIANT *result) { return DOMObject::callWebScriptMethod(name, args, cArgs, result); }
    272 
    273     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
    274         /* [in] */ BSTR script,
    275         /* [retval][out] */ VARIANT *result) { return DOMObject::evaluateWebScript(script, result); }
    276 
    277     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
    278         /* [in] */ BSTR name) { return DOMObject::removeWebScriptKey(name); }
    279 
    280     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
    281         /* [retval][out] */ BSTR* stringRepresentation) { return DOMObject::stringRepresentation(stringRepresentation); }
    282 
    283     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
    284         /* [in] */ unsigned int index,
    285         /* [retval][out] */ VARIANT *result) { return DOMObject::webScriptValueAtIndex(index, result); }
    286 
    287     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
    288         /* [in] */ unsigned int index,
    289         /* [in] */ VARIANT val) { return DOMObject::setWebScriptValueAtIndex(index, val); }
    290 
    291     virtual HRESULT STDMETHODCALLTYPE setException(
    292         /* [in] */ BSTR description) { return DOMObject::setException(description); }
    293 
    294     // IDOMNodeList
    295     virtual HRESULT STDMETHODCALLTYPE item(
    296         /* [in] */ UINT index,
    297         /* [retval][out] */ IDOMNode **result);
    298 
    299     virtual HRESULT STDMETHODCALLTYPE length(
    300         /* [retval][out] */ UINT *result);
    301 
    302 protected:
    303     WebCore::NodeList* m_nodeList;
    304 };
    305 
    306 class DOMDocument : public DOMNode, public IDOMDocument, public IDOMViewCSS, public IDOMDocumentEvent
    307 {
    308 protected:
    309     DOMDocument(WebCore::Document* d);
    310     ~DOMDocument();
    311 
    312 public:
    313     static IDOMDocument* createInstance(WebCore::Document* d);
    314 
    315 public:
    316     // IUnknown
    317     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
    318     virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMNode::AddRef(); }
    319     virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMNode::Release(); }
    320 
    321     // IWebScriptObject
    322     virtual HRESULT STDMETHODCALLTYPE throwException(
    323         /* [in] */ BSTR exceptionMessage,
    324         /* [retval][out] */ BOOL *result) { return DOMNode::throwException(exceptionMessage, result); }
    325 
    326     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
    327         /* [in] */ BSTR name,
    328         /* [size_is][in] */ const VARIANT args[  ],
    329         /* [in] */ int cArgs,
    330         /* [retval][out] */ VARIANT *result) { return DOMNode::callWebScriptMethod(name, args, cArgs, result); }
    331 
    332     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
    333         /* [in] */ BSTR script,
    334         /* [retval][out] */ VARIANT *result) { return DOMNode::evaluateWebScript(script, result); }
    335 
    336     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
    337         /* [in] */ BSTR name) { return DOMNode::removeWebScriptKey(name); }
    338 
    339     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
    340         /* [retval][out] */ BSTR* stringRepresentation) { return DOMNode::stringRepresentation(stringRepresentation); }
    341 
    342     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
    343         /* [in] */ unsigned int index,
    344         /* [retval][out] */ VARIANT *result) { return DOMNode::webScriptValueAtIndex(index, result); }
    345 
    346     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
    347         /* [in] */ unsigned int index,
    348         /* [in] */ VARIANT val) { return DOMNode::setWebScriptValueAtIndex(index, val); }
    349 
    350     virtual HRESULT STDMETHODCALLTYPE setException(
    351         /* [in] */ BSTR description) { return DOMNode::setException(description); }
    352 
    353     // IDOMNode
    354     virtual HRESULT STDMETHODCALLTYPE nodeName(
    355         /* [retval][out] */ BSTR *result) { return DOMNode::nodeName(result); }
    356 
    357     virtual HRESULT STDMETHODCALLTYPE nodeValue(
    358         /* [retval][out] */ BSTR *result) { return DOMNode::nodeValue(result); }
    359 
    360     virtual HRESULT STDMETHODCALLTYPE setNodeValue(
    361         /* [in] */ BSTR value) { return DOMNode::setNodeValue(value); }
    362 
    363     virtual HRESULT STDMETHODCALLTYPE nodeType(
    364         /* [retval][out] */ unsigned short *result) { return DOMNode::nodeType(result); }
    365 
    366     virtual HRESULT STDMETHODCALLTYPE parentNode(
    367         /* [retval][out] */ IDOMNode **result) { return DOMNode::parentNode(result); }
    368 
    369     virtual HRESULT STDMETHODCALLTYPE childNodes(
    370         /* [retval][out] */ IDOMNodeList **result) { return DOMNode::childNodes(result); }
    371 
    372     virtual HRESULT STDMETHODCALLTYPE firstChild(
    373         /* [retval][out] */ IDOMNode **result) { return DOMNode::firstChild(result); }
    374 
    375     virtual HRESULT STDMETHODCALLTYPE lastChild(
    376         /* [retval][out] */ IDOMNode **result) { return DOMNode::lastChild(result); }
    377 
    378     virtual HRESULT STDMETHODCALLTYPE previousSibling(
    379         /* [retval][out] */ IDOMNode **result) { return DOMNode::previousSibling(result); }
    380 
    381     virtual HRESULT STDMETHODCALLTYPE nextSibling(
    382         /* [retval][out] */ IDOMNode **result) { return DOMNode::nextSibling(result); }
    383 
    384     virtual HRESULT STDMETHODCALLTYPE attributes(
    385         /* [retval][out] */ IDOMNamedNodeMap **result) { return DOMNode::attributes(result); }
    386 
    387     virtual HRESULT STDMETHODCALLTYPE ownerDocument(
    388         /* [retval][out] */ IDOMDocument **result) { return DOMNode::ownerDocument(result); }
    389 
    390     virtual HRESULT STDMETHODCALLTYPE insertBefore(
    391         /* [in] */ IDOMNode *newChild,
    392         /* [in] */ IDOMNode *refChild,
    393         /* [retval][out] */ IDOMNode **result) { return DOMNode::insertBefore(newChild, refChild, result); }
    394 
    395     virtual HRESULT STDMETHODCALLTYPE replaceChild(
    396         /* [in] */ IDOMNode *newChild,
    397         /* [in] */ IDOMNode *oldChild,
    398         /* [retval][out] */ IDOMNode **result) { return DOMNode::replaceChild(newChild, oldChild, result); }
    399 
    400     virtual HRESULT STDMETHODCALLTYPE removeChild(
    401         /* [in] */ IDOMNode *oldChild,
    402         /* [retval][out] */ IDOMNode **result) { return DOMNode::removeChild(oldChild, result); }
    403 
    404     virtual HRESULT STDMETHODCALLTYPE appendChild(
    405         /* [in] */ IDOMNode *oldChild,
    406         /* [retval][out] */ IDOMNode **result) { return DOMNode::appendChild(oldChild, result); }
    407 
    408     virtual HRESULT STDMETHODCALLTYPE hasChildNodes(
    409         /* [retval][out] */ BOOL *result) { return DOMNode::hasChildNodes(result); }
    410 
    411     virtual HRESULT STDMETHODCALLTYPE cloneNode(
    412         /* [in] */ BOOL deep,
    413         /* [retval][out] */ IDOMNode **result) { return DOMNode::cloneNode(deep, result); }
    414 
    415     virtual HRESULT STDMETHODCALLTYPE normalize( void) { return DOMNode::normalize(); }
    416 
    417     virtual HRESULT STDMETHODCALLTYPE isSupported(
    418         /* [in] */ BSTR feature,
    419         /* [in] */ BSTR version,
    420         /* [retval][out] */ BOOL *result) { return DOMNode::isSupported(feature, version, result); }
    421 
    422     virtual HRESULT STDMETHODCALLTYPE namespaceURI(
    423         /* [retval][out] */ BSTR *result) { return DOMNode::namespaceURI(result); }
    424 
    425     virtual HRESULT STDMETHODCALLTYPE prefix(
    426         /* [retval][out] */ BSTR *result) { return DOMNode::prefix(result); }
    427 
    428     virtual HRESULT STDMETHODCALLTYPE setPrefix(
    429         /* [in] */ BSTR prefix) { return DOMNode::setPrefix(prefix); }
    430 
    431     virtual HRESULT STDMETHODCALLTYPE localName(
    432         /* [retval][out] */ BSTR *result) { return DOMNode::localName(result); }
    433 
    434     virtual HRESULT STDMETHODCALLTYPE hasAttributes(
    435         /* [retval][out] */ BOOL *result) { return DOMNode::hasAttributes(result); }
    436 
    437     virtual HRESULT STDMETHODCALLTYPE isSameNode(
    438         /* [in] */ IDOMNode* other,
    439         /* [retval][out] */ BOOL* result) { return DOMNode::isSameNode(other, result); }
    440 
    441     virtual HRESULT STDMETHODCALLTYPE isEqualNode(
    442         /* [in] */ IDOMNode* other,
    443         /* [retval][out] */ BOOL* result) { return DOMNode::isEqualNode(other, result); }
    444 
    445     virtual HRESULT STDMETHODCALLTYPE textContent(
    446         /* [retval][out] */ BSTR* result) { return DOMNode::textContent(result); }
    447 
    448     virtual HRESULT STDMETHODCALLTYPE setTextContent(
    449         /* [in] */ BSTR text) { return DOMNode::setTextContent(text); }
    450 
    451     // IDOMDocument
    452     virtual HRESULT STDMETHODCALLTYPE doctype(
    453         /* [retval][out] */ IDOMDocumentType **result);
    454 
    455     virtual HRESULT STDMETHODCALLTYPE implementation(
    456         /* [retval][out] */ IDOMImplementation **result);
    457 
    458     virtual HRESULT STDMETHODCALLTYPE documentElement(
    459         /* [retval][out] */ IDOMElement **result);
    460 
    461     virtual HRESULT STDMETHODCALLTYPE createElement(
    462         /* [in] */ BSTR tagName,
    463         /* [retval][out] */ IDOMElement **result);
    464 
    465     virtual HRESULT STDMETHODCALLTYPE createDocumentFragment(
    466         /* [retval][out] */ IDOMDocumentFragment **result);
    467 
    468     virtual HRESULT STDMETHODCALLTYPE createTextNode(
    469         /* [in] */ BSTR data,
    470         /* [retval][out] */ IDOMText **result);
    471 
    472     virtual HRESULT STDMETHODCALLTYPE createComment(
    473         /* [in] */ BSTR data,
    474         /* [retval][out] */ IDOMComment **result);
    475 
    476     virtual HRESULT STDMETHODCALLTYPE createCDATASection(
    477         /* [in] */ BSTR data,
    478         /* [retval][out] */ IDOMCDATASection **result);
    479 
    480     virtual HRESULT STDMETHODCALLTYPE createProcessingInstruction(
    481         /* [in] */ BSTR target,
    482         /* [in] */ BSTR data,
    483         /* [retval][out] */ IDOMProcessingInstruction **result);
    484 
    485     virtual HRESULT STDMETHODCALLTYPE createAttribute(
    486         /* [in] */ BSTR name,
    487         /* [retval][out] */ IDOMAttr **result);
    488 
    489     virtual HRESULT STDMETHODCALLTYPE createEntityReference(
    490         /* [in] */ BSTR name,
    491         /* [retval][out] */ IDOMEntityReference **result);
    492 
    493     virtual HRESULT STDMETHODCALLTYPE getElementsByTagName(
    494         /* [in] */ BSTR tagName,
    495         /* [retval][out] */ IDOMNodeList **result);
    496 
    497     virtual HRESULT STDMETHODCALLTYPE importNode(
    498         /* [in] */ IDOMNode *importedNode,
    499         /* [in] */ BOOL deep,
    500         /* [retval][out] */ IDOMNode **result);
    501 
    502     virtual HRESULT STDMETHODCALLTYPE createElementNS(
    503         /* [in] */ BSTR namespaceURI,
    504         /* [in] */ BSTR qualifiedName,
    505         /* [retval][out] */ IDOMElement **result);
    506 
    507     virtual HRESULT STDMETHODCALLTYPE createAttributeNS(
    508         /* [in] */ BSTR namespaceURI,
    509         /* [in] */ BSTR qualifiedName,
    510         /* [retval][out] */ IDOMAttr **result);
    511 
    512     virtual HRESULT STDMETHODCALLTYPE getElementsByTagNameNS(
    513         /* [in] */ BSTR namespaceURI,
    514         /* [in] */ BSTR localName,
    515         /* [retval][out] */ IDOMNodeList **result);
    516 
    517     virtual HRESULT STDMETHODCALLTYPE getElementById(
    518         /* [in] */ BSTR elementId,
    519         /* [retval][out] */ IDOMElement **result);
    520 
    521     // IDOMViewCSS
    522     virtual HRESULT STDMETHODCALLTYPE getComputedStyle(
    523         /* [in] */ IDOMElement *elt,
    524         /* [in] */ BSTR pseudoElt,
    525         /* [retval][out] */ IDOMCSSStyleDeclaration **result);
    526 
    527     // IDOMDocumentEvent
    528     virtual HRESULT STDMETHODCALLTYPE createEvent(
    529         /* [in] */ BSTR eventType,
    530         /* [retval][out] */ IDOMEvent **result);
    531 
    532     // DOMDocument
    533     WebCore::Document* document() { return m_document; }
    534 
    535 protected:
    536     WebCore::Document* m_document;
    537 };
    538 
    539 class DOMElement : public DOMNode, public IDOMElement, public IDOMElementPrivate, public IDOMNodeExtensions, public IDOMElementCSSInlineStyle, public IDOMElementExtensions
    540 {
    541 protected:
    542     DOMElement(WebCore::Element* e);
    543     ~DOMElement();
    544 
    545 public:
    546     static IDOMElement* createInstance(WebCore::Element* e);
    547 
    548     // IUnknown
    549     virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
    550     virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMNode::AddRef(); }
    551     virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMNode::Release(); }
    552 
    553     // IWebScriptObject
    554     virtual HRESULT STDMETHODCALLTYPE throwException(
    555         /* [in] */ BSTR exceptionMessage,
    556         /* [retval][out] */ BOOL *result) { return DOMNode::throwException(exceptionMessage, result); }
    557 
    558     virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
    559         /* [in] */ BSTR name,
    560         /* [size_is][in] */ const VARIANT args[  ],
    561         /* [in] */ int cArgs,
    562         /* [retval][out] */ VARIANT *result) { return DOMNode::callWebScriptMethod(name, args, cArgs, result); }
    563 
    564     virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
    565         /* [in] */ BSTR script,
    566         /* [retval][out] */ VARIANT *result) { return DOMNode::evaluateWebScript(script, result); }
    567 
    568     virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
    569         /* [in] */ BSTR name) { return DOMNode::removeWebScriptKey(name); }
    570 
    571     virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
    572         /* [retval][out] */ BSTR* stringRepresentation) { return DOMNode::stringRepresentation(stringRepresentation); }
    573 
    574     virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
    575         /* [in] */ unsigned int index,
    576         /* [retval][out] */ VARIANT *result) { return DOMNode::webScriptValueAtIndex(index, result); }
    577 
    578     virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
    579         /* [in] */ unsigned int index,
    580         /* [in] */ VARIANT val) { return DOMNode::setWebScriptValueAtIndex(index, val); }
    581 
    582     virtual HRESULT STDMETHODCALLTYPE setException(
    583         /* [in] */ BSTR description) { return DOMNode::setException(description); }
    584 
    585     // IDOMNode
    586     virtual HRESULT STDMETHODCALLTYPE nodeName(
    587         /* [retval][out] */ BSTR *result) { return DOMNode::nodeName(result); }
    588 
    589     virtual HRESULT STDMETHODCALLTYPE nodeValue(
    590         /* [retval][out] */ BSTR *result) { return DOMNode::nodeValue(result); }
    591 
    592     virtual HRESULT STDMETHODCALLTYPE setNodeValue(
    593         /* [in] */ BSTR value) { return DOMNode::setNodeValue(value); }
    594 
    595     virtual HRESULT STDMETHODCALLTYPE nodeType(
    596         /* [retval][out] */ unsigned short *result) { return DOMNode::nodeType(result); }
    597 
    598     virtual HRESULT STDMETHODCALLTYPE parentNode(
    599         /* [retval][out] */ IDOMNode **result) { return DOMNode::parentNode(result); }
    600 
    601     virtual HRESULT STDMETHODCALLTYPE childNodes(
    602         /* [retval][out] */ IDOMNodeList **result) { return DOMNode::childNodes(result); }
    603 
    604     virtual HRESULT STDMETHODCALLTYPE firstChild(
    605         /* [retval][out] */ IDOMNode **result) { return DOMNode::firstChild(result); }
    606 
    607     virtual HRESULT STDMETHODCALLTYPE lastChild(
    608         /* [retval][out] */ IDOMNode **result) { return DOMNode::lastChild(result); }
    609 
    610     virtual HRESULT STDMETHODCALLTYPE previousSibling(
    611         /* [retval][out] */ IDOMNode **result) { return DOMNode::previousSibling(result); }
    612 
    613     virtual HRESULT STDMETHODCALLTYPE nextSibling(
    614         /* [retval][out] */ IDOMNode **result) { return DOMNode::nextSibling(result); }
    615 
    616     virtual HRESULT STDMETHODCALLTYPE attributes(
    617         /* [retval][out] */ IDOMNamedNodeMap **result) { return DOMNode::attributes(result); }
    618 
    619     virtual HRESULT STDMETHODCALLTYPE ownerDocument(
    620         /* [retval][out] */ IDOMDocument **result) { return DOMNode::ownerDocument(result); }
    621 
    622     virtual HRESULT STDMETHODCALLTYPE insertBefore(
    623         /* [in] */ IDOMNode *newChild,
    624         /* [in] */ IDOMNode *refChild,
    625         /* [retval][out] */ IDOMNode **result) { return DOMNode::insertBefore(newChild, refChild, result); }
    626 
    627     virtual HRESULT STDMETHODCALLTYPE replaceChild(
    628         /* [in] */ IDOMNode *newChild,
    629         /* [in] */ IDOMNode *oldChild,
    630         /* [retval][out] */ IDOMNode **result) { return DOMNode::replaceChild(newChild, oldChild, result); }
    631 
    632     virtual HRESULT STDMETHODCALLTYPE removeChild(
    633         /* [in] */ IDOMNode *oldChild,
    634         /* [retval][out] */ IDOMNode **result) { return DOMNode::removeChild(oldChild, result); }
    635 
    636     virtual HRESULT STDMETHODCALLTYPE appendChild(
    637         /* [in] */ IDOMNode *oldChild,
    638         /* [retval][out] */ IDOMNode **result) { return DOMNode::appendChild(oldChild, result); }
    639 
    640     virtual HRESULT STDMETHODCALLTYPE hasChildNodes(
    641         /* [retval][out] */ BOOL *result) { return DOMNode::hasChildNodes(result); }
    642 
    643     virtual HRESULT STDMETHODCALLTYPE cloneNode(
    644         /* [in] */ BOOL deep,
    645         /* [retval][out] */ IDOMNode **result) { return DOMNode::cloneNode(deep, result); }
    646 
    647     virtual HRESULT STDMETHODCALLTYPE normalize( void) { return DOMNode::normalize(); }
    648 
    649     virtual HRESULT STDMETHODCALLTYPE isSupported(
    650         /* [in] */ BSTR feature,
    651         /* [in] */ BSTR version,
    652         /* [retval][out] */ BOOL *result) { return DOMNode::isSupported(feature, version, result); }
    653 
    654     virtual HRESULT STDMETHODCALLTYPE namespaceURI(
    655         /* [retval][out] */ BSTR *result) { return DOMNode::namespaceURI(result); }
    656 
    657     virtual HRESULT STDMETHODCALLTYPE prefix(
    658         /* [retval][out] */ BSTR *result) { return DOMNode::prefix(result); }
    659 
    660     virtual HRESULT STDMETHODCALLTYPE setPrefix(
    661         /* [in] */ BSTR prefix) { return DOMNode::setPrefix(prefix); }
    662 
    663     virtual HRESULT STDMETHODCALLTYPE localName(
    664         /* [retval][out] */ BSTR *result) { return DOMNode::localName(result); }
    665 
    666     virtual HRESULT STDMETHODCALLTYPE hasAttributes(
    667         /* [retval][out] */ BOOL *result) { return DOMNode::hasAttributes(result); }
    668 
    669     virtual HRESULT STDMETHODCALLTYPE isSameNode(
    670         /* [in] */ IDOMNode* other,
    671         /* [retval][out] */ BOOL* result) { return DOMNode::isSameNode(other, result); }
    672 
    673     virtual HRESULT STDMETHODCALLTYPE isEqualNode(
    674         /* [in] */ IDOMNode* other,
    675         /* [retval][out] */ BOOL* result) { return DOMNode::isEqualNode(other, result); }
    676 
    677     virtual HRESULT STDMETHODCALLTYPE textContent(
    678         /* [retval][out] */ BSTR* result) { return DOMNode::textContent(result); }
    679 
    680     virtual HRESULT STDMETHODCALLTYPE setTextContent(
    681         /* [in] */ BSTR text) { return DOMNode::setTextContent(text); }
    682 
    683     // IDOMElement
    684     virtual HRESULT STDMETHODCALLTYPE tagName(
    685         /* [retval][out] */ BSTR *result);
    686 
    687     virtual HRESULT STDMETHODCALLTYPE getAttribute(
    688         /* [in] */ BSTR name,
    689         /* [retval][out] */ BSTR *result);
    690 
    691     virtual HRESULT STDMETHODCALLTYPE setAttribute(
    692         /* [in] */ BSTR name,
    693         /* [in] */ BSTR value);
    694 
    695     virtual HRESULT STDMETHODCALLTYPE removeAttribute(
    696         /* [in] */ BSTR name);
    697 
    698     virtual HRESULT STDMETHODCALLTYPE getAttributeNode(
    699         /* [in] */ BSTR name,
    700         /* [retval][out] */ IDOMAttr **result);
    701 
    702     virtual HRESULT STDMETHODCALLTYPE setAttributeNode(
    703         /* [in] */ IDOMAttr *newAttr,
    704         /* [retval][out] */ IDOMAttr **result);
    705 
    706     virtual HRESULT STDMETHODCALLTYPE removeAttributeNode(
    707         /* [in] */ IDOMAttr *oldAttr,
    708         /* [retval][out] */ IDOMAttr **result);
    709 
    710     virtual HRESULT STDMETHODCALLTYPE getElementsByTagName(
    711         /* [in] */ BSTR name,
    712         /* [retval][out] */ IDOMNodeList **result);
    713 
    714     virtual HRESULT STDMETHODCALLTYPE getAttributeNS(
    715         /* [in] */ BSTR namespaceURI,
    716         /* [in] */ BSTR localName,
    717         /* [retval][out] */ BSTR *result);
    718 
    719     virtual HRESULT STDMETHODCALLTYPE setAttributeNS(
    720         /* [in] */ BSTR namespaceURI,
    721         /* [in] */ BSTR qualifiedName,
    722         /* [in] */ BSTR value);
    723 
    724     virtual HRESULT STDMETHODCALLTYPE removeAttributeNS(
    725         /* [in] */ BSTR namespaceURI,
    726         /* [in] */ BSTR localName);
    727 
    728     virtual HRESULT STDMETHODCALLTYPE getAttributeNodeNS(
    729         /* [in] */ BSTR namespaceURI,
    730         /* [in] */ BSTR localName,
    731         /* [retval][out] */ IDOMAttr **result);
    732 
    733     virtual HRESULT STDMETHODCALLTYPE setAttributeNodeNS(
    734         /* [in] */ IDOMAttr *newAttr,
    735         /* [retval][out] */ IDOMAttr **result);
    736 
    737     virtual HRESULT STDMETHODCALLTYPE getElementsByTagNameNS(
    738         /* [in] */ BSTR namespaceURI,
    739         /* [in] */ BSTR localName,
    740         /* [retval][out] */ IDOMNodeList **result);
    741 
    742     virtual HRESULT STDMETHODCALLTYPE hasAttribute(
    743         /* [in] */ BSTR name,
    744         /* [retval][out] */ BOOL *result);
    745 
    746     virtual HRESULT STDMETHODCALLTYPE hasAttributeNS(
    747         /* [in] */ BSTR namespaceURI,
    748         /* [in] */ BSTR localName,
    749         /* [retval][out] */ BOOL *result);
    750 
    751     virtual HRESULT STDMETHODCALLTYPE focus( void);
    752 
    753     virtual HRESULT STDMETHODCALLTYPE blur( void);
    754 
    755     // IDOMNodeExtensions
    756     virtual HRESULT STDMETHODCALLTYPE boundingBox(
    757         /* [retval][out] */ LPRECT rect);
    758 
    759     virtual HRESULT STDMETHODCALLTYPE lineBoxRects(
    760         /* [size_is][in] */ RECT* rects,
    761         /* [in] */ int cRects);
    762 
    763     // IDOMElementPrivate
    764     virtual HRESULT STDMETHODCALLTYPE coreElement(
    765         void** element);
    766 
    767     virtual HRESULT STDMETHODCALLTYPE isEqual(
    768         /* [in] */ IDOMElement *other,
    769         /* [retval][out] */ BOOL *result);
    770 
    771     virtual HRESULT STDMETHODCALLTYPE isFocused(
    772         /* [retval][out] */ BOOL *result);
    773 
    774     virtual HRESULT STDMETHODCALLTYPE innerText(
    775         /* [retval][out] */ BSTR* result);
    776 
    777     virtual HRESULT STDMETHODCALLTYPE font(
    778         WebFontDescription* webFontDescription);
    779 
    780     virtual HRESULT STDMETHODCALLTYPE renderedImage(
    781         /* [retval][out] */ HBITMAP* image);
    782 
    783     // IDOMElementCSSInlineStyle
    784     virtual HRESULT STDMETHODCALLTYPE style(
    785         /* [retval][out] */ IDOMCSSStyleDeclaration **result);
    786 
    787     // IDOMElementExtensions
    788     virtual HRESULT STDMETHODCALLTYPE offsetLeft(
    789         /* [retval][out] */ int *result);
    790 
    791     virtual HRESULT STDMETHODCALLTYPE offsetTop(
    792         /* [retval][out] */ int *result);
    793 
    794     virtual HRESULT STDMETHODCALLTYPE offsetWidth(
    795         /* [retval][out] */ int *result);
    796 
    797     virtual HRESULT STDMETHODCALLTYPE offsetHeight(
    798         /* [retval][out] */ int *result);
    799 
    800     virtual HRESULT STDMETHODCALLTYPE offsetParent(
    801         /* [retval][out] */ IDOMElement **result);
    802 
    803     virtual HRESULT STDMETHODCALLTYPE clientWidth(
    804         /* [retval][out] */ int *result);
    805 
    806     virtual HRESULT STDMETHODCALLTYPE clientHeight(
    807         /* [retval][out] */ int *result);
    808 
    809     virtual HRESULT STDMETHODCALLTYPE scrollLeft(
    810         /* [retval][out] */ int *result);
    811 
    812     virtual HRESULT STDMETHODCALLTYPE setScrollLeft(
    813         /* [in] */ int newScrollLeft);
    814 
    815     virtual HRESULT STDMETHODCALLTYPE scrollTop(
    816         /* [retval][out] */ int *result);
    817 
    818     virtual HRESULT STDMETHODCALLTYPE setScrollTop(
    819         /* [in] */ int newScrollTop);
    820 
    821     virtual HRESULT STDMETHODCALLTYPE scrollWidth(
    822         /* [retval][out] */ int *result);
    823 
    824     virtual HRESULT STDMETHODCALLTYPE scrollHeight(
    825         /* [retval][out] */ int *result);
    826 
    827     virtual HRESULT STDMETHODCALLTYPE scrollIntoView(
    828         /* [in] */ BOOL alignWithTop);
    829 
    830     virtual HRESULT STDMETHODCALLTYPE scrollIntoViewIfNeeded(
    831         /* [in] */ BOOL centerIfNeeded);
    832 
    833     // DOMElement
    834     WebCore::Element* element() { return m_element; }
    835 
    836 protected:
    837     WebCore::Element* m_element;
    838 };
    839 
    840 #endif
    841