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 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 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
32namespace WebCore {
33class Element;
34class Document;
35class DOMWindow;
36class Node;
37class NodeList;
38}
39
40
41class DOMObject : public WebScriptObject, public IDOMObject {
42public:
43    // IUnknown
44    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
45    virtual ULONG STDMETHODCALLTYPE AddRef(void) { return WebScriptObject::AddRef(); }
46    virtual ULONG STDMETHODCALLTYPE Release(void) { return WebScriptObject::Release(); }
47
48    // IWebScriptObject
49    virtual HRESULT STDMETHODCALLTYPE throwException(
50        /* [in] */ BSTR exceptionMessage,
51        /* [retval][out] */ BOOL* result) { return WebScriptObject::throwException(exceptionMessage, result); }
52
53    virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
54        /* [in] */ BSTR name,
55        /* [size_is][in] */ const VARIANT args[  ],
56        /* [in] */ int cArgs,
57        /* [retval][out] */ VARIANT* result) { return WebScriptObject::callWebScriptMethod(name, args, cArgs, result); }
58
59    virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
60        /* [in] */ BSTR script,
61        /* [retval][out] */ VARIANT* result) { return WebScriptObject::evaluateWebScript(script, result); }
62
63    virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
64        /* [in] */ BSTR name) { return WebScriptObject::removeWebScriptKey(name); }
65
66    virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
67        /* [retval][out] */ BSTR* stringRepresentation) { return WebScriptObject::stringRepresentation(stringRepresentation); }
68
69    virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
70        /* [in] */ unsigned int index,
71        /* [retval][out] */ VARIANT* result) { return WebScriptObject::webScriptValueAtIndex(index, result); }
72
73    virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
74        /* [in] */ unsigned int index,
75        /* [in] */ VARIANT val) { return WebScriptObject::setWebScriptValueAtIndex(index, val); }
76
77    virtual HRESULT STDMETHODCALLTYPE setException(
78        /* [in] */ BSTR description) { return WebScriptObject::setException(description); }
79};
80
81class DECLSPEC_UUID("062AEEE3-9E42-44DC-A8A9-236B216FE011") DOMNode : public DOMObject, public IDOMNode, public IDOMEventTarget {
82protected:
83    DOMNode(WebCore::Node* n);
84    ~DOMNode();
85
86public:
87    static IDOMNode* createInstance(WebCore::Node* n);
88
89public:
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
243protected:
244    WebCore::Node* m_node;
245};
246
247class DOMNodeList : public DOMObject, public IDOMNodeList {
248protected:
249    DOMNodeList(WebCore::NodeList* l);
250    ~DOMNodeList();
251
252public:
253    static IDOMNodeList* createInstance(WebCore::NodeList* l);
254
255public:
256    // IUnknown
257    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
258    virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMObject::AddRef(); }
259    virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMObject::Release(); }
260
261    // IWebScriptObject
262    virtual HRESULT STDMETHODCALLTYPE throwException(
263        /* [in] */ BSTR exceptionMessage,
264        /* [retval][out] */ BOOL* result) { return DOMObject::throwException(exceptionMessage, result); }
265
266    virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
267        /* [in] */ BSTR name,
268        /* [size_is][in] */ const VARIANT args[  ],
269        /* [in] */ int cArgs,
270        /* [retval][out] */ VARIANT* result) { return DOMObject::callWebScriptMethod(name, args, cArgs, result); }
271
272    virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
273        /* [in] */ BSTR script,
274        /* [retval][out] */ VARIANT* result) { return DOMObject::evaluateWebScript(script, result); }
275
276    virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
277        /* [in] */ BSTR name) { return DOMObject::removeWebScriptKey(name); }
278
279    virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
280        /* [retval][out] */ BSTR* stringRepresentation) { return DOMObject::stringRepresentation(stringRepresentation); }
281
282    virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
283        /* [in] */ unsigned int index,
284        /* [retval][out] */ VARIANT* result) { return DOMObject::webScriptValueAtIndex(index, result); }
285
286    virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
287        /* [in] */ unsigned int index,
288        /* [in] */ VARIANT val) { return DOMObject::setWebScriptValueAtIndex(index, val); }
289
290    virtual HRESULT STDMETHODCALLTYPE setException(
291        /* [in] */ BSTR description) { return DOMObject::setException(description); }
292
293    // IDOMNodeList
294    virtual HRESULT STDMETHODCALLTYPE item(
295        /* [in] */ UINT index,
296        /* [retval][out] */ IDOMNode** result);
297
298    virtual HRESULT STDMETHODCALLTYPE length(
299        /* [retval][out] */ UINT* result);
300
301protected:
302    WebCore::NodeList* m_nodeList;
303};
304
305class DOMDocument : public DOMNode, public IDOMDocument, public IDOMViewCSS, public IDOMDocumentEvent {
306protected:
307    DOMDocument(WebCore::Document* d);
308    ~DOMDocument();
309
310public:
311    static IDOMDocument* createInstance(WebCore::Document* d);
312
313public:
314    // IUnknown
315    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
316    virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMNode::AddRef(); }
317    virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMNode::Release(); }
318
319    // IWebScriptObject
320    virtual HRESULT STDMETHODCALLTYPE throwException(
321        /* [in] */ BSTR exceptionMessage,
322        /* [retval][out] */ BOOL* result) { return DOMNode::throwException(exceptionMessage, result); }
323
324    virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
325        /* [in] */ BSTR name,
326        /* [size_is][in] */ const VARIANT args[  ],
327        /* [in] */ int cArgs,
328        /* [retval][out] */ VARIANT* result) { return DOMNode::callWebScriptMethod(name, args, cArgs, result); }
329
330    virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
331        /* [in] */ BSTR script,
332        /* [retval][out] */ VARIANT* result) { return DOMNode::evaluateWebScript(script, result); }
333
334    virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
335        /* [in] */ BSTR name) { return DOMNode::removeWebScriptKey(name); }
336
337    virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
338        /* [retval][out] */ BSTR* stringRepresentation) { return DOMNode::stringRepresentation(stringRepresentation); }
339
340    virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
341        /* [in] */ unsigned int index,
342        /* [retval][out] */ VARIANT* result) { return DOMNode::webScriptValueAtIndex(index, result); }
343
344    virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
345        /* [in] */ unsigned int index,
346        /* [in] */ VARIANT val) { return DOMNode::setWebScriptValueAtIndex(index, val); }
347
348    virtual HRESULT STDMETHODCALLTYPE setException(
349        /* [in] */ BSTR description) { return DOMNode::setException(description); }
350
351    // IDOMNode
352    virtual HRESULT STDMETHODCALLTYPE nodeName(
353        /* [retval][out] */ BSTR* result) { return DOMNode::nodeName(result); }
354
355    virtual HRESULT STDMETHODCALLTYPE nodeValue(
356        /* [retval][out] */ BSTR* result) { return DOMNode::nodeValue(result); }
357
358    virtual HRESULT STDMETHODCALLTYPE setNodeValue(
359        /* [in] */ BSTR value) { return DOMNode::setNodeValue(value); }
360
361    virtual HRESULT STDMETHODCALLTYPE nodeType(
362        /* [retval][out] */ unsigned short* result) { return DOMNode::nodeType(result); }
363
364    virtual HRESULT STDMETHODCALLTYPE parentNode(
365        /* [retval][out] */ IDOMNode** result) { return DOMNode::parentNode(result); }
366
367    virtual HRESULT STDMETHODCALLTYPE childNodes(
368        /* [retval][out] */ IDOMNodeList** result) { return DOMNode::childNodes(result); }
369
370    virtual HRESULT STDMETHODCALLTYPE firstChild(
371        /* [retval][out] */ IDOMNode** result) { return DOMNode::firstChild(result); }
372
373    virtual HRESULT STDMETHODCALLTYPE lastChild(
374        /* [retval][out] */ IDOMNode** result) { return DOMNode::lastChild(result); }
375
376    virtual HRESULT STDMETHODCALLTYPE previousSibling(
377        /* [retval][out] */ IDOMNode** result) { return DOMNode::previousSibling(result); }
378
379    virtual HRESULT STDMETHODCALLTYPE nextSibling(
380        /* [retval][out] */ IDOMNode** result) { return DOMNode::nextSibling(result); }
381
382    virtual HRESULT STDMETHODCALLTYPE attributes(
383        /* [retval][out] */ IDOMNamedNodeMap** result) { return DOMNode::attributes(result); }
384
385    virtual HRESULT STDMETHODCALLTYPE ownerDocument(
386        /* [retval][out] */ IDOMDocument** result) { return DOMNode::ownerDocument(result); }
387
388    virtual HRESULT STDMETHODCALLTYPE insertBefore(
389        /* [in] */ IDOMNode* newChild,
390        /* [in] */ IDOMNode* refChild,
391        /* [retval][out] */ IDOMNode** result) { return DOMNode::insertBefore(newChild, refChild, result); }
392
393    virtual HRESULT STDMETHODCALLTYPE replaceChild(
394        /* [in] */ IDOMNode* newChild,
395        /* [in] */ IDOMNode* oldChild,
396        /* [retval][out] */ IDOMNode** result) { return DOMNode::replaceChild(newChild, oldChild, result); }
397
398    virtual HRESULT STDMETHODCALLTYPE removeChild(
399        /* [in] */ IDOMNode* oldChild,
400        /* [retval][out] */ IDOMNode** result) { return DOMNode::removeChild(oldChild, result); }
401
402    virtual HRESULT STDMETHODCALLTYPE appendChild(
403        /* [in] */ IDOMNode* oldChild,
404        /* [retval][out] */ IDOMNode** result) { return DOMNode::appendChild(oldChild, result); }
405
406    virtual HRESULT STDMETHODCALLTYPE hasChildNodes(
407        /* [retval][out] */ BOOL* result) { return DOMNode::hasChildNodes(result); }
408
409    virtual HRESULT STDMETHODCALLTYPE cloneNode(
410        /* [in] */ BOOL deep,
411        /* [retval][out] */ IDOMNode** result) { return DOMNode::cloneNode(deep, result); }
412
413    virtual HRESULT STDMETHODCALLTYPE normalize( void) { return DOMNode::normalize(); }
414
415    virtual HRESULT STDMETHODCALLTYPE isSupported(
416        /* [in] */ BSTR feature,
417        /* [in] */ BSTR version,
418        /* [retval][out] */ BOOL* result) { return DOMNode::isSupported(feature, version, result); }
419
420    virtual HRESULT STDMETHODCALLTYPE namespaceURI(
421        /* [retval][out] */ BSTR* result) { return DOMNode::namespaceURI(result); }
422
423    virtual HRESULT STDMETHODCALLTYPE prefix(
424        /* [retval][out] */ BSTR* result) { return DOMNode::prefix(result); }
425
426    virtual HRESULT STDMETHODCALLTYPE setPrefix(
427        /* [in] */ BSTR prefix) { return DOMNode::setPrefix(prefix); }
428
429    virtual HRESULT STDMETHODCALLTYPE localName(
430        /* [retval][out] */ BSTR* result) { return DOMNode::localName(result); }
431
432    virtual HRESULT STDMETHODCALLTYPE hasAttributes(
433        /* [retval][out] */ BOOL* result) { return DOMNode::hasAttributes(result); }
434
435    virtual HRESULT STDMETHODCALLTYPE isSameNode(
436        /* [in] */ IDOMNode* other,
437        /* [retval][out] */ BOOL* result) { return DOMNode::isSameNode(other, result); }
438
439    virtual HRESULT STDMETHODCALLTYPE isEqualNode(
440        /* [in] */ IDOMNode* other,
441        /* [retval][out] */ BOOL* result) { return DOMNode::isEqualNode(other, result); }
442
443    virtual HRESULT STDMETHODCALLTYPE textContent(
444        /* [retval][out] */ BSTR* result) { return DOMNode::textContent(result); }
445
446    virtual HRESULT STDMETHODCALLTYPE setTextContent(
447        /* [in] */ BSTR text) { return DOMNode::setTextContent(text); }
448
449    // IDOMDocument
450    virtual HRESULT STDMETHODCALLTYPE doctype(
451        /* [retval][out] */ IDOMDocumentType** result);
452
453    virtual HRESULT STDMETHODCALLTYPE implementation(
454        /* [retval][out] */ IDOMImplementation** result);
455
456    virtual HRESULT STDMETHODCALLTYPE documentElement(
457        /* [retval][out] */ IDOMElement** result);
458
459    virtual HRESULT STDMETHODCALLTYPE createElement(
460        /* [in] */ BSTR tagName,
461        /* [retval][out] */ IDOMElement** result);
462
463    virtual HRESULT STDMETHODCALLTYPE createDocumentFragment(
464        /* [retval][out] */ IDOMDocumentFragment** result);
465
466    virtual HRESULT STDMETHODCALLTYPE createTextNode(
467        /* [in] */ BSTR data,
468        /* [retval][out] */ IDOMText** result);
469
470    virtual HRESULT STDMETHODCALLTYPE createComment(
471        /* [in] */ BSTR data,
472        /* [retval][out] */ IDOMComment** result);
473
474    virtual HRESULT STDMETHODCALLTYPE createCDATASection(
475        /* [in] */ BSTR data,
476        /* [retval][out] */ IDOMCDATASection** result);
477
478    virtual HRESULT STDMETHODCALLTYPE createProcessingInstruction(
479        /* [in] */ BSTR target,
480        /* [in] */ BSTR data,
481        /* [retval][out] */ IDOMProcessingInstruction** result);
482
483    virtual HRESULT STDMETHODCALLTYPE createAttribute(
484        /* [in] */ BSTR name,
485        /* [retval][out] */ IDOMAttr** result);
486
487    virtual HRESULT STDMETHODCALLTYPE createEntityReference(
488        /* [in] */ BSTR name,
489        /* [retval][out] */ IDOMEntityReference** result);
490
491    virtual HRESULT STDMETHODCALLTYPE getElementsByTagName(
492        /* [in] */ BSTR tagName,
493        /* [retval][out] */ IDOMNodeList** result);
494
495    virtual HRESULT STDMETHODCALLTYPE importNode(
496        /* [in] */ IDOMNode* importedNode,
497        /* [in] */ BOOL deep,
498        /* [retval][out] */ IDOMNode** result);
499
500    virtual HRESULT STDMETHODCALLTYPE createElementNS(
501        /* [in] */ BSTR namespaceURI,
502        /* [in] */ BSTR qualifiedName,
503        /* [retval][out] */ IDOMElement** result);
504
505    virtual HRESULT STDMETHODCALLTYPE createAttributeNS(
506        /* [in] */ BSTR namespaceURI,
507        /* [in] */ BSTR qualifiedName,
508        /* [retval][out] */ IDOMAttr** result);
509
510    virtual HRESULT STDMETHODCALLTYPE getElementsByTagNameNS(
511        /* [in] */ BSTR namespaceURI,
512        /* [in] */ BSTR localName,
513        /* [retval][out] */ IDOMNodeList** result);
514
515    virtual HRESULT STDMETHODCALLTYPE getElementById(
516        /* [in] */ BSTR elementId,
517        /* [retval][out] */ IDOMElement** result);
518
519    // IDOMViewCSS
520    virtual HRESULT STDMETHODCALLTYPE getComputedStyle(
521        /* [in] */ IDOMElement* elt,
522        /* [in] */ BSTR pseudoElt,
523        /* [retval][out] */ IDOMCSSStyleDeclaration** result);
524
525    // IDOMDocumentEvent
526    virtual HRESULT STDMETHODCALLTYPE createEvent(
527        /* [in] */ BSTR eventType,
528        /* [retval][out] */ IDOMEvent** result);
529
530    // DOMDocument
531    WebCore::Document* document() { return m_document; }
532
533protected:
534    WebCore::Document* m_document;
535};
536
537class DOMWindow : public DOMObject, public IDOMWindow, public IDOMEventTarget {
538protected:
539    DOMWindow(WebCore::DOMWindow*);
540    ~DOMWindow();
541
542public:
543    static IDOMWindow* createInstance(WebCore::DOMWindow*);
544
545public:
546    // IUnknown
547    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
548    virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMObject::AddRef(); }
549    virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMObject::Release(); }
550
551    // IWebScriptObject
552    virtual HRESULT STDMETHODCALLTYPE throwException(
553        /* [in] */ BSTR exceptionMessage,
554        /* [retval][out] */ BOOL* result) { return DOMObject::throwException(exceptionMessage, result); }
555
556    virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
557        /* [in] */ BSTR name,
558        /* [size_is][in] */ const VARIANT args[  ],
559        /* [in] */ int cArgs,
560        /* [retval][out] */ VARIANT* result) { return DOMObject::callWebScriptMethod(name, args, cArgs, result); }
561
562    virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
563        /* [in] */ BSTR script,
564        /* [retval][out] */ VARIANT* result) { return DOMObject::evaluateWebScript(script, result); }
565
566    virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
567        /* [in] */ BSTR name) { return DOMObject::removeWebScriptKey(name); }
568
569    virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
570        /* [retval][out] */ BSTR* stringRepresentation) { return DOMObject::stringRepresentation(stringRepresentation); }
571
572    virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
573        /* [in] */ unsigned int index,
574        /* [retval][out] */ VARIANT* result) { return DOMObject::webScriptValueAtIndex(index, result); }
575
576    virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
577        /* [in] */ unsigned int index,
578        /* [in] */ VARIANT val) { return DOMObject::setWebScriptValueAtIndex(index, val); }
579
580    virtual HRESULT STDMETHODCALLTYPE setException(
581        /* [in] */ BSTR description) { return DOMObject::setException(description); }
582
583    virtual HRESULT STDMETHODCALLTYPE document(
584        /* [out, retval] */ IDOMDocument**);
585
586    virtual HRESULT STDMETHODCALLTYPE getComputedStyle(
587        /* [in] */ IDOMElement*,
588        /* [in] */ BSTR);
589
590    virtual HRESULT STDMETHODCALLTYPE getMatchedCSSRules(
591        /* [in] */ IDOMElement*,
592        /* [in] */ BSTR,
593        /* [in] */ BOOL,
594        /* [out, retval] */ IDOMCSSRuleList**);
595
596    virtual HRESULT STDMETHODCALLTYPE devicePixelRatio(
597        /* [out, retval] */ double*);
598
599    virtual HRESULT STDMETHODCALLTYPE addEventListener(
600        /* [in] */ BSTR,
601        /* [in] */ IDOMEventListener *,
602        /* [in] */ BOOL);
603
604    virtual HRESULT STDMETHODCALLTYPE removeEventListener(
605        /* [in] */ BSTR,
606        /* [in] */ IDOMEventListener *,
607        /* [in] */ BOOL);
608
609    virtual HRESULT STDMETHODCALLTYPE dispatchEvent(
610        /* [in] */ IDOMEvent *,
611        /* [retval][out] */ BOOL *);
612
613    // DOMWindow
614    WebCore::DOMWindow* window() { return m_window; }
615
616protected:
617    WebCore::DOMWindow* m_window;
618};
619
620
621
622class DOMElement : public DOMNode, public IDOMElement, public IDOMElementPrivate, public IDOMNodeExtensions, public IDOMElementCSSInlineStyle, public IDOMElementExtensions {
623protected:
624    DOMElement(WebCore::Element* e);
625    ~DOMElement();
626
627public:
628    static IDOMElement* createInstance(WebCore::Element* e);
629
630    // IUnknown
631    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
632    virtual ULONG STDMETHODCALLTYPE AddRef(void) { return DOMNode::AddRef(); }
633    virtual ULONG STDMETHODCALLTYPE Release(void) { return DOMNode::Release(); }
634
635    // IWebScriptObject
636    virtual HRESULT STDMETHODCALLTYPE throwException(
637        /* [in] */ BSTR exceptionMessage,
638        /* [retval][out] */ BOOL* result) { return DOMNode::throwException(exceptionMessage, result); }
639
640    virtual HRESULT STDMETHODCALLTYPE callWebScriptMethod(
641        /* [in] */ BSTR name,
642        /* [size_is][in] */ const VARIANT args[  ],
643        /* [in] */ int cArgs,
644        /* [retval][out] */ VARIANT* result) { return DOMNode::callWebScriptMethod(name, args, cArgs, result); }
645
646    virtual HRESULT STDMETHODCALLTYPE evaluateWebScript(
647        /* [in] */ BSTR script,
648        /* [retval][out] */ VARIANT* result) { return DOMNode::evaluateWebScript(script, result); }
649
650    virtual HRESULT STDMETHODCALLTYPE removeWebScriptKey(
651        /* [in] */ BSTR name) { return DOMNode::removeWebScriptKey(name); }
652
653    virtual HRESULT STDMETHODCALLTYPE stringRepresentation(
654        /* [retval][out] */ BSTR* stringRepresentation) { return DOMNode::stringRepresentation(stringRepresentation); }
655
656    virtual HRESULT STDMETHODCALLTYPE webScriptValueAtIndex(
657        /* [in] */ unsigned int index,
658        /* [retval][out] */ VARIANT* result) { return DOMNode::webScriptValueAtIndex(index, result); }
659
660    virtual HRESULT STDMETHODCALLTYPE setWebScriptValueAtIndex(
661        /* [in] */ unsigned int index,
662        /* [in] */ VARIANT val) { return DOMNode::setWebScriptValueAtIndex(index, val); }
663
664    virtual HRESULT STDMETHODCALLTYPE setException(
665        /* [in] */ BSTR description) { return DOMNode::setException(description); }
666
667    // IDOMNode
668    virtual HRESULT STDMETHODCALLTYPE nodeName(
669        /* [retval][out] */ BSTR* result) { return DOMNode::nodeName(result); }
670
671    virtual HRESULT STDMETHODCALLTYPE nodeValue(
672        /* [retval][out] */ BSTR* result) { return DOMNode::nodeValue(result); }
673
674    virtual HRESULT STDMETHODCALLTYPE setNodeValue(
675        /* [in] */ BSTR value) { return DOMNode::setNodeValue(value); }
676
677    virtual HRESULT STDMETHODCALLTYPE nodeType(
678        /* [retval][out] */ unsigned short* result) { return DOMNode::nodeType(result); }
679
680    virtual HRESULT STDMETHODCALLTYPE parentNode(
681        /* [retval][out] */ IDOMNode** result) { return DOMNode::parentNode(result); }
682
683    virtual HRESULT STDMETHODCALLTYPE childNodes(
684        /* [retval][out] */ IDOMNodeList** result) { return DOMNode::childNodes(result); }
685
686    virtual HRESULT STDMETHODCALLTYPE firstChild(
687        /* [retval][out] */ IDOMNode** result) { return DOMNode::firstChild(result); }
688
689    virtual HRESULT STDMETHODCALLTYPE lastChild(
690        /* [retval][out] */ IDOMNode** result) { return DOMNode::lastChild(result); }
691
692    virtual HRESULT STDMETHODCALLTYPE previousSibling(
693        /* [retval][out] */ IDOMNode** result) { return DOMNode::previousSibling(result); }
694
695    virtual HRESULT STDMETHODCALLTYPE nextSibling(
696        /* [retval][out] */ IDOMNode** result) { return DOMNode::nextSibling(result); }
697
698    virtual HRESULT STDMETHODCALLTYPE attributes(
699        /* [retval][out] */ IDOMNamedNodeMap** result) { return DOMNode::attributes(result); }
700
701    virtual HRESULT STDMETHODCALLTYPE ownerDocument(
702        /* [retval][out] */ IDOMDocument** result) { return DOMNode::ownerDocument(result); }
703
704    virtual HRESULT STDMETHODCALLTYPE insertBefore(
705        /* [in] */ IDOMNode* newChild,
706        /* [in] */ IDOMNode* refChild,
707        /* [retval][out] */ IDOMNode** result) { return DOMNode::insertBefore(newChild, refChild, result); }
708
709    virtual HRESULT STDMETHODCALLTYPE replaceChild(
710        /* [in] */ IDOMNode* newChild,
711        /* [in] */ IDOMNode* oldChild,
712        /* [retval][out] */ IDOMNode** result) { return DOMNode::replaceChild(newChild, oldChild, result); }
713
714    virtual HRESULT STDMETHODCALLTYPE removeChild(
715        /* [in] */ IDOMNode* oldChild,
716        /* [retval][out] */ IDOMNode** result) { return DOMNode::removeChild(oldChild, result); }
717
718    virtual HRESULT STDMETHODCALLTYPE appendChild(
719        /* [in] */ IDOMNode* oldChild,
720        /* [retval][out] */ IDOMNode** result) { return DOMNode::appendChild(oldChild, result); }
721
722    virtual HRESULT STDMETHODCALLTYPE hasChildNodes(
723        /* [retval][out] */ BOOL* result) { return DOMNode::hasChildNodes(result); }
724
725    virtual HRESULT STDMETHODCALLTYPE cloneNode(
726        /* [in] */ BOOL deep,
727        /* [retval][out] */ IDOMNode** result) { return DOMNode::cloneNode(deep, result); }
728
729    virtual HRESULT STDMETHODCALLTYPE normalize( void) { return DOMNode::normalize(); }
730
731    virtual HRESULT STDMETHODCALLTYPE isSupported(
732        /* [in] */ BSTR feature,
733        /* [in] */ BSTR version,
734        /* [retval][out] */ BOOL* result) { return DOMNode::isSupported(feature, version, result); }
735
736    virtual HRESULT STDMETHODCALLTYPE namespaceURI(
737        /* [retval][out] */ BSTR* result) { return DOMNode::namespaceURI(result); }
738
739    virtual HRESULT STDMETHODCALLTYPE prefix(
740        /* [retval][out] */ BSTR* result) { return DOMNode::prefix(result); }
741
742    virtual HRESULT STDMETHODCALLTYPE setPrefix(
743        /* [in] */ BSTR prefix) { return DOMNode::setPrefix(prefix); }
744
745    virtual HRESULT STDMETHODCALLTYPE localName(
746        /* [retval][out] */ BSTR* result) { return DOMNode::localName(result); }
747
748    virtual HRESULT STDMETHODCALLTYPE hasAttributes(
749        /* [retval][out] */ BOOL* result) { return DOMNode::hasAttributes(result); }
750
751    virtual HRESULT STDMETHODCALLTYPE isSameNode(
752        /* [in] */ IDOMNode* other,
753        /* [retval][out] */ BOOL* result) { return DOMNode::isSameNode(other, result); }
754
755    virtual HRESULT STDMETHODCALLTYPE isEqualNode(
756        /* [in] */ IDOMNode* other,
757        /* [retval][out] */ BOOL* result) { return DOMNode::isEqualNode(other, result); }
758
759    virtual HRESULT STDMETHODCALLTYPE textContent(
760        /* [retval][out] */ BSTR* result) { return DOMNode::textContent(result); }
761
762    virtual HRESULT STDMETHODCALLTYPE setTextContent(
763        /* [in] */ BSTR text) { return DOMNode::setTextContent(text); }
764
765    // IDOMElement
766    virtual HRESULT STDMETHODCALLTYPE tagName(
767        /* [retval][out] */ BSTR* result);
768
769    virtual HRESULT STDMETHODCALLTYPE getAttribute(
770        /* [in] */ BSTR name,
771        /* [retval][out] */ BSTR* result);
772
773    virtual HRESULT STDMETHODCALLTYPE setAttribute(
774        /* [in] */ BSTR name,
775        /* [in] */ BSTR value);
776
777    virtual HRESULT STDMETHODCALLTYPE removeAttribute(
778        /* [in] */ BSTR name);
779
780    virtual HRESULT STDMETHODCALLTYPE getAttributeNode(
781        /* [in] */ BSTR name,
782        /* [retval][out] */ IDOMAttr** result);
783
784    virtual HRESULT STDMETHODCALLTYPE setAttributeNode(
785        /* [in] */ IDOMAttr *newAttr,
786        /* [retval][out] */ IDOMAttr** result);
787
788    virtual HRESULT STDMETHODCALLTYPE removeAttributeNode(
789        /* [in] */ IDOMAttr *oldAttr,
790        /* [retval][out] */ IDOMAttr** result);
791
792    virtual HRESULT STDMETHODCALLTYPE getElementsByTagName(
793        /* [in] */ BSTR name,
794        /* [retval][out] */ IDOMNodeList** result);
795
796    virtual HRESULT STDMETHODCALLTYPE getAttributeNS(
797        /* [in] */ BSTR namespaceURI,
798        /* [in] */ BSTR localName,
799        /* [retval][out] */ BSTR* result);
800
801    virtual HRESULT STDMETHODCALLTYPE setAttributeNS(
802        /* [in] */ BSTR namespaceURI,
803        /* [in] */ BSTR qualifiedName,
804        /* [in] */ BSTR value);
805
806    virtual HRESULT STDMETHODCALLTYPE removeAttributeNS(
807        /* [in] */ BSTR namespaceURI,
808        /* [in] */ BSTR localName);
809
810    virtual HRESULT STDMETHODCALLTYPE getAttributeNodeNS(
811        /* [in] */ BSTR namespaceURI,
812        /* [in] */ BSTR localName,
813        /* [retval][out] */ IDOMAttr** result);
814
815    virtual HRESULT STDMETHODCALLTYPE setAttributeNodeNS(
816        /* [in] */ IDOMAttr *newAttr,
817        /* [retval][out] */ IDOMAttr** result);
818
819    virtual HRESULT STDMETHODCALLTYPE getElementsByTagNameNS(
820        /* [in] */ BSTR namespaceURI,
821        /* [in] */ BSTR localName,
822        /* [retval][out] */ IDOMNodeList** result);
823
824    virtual HRESULT STDMETHODCALLTYPE hasAttribute(
825        /* [in] */ BSTR name,
826        /* [retval][out] */ BOOL* result);
827
828    virtual HRESULT STDMETHODCALLTYPE hasAttributeNS(
829        /* [in] */ BSTR namespaceURI,
830        /* [in] */ BSTR localName,
831        /* [retval][out] */ BOOL* result);
832
833    virtual HRESULT STDMETHODCALLTYPE focus( void);
834
835    virtual HRESULT STDMETHODCALLTYPE blur( void);
836
837    // IDOMNodeExtensions
838    virtual HRESULT STDMETHODCALLTYPE boundingBox(
839        /* [retval][out] */ LPRECT rect);
840
841    virtual HRESULT STDMETHODCALLTYPE lineBoxRects(
842        /* [size_is][in] */ RECT* rects,
843        /* [in] */ int cRects);
844
845    // IDOMElementPrivate
846    virtual HRESULT STDMETHODCALLTYPE coreElement(
847        void** element);
848
849    virtual HRESULT STDMETHODCALLTYPE isEqual(
850        /* [in] */ IDOMElement* other,
851        /* [retval][out] */ BOOL* result);
852
853    virtual HRESULT STDMETHODCALLTYPE isFocused(
854        /* [retval][out] */ BOOL* result);
855
856    virtual HRESULT STDMETHODCALLTYPE innerText(
857        /* [retval][out] */ BSTR* result);
858
859    virtual HRESULT STDMETHODCALLTYPE font(
860        WebFontDescription* webFontDescription);
861
862    virtual HRESULT STDMETHODCALLTYPE renderedImage(
863        /* [retval][out] */ HBITMAP* image);
864
865    virtual HRESULT STDMETHODCALLTYPE markerTextForListItem(
866        /* [retval][out] */ BSTR* markerText);
867
868    virtual HRESULT STDMETHODCALLTYPE shadowPseudoId(
869        /* [retval][out] */ BSTR* result);
870
871    // IDOMElementCSSInlineStyle
872    virtual HRESULT STDMETHODCALLTYPE style(
873        /* [retval][out] */ IDOMCSSStyleDeclaration** result);
874
875    // IDOMElementExtensions
876    virtual HRESULT STDMETHODCALLTYPE offsetLeft(
877        /* [retval][out] */ int* result);
878
879    virtual HRESULT STDMETHODCALLTYPE offsetTop(
880        /* [retval][out] */ int* result);
881
882    virtual HRESULT STDMETHODCALLTYPE offsetWidth(
883        /* [retval][out] */ int* result);
884
885    virtual HRESULT STDMETHODCALLTYPE offsetHeight(
886        /* [retval][out] */ int* result);
887
888    virtual HRESULT STDMETHODCALLTYPE offsetParent(
889        /* [retval][out] */ IDOMElement** result);
890
891    virtual HRESULT STDMETHODCALLTYPE clientWidth(
892        /* [retval][out] */ int* result);
893
894    virtual HRESULT STDMETHODCALLTYPE clientHeight(
895        /* [retval][out] */ int* result);
896
897    virtual HRESULT STDMETHODCALLTYPE scrollLeft(
898        /* [retval][out] */ int* result);
899
900    virtual HRESULT STDMETHODCALLTYPE setScrollLeft(
901        /* [in] */ int newScrollLeft);
902
903    virtual HRESULT STDMETHODCALLTYPE scrollTop(
904        /* [retval][out] */ int* result);
905
906    virtual HRESULT STDMETHODCALLTYPE setScrollTop(
907        /* [in] */ int newScrollTop);
908
909    virtual HRESULT STDMETHODCALLTYPE scrollWidth(
910        /* [retval][out] */ int* result);
911
912    virtual HRESULT STDMETHODCALLTYPE scrollHeight(
913        /* [retval][out] */ int* result);
914
915    virtual HRESULT STDMETHODCALLTYPE scrollIntoView(
916        /* [in] */ BOOL alignWithTop);
917
918    virtual HRESULT STDMETHODCALLTYPE scrollIntoViewIfNeeded(
919        /* [in] */ BOOL centerIfNeeded);
920
921    // DOMElement
922    WebCore::Element* element() { return m_element; }
923
924protected:
925    WebCore::Element* m_element;
926};
927
928#endif
929