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