mshtml: Fix a test failure in win2k3.
[wine] / dlls / mshtml / htmldoc3.c
1 /*
2  * Copyright 2005 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22 #include <stdio.h>
23
24 #define COBJMACROS
25
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "ole2.h"
30
31 #include "wine/debug.h"
32
33 #include "mshtml_private.h"
34
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
36
37 #define HTMLDOC3_THIS(iface) DEFINE_THIS(HTMLDocument, HTMLDocument3, iface)
38
39 static HRESULT WINAPI HTMLDocument3_QueryInterface(IHTMLDocument3 *iface,
40                                                   REFIID riid, void **ppv)
41 {
42     HTMLDocument *This = HTMLDOC3_THIS(iface);
43     return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv);
44 }
45
46 static ULONG WINAPI HTMLDocument3_AddRef(IHTMLDocument3 *iface)
47 {
48     HTMLDocument *This = HTMLDOC3_THIS(iface);
49     return IHTMLDocument2_AddRef(HTMLDOC(This));
50 }
51
52 static ULONG WINAPI HTMLDocument3_Release(IHTMLDocument3 *iface)
53 {
54     HTMLDocument *This = HTMLDOC3_THIS(iface);
55     return IHTMLDocument2_Release(HTMLDOC(This));
56 }
57
58 static HRESULT WINAPI HTMLDocument3_GetTypeInfoCount(IHTMLDocument3 *iface, UINT *pctinfo)
59 {
60     HTMLDocument *This = HTMLDOC3_THIS(iface);
61     FIXME("(%p)->(%p)\n", This, pctinfo);
62     return E_NOTIMPL;
63 }
64
65 static HRESULT WINAPI HTMLDocument3_GetTypeInfo(IHTMLDocument3 *iface, UINT iTInfo,
66                                                 LCID lcid, ITypeInfo **ppTInfo)
67 {
68     HTMLDocument *This = HTMLDOC3_THIS(iface);
69     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
70     return E_NOTIMPL;
71 }
72
73 static HRESULT WINAPI HTMLDocument3_GetIDsOfNames(IHTMLDocument3 *iface, REFIID riid,
74                                                 LPOLESTR *rgszNames, UINT cNames,
75                                                 LCID lcid, DISPID *rgDispId)
76 {
77     HTMLDocument *This = HTMLDOC3_THIS(iface);
78     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
79                                         lcid, rgDispId);
80     return E_NOTIMPL;
81 }
82
83 static HRESULT WINAPI HTMLDocument3_Invoke(IHTMLDocument3 *iface, DISPID dispIdMember,
84                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
85                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
86 {
87     HTMLDocument *This = HTMLDOC3_THIS(iface);
88     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
89             lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
90     return E_NOTIMPL;
91 }
92
93 static HRESULT WINAPI HTMLDocument3_releaseCapture(IHTMLDocument3 *iface)
94 {
95     HTMLDocument *This = HTMLDOC3_THIS(iface);
96     FIXME("(%p)\n", This);
97     return E_NOTIMPL;
98 }
99
100 static HRESULT WINAPI HTMLDocument3_recalc(IHTMLDocument3 *iface, VARIANT_BOOL fForce)
101 {
102     HTMLDocument *This = HTMLDOC3_THIS(iface);
103     FIXME("(%p)->(%x)\n", This, fForce);
104     return E_NOTIMPL;
105 }
106
107 static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR text,
108                                                    IHTMLDOMNode **newTextNode)
109 {
110     HTMLDocument *This = HTMLDOC3_THIS(iface);
111     FIXME("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode);
112     return E_NOTIMPL;
113 }
114
115 static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p)
116 {
117     HTMLDocument *This = HTMLDOC3_THIS(iface);
118     nsIDOMDocument *nsdoc;
119     HTMLDOMNode *node;
120     nsIDOMElement *nselem = NULL;
121     nsresult nsres;
122
123     TRACE("(%p)->(%p)\n", This, p);
124
125     if(!This->nscontainer) {
126         *p = NULL;
127         return S_OK;
128     }
129
130     nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
131     if(NS_FAILED(nsres))
132         ERR("GetDocument failed: %08x\n", nsres);
133
134     if(nsdoc) {
135         nsres = nsIDOMHTMLDocument_GetDocumentElement(nsdoc, &nselem);
136         if(NS_FAILED(nsres))
137             ERR("GetDocumentElement failed: %08x\n", nsres);
138     }
139     if(nselem) {
140         node = get_node(This, (nsIDOMNode *)nselem, TRUE);
141         nsIDOMDocument_Release(nsdoc);
142
143         IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p);
144     }else {
145         *p = NULL;
146     }
147
148     return S_OK;
149 }
150
151 static HRESULT WINAPI HTMLDocument3_uniqueID(IHTMLDocument3 *iface, BSTR *p)
152 {
153     HTMLDocument *This = HTMLDOC3_THIS(iface);
154     FIXME("(%p)->(%p)\n", This, p);
155     return E_NOTIMPL;
156 }
157
158 static HRESULT WINAPI HTMLDocument3_attachEvent(IHTMLDocument3 *iface, BSTR event,
159                                                 IDispatch* pDisp, VARIANT_BOOL *pfResult)
160 {
161     HTMLDocument *This = HTMLDOC3_THIS(iface);
162     FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
163     return E_NOTIMPL;
164 }
165
166 static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR event,
167                                                 IDispatch *pDisp)
168 {
169     HTMLDocument *This = HTMLDOC3_THIS(iface);
170     FIXME("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
171     return E_NOTIMPL;
172 }
173
174 static HRESULT WINAPI HTMLDocument3_put_onrowsdelete(IHTMLDocument3 *iface, VARIANT v)
175 {
176     HTMLDocument *This = HTMLDOC3_THIS(iface);
177     FIXME("(%p)->()\n", This);
178     return E_NOTIMPL;
179 }
180
181 static HRESULT WINAPI HTMLDocument3_get_onrowsdelete(IHTMLDocument3 *iface, VARIANT *p)
182 {
183     HTMLDocument *This = HTMLDOC3_THIS(iface);
184     FIXME("(%p)->(%p)\n", This, p);
185     return E_NOTIMPL;
186 }
187
188 static HRESULT WINAPI HTMLDocument3_put_onrowsinserted(IHTMLDocument3 *iface, VARIANT v)
189 {
190     HTMLDocument *This = HTMLDOC3_THIS(iface);
191     FIXME("(%p)->()\n", This);
192     return E_NOTIMPL;
193 }
194
195 static HRESULT WINAPI HTMLDocument3_get_onrowsinserted(IHTMLDocument3 *iface, VARIANT *p)
196 {
197     HTMLDocument *This = HTMLDOC3_THIS(iface);
198     FIXME("(%p)->(%p)\n", This, p);
199     return E_NOTIMPL;
200 }
201
202 static HRESULT WINAPI HTMLDocument3_put_oncellchange(IHTMLDocument3 *iface, VARIANT v)
203 {
204     HTMLDocument *This = HTMLDOC3_THIS(iface);
205     FIXME("(%p)->()\n", This);
206     return E_NOTIMPL;
207 }
208
209 static HRESULT WINAPI HTMLDocument3_get_oncellchange(IHTMLDocument3 *iface, VARIANT *p)
210 {
211     HTMLDocument *This = HTMLDOC3_THIS(iface);
212     FIXME("(%p)->(%p)\n", This, p);
213     return E_NOTIMPL;
214 }
215
216 static HRESULT WINAPI HTMLDocument3_put_ondatasetchanged(IHTMLDocument3 *iface, VARIANT v)
217 {
218     HTMLDocument *This = HTMLDOC3_THIS(iface);
219     FIXME("(%p)->()\n", This);
220     return E_NOTIMPL;
221 }
222
223 static HRESULT WINAPI HTMLDocument3_get_ondatasetchanged(IHTMLDocument3 *iface, VARIANT *p)
224 {
225     HTMLDocument *This = HTMLDOC3_THIS(iface);
226     FIXME("(%p)->(%p)\n", This, p);
227     return E_NOTIMPL;
228 }
229
230 static HRESULT WINAPI HTMLDocument3_put_ondataavailable(IHTMLDocument3 *iface, VARIANT v)
231 {
232     HTMLDocument *This = HTMLDOC3_THIS(iface);
233     FIXME("(%p)->()\n", This);
234     return E_NOTIMPL;
235 }
236
237 static HRESULT WINAPI HTMLDocument3_get_ondataavailable(IHTMLDocument3 *iface, VARIANT *p)
238 {
239     HTMLDocument *This = HTMLDOC3_THIS(iface);
240     FIXME("(%p)->(%p)\n", This, p);
241     return E_NOTIMPL;
242 }
243
244 static HRESULT WINAPI HTMLDocument3_put_ondatasetcomplete(IHTMLDocument3 *iface, VARIANT v)
245 {
246     HTMLDocument *This = HTMLDOC3_THIS(iface);
247     FIXME("(%p)->()\n", This);
248     return E_NOTIMPL;
249 }
250
251 static HRESULT WINAPI HTMLDocument3_get_ondatasetcomplete(IHTMLDocument3 *iface, VARIANT *p)
252 {
253     HTMLDocument *This = HTMLDOC3_THIS(iface);
254     FIXME("(%p)->(%p)\n", This, p);
255     return E_NOTIMPL;
256 }
257
258 static HRESULT WINAPI HTMLDocument3_put_onpropertychange(IHTMLDocument3 *iface, VARIANT v)
259 {
260     HTMLDocument *This = HTMLDOC3_THIS(iface);
261     FIXME("(%p)->()\n", This);
262     return E_NOTIMPL;
263 }
264
265 static HRESULT WINAPI HTMLDocument3_get_onpropertychange(IHTMLDocument3 *iface, VARIANT *p)
266 {
267     HTMLDocument *This = HTMLDOC3_THIS(iface);
268     FIXME("(%p)->(%p)\n", This, p);
269     return E_NOTIMPL;
270 }
271
272 static HRESULT WINAPI HTMLDocument3_put_dir(IHTMLDocument3 *iface, BSTR v)
273 {
274     HTMLDocument *This = HTMLDOC3_THIS(iface);
275     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
276     return E_NOTIMPL;
277 }
278
279 static HRESULT WINAPI HTMLDocument3_get_dir(IHTMLDocument3 *iface, BSTR *p)
280 {
281     HTMLDocument *This = HTMLDOC3_THIS(iface);
282     FIXME("(%p)->(%p)\n", This, p);
283     return E_NOTIMPL;
284 }
285
286 static HRESULT WINAPI HTMLDocument3_put_oncontextmenu(IHTMLDocument3 *iface, VARIANT v)
287 {
288     HTMLDocument *This = HTMLDOC3_THIS(iface);
289     FIXME("(%p)->()\n", This);
290     return E_NOTIMPL;
291 }
292
293 static HRESULT WINAPI HTMLDocument3_get_oncontextmenu(IHTMLDocument3 *iface, VARIANT *p)
294 {
295     HTMLDocument *This = HTMLDOC3_THIS(iface);
296     FIXME("(%p)->(%p)\n", This, p);
297     return E_NOTIMPL;
298 }
299
300 static HRESULT WINAPI HTMLDocument3_put_onstop(IHTMLDocument3 *iface, VARIANT v)
301 {
302     HTMLDocument *This = HTMLDOC3_THIS(iface);
303     FIXME("(%p)->()\n", This);
304     return E_NOTIMPL;
305 }
306
307 static HRESULT WINAPI HTMLDocument3_get_onstop(IHTMLDocument3 *iface, VARIANT *p)
308 {
309     HTMLDocument *This = HTMLDOC3_THIS(iface);
310     FIXME("(%p)->(%p)\n", This, p);
311     return E_NOTIMPL;
312 }
313
314 static HRESULT WINAPI HTMLDocument3_createDocumentFragment(IHTMLDocument3 *iface,
315                                                            IHTMLDocument2 **ppNewDoc)
316 {
317     HTMLDocument *This = HTMLDOC3_THIS(iface);
318     FIXME("(%p)->(%p)\n", This, ppNewDoc);
319     return E_NOTIMPL;
320 }
321
322 static HRESULT WINAPI HTMLDocument3_get_parentDocument(IHTMLDocument3 *iface,
323                                                        IHTMLDocument2 **p)
324 {
325     HTMLDocument *This = HTMLDOC3_THIS(iface);
326     FIXME("(%p)->(%p)\n", This, p);
327     return E_NOTIMPL;
328 }
329
330 static HRESULT WINAPI HTMLDocument3_put_enableDownload(IHTMLDocument3 *iface,
331                                                        VARIANT_BOOL v)
332 {
333     HTMLDocument *This = HTMLDOC3_THIS(iface);
334     FIXME("(%p)->(%x)\n", This, v);
335     return E_NOTIMPL;
336 }
337
338 static HRESULT WINAPI HTMLDocument3_get_enableDownload(IHTMLDocument3 *iface,
339                                                        VARIANT_BOOL *p)
340 {
341     HTMLDocument *This = HTMLDOC3_THIS(iface);
342     FIXME("(%p)->(%p)\n", This, p);
343     return E_NOTIMPL;
344 }
345
346 static HRESULT WINAPI HTMLDocument3_put_baseUrl(IHTMLDocument3 *iface, BSTR v)
347 {
348     HTMLDocument *This = HTMLDOC3_THIS(iface);
349     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
350     return E_NOTIMPL;
351 }
352
353 static HRESULT WINAPI HTMLDocument3_get_baseUrl(IHTMLDocument3 *iface, BSTR *p)
354 {
355     HTMLDocument *This = HTMLDOC3_THIS(iface);
356     FIXME("(%p)->(%p)\n", This, p);
357     return E_NOTIMPL;
358 }
359
360 static HRESULT WINAPI HTMLDocument3_get_childNodes(IHTMLDocument3 *iface, IDispatch **p)
361 {
362     HTMLDocument *This = HTMLDOC3_THIS(iface);
363     FIXME("(%p)->(%p)\n", This, p);
364     return E_NOTIMPL;
365 }
366
367 static HRESULT WINAPI HTMLDocument3_put_inheritStyleSheets(IHTMLDocument3 *iface,
368                                                            VARIANT_BOOL v)
369 {
370     HTMLDocument *This = HTMLDOC3_THIS(iface);
371     FIXME("(%p)->()\n", This);
372     return E_NOTIMPL;
373 }
374
375 static HRESULT WINAPI HTMLDocument3_get_inheritStyleSheets(IHTMLDocument3 *iface,
376                                                            VARIANT_BOOL *p)
377 {
378     HTMLDocument *This = HTMLDOC3_THIS(iface);
379     FIXME("(%p)->(%p)\n", This, p);
380     return E_NOTIMPL;
381 }
382
383 static HRESULT WINAPI HTMLDocument3_put_onbeforeeditfocus(IHTMLDocument3 *iface, VARIANT v)
384 {
385     HTMLDocument *This = HTMLDOC3_THIS(iface);
386     FIXME("(%p)->()\n", This);
387     return E_NOTIMPL;
388 }
389
390 static HRESULT WINAPI HTMLDocument3_get_onbeforeeditfocus(IHTMLDocument3 *iface, VARIANT *p)
391 {
392     HTMLDocument *This = HTMLDOC3_THIS(iface);
393     FIXME("(%p)->(%p)\n", This, p);
394     return E_NOTIMPL;
395 }
396
397 static HRESULT WINAPI HTMLDocument3_getElementsByName(IHTMLDocument3 *iface, BSTR v,
398                                                       IHTMLElementCollection **ppelColl)
399 {
400     HTMLDocument *This = HTMLDOC3_THIS(iface);
401     FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), ppelColl);
402     return E_NOTIMPL;
403 }
404
405
406 static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v,
407                                                    IHTMLElement **pel)
408 {
409     HTMLDocument *This = HTMLDOC3_THIS(iface);
410     nsIDOMDocument *nsdoc = NULL;
411     nsIDOMElement *nselem = NULL;
412     HTMLDOMNode *node;
413     nsAString id_str;
414     nsresult nsres;
415
416     TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel);
417
418     *pel = NULL;
419
420     if(!This->nscontainer)
421         return S_OK;
422
423     nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
424     if(NS_FAILED(nsres) || !nsdoc)
425         return S_OK;
426
427     nsAString_Init(&id_str, v);
428     nsIDOMDocument_GetElementById(nsdoc, &id_str, &nselem);
429     nsIDOMDocument_Release(nsdoc);
430     nsAString_Finish(&id_str);
431
432     if(!nselem) {
433         *pel = NULL;
434         return S_OK;
435     }
436
437     node = get_node(This, (nsIDOMNode*)nselem, TRUE);
438     nsIDOMElement_Release(nselem);
439
440     return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel);
441 }
442
443
444 static HRESULT WINAPI HTMLDocument3_getElementsByTagName(IHTMLDocument3 *iface, BSTR v,
445                                                          IHTMLElementCollection **pelColl)
446 {
447     HTMLDocument *This = HTMLDOC3_THIS(iface);
448     FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl);
449     return E_NOTIMPL;
450 }
451
452 #undef HTMLDOC3_THIS
453
454 static const IHTMLDocument3Vtbl HTMLDocument3Vtbl = {
455     HTMLDocument3_QueryInterface,
456     HTMLDocument3_AddRef,
457     HTMLDocument3_Release,
458     HTMLDocument3_GetTypeInfoCount,
459     HTMLDocument3_GetTypeInfo,
460     HTMLDocument3_GetIDsOfNames,
461     HTMLDocument3_Invoke,
462     HTMLDocument3_releaseCapture,
463     HTMLDocument3_recalc,
464     HTMLDocument3_createTextNode,
465     HTMLDocument3_get_documentElement,
466     HTMLDocument3_uniqueID,
467     HTMLDocument3_attachEvent,
468     HTMLDocument3_detachEvent,
469     HTMLDocument3_put_onrowsdelete,
470     HTMLDocument3_get_onrowsdelete,
471     HTMLDocument3_put_onrowsinserted,
472     HTMLDocument3_get_onrowsinserted,
473     HTMLDocument3_put_oncellchange,
474     HTMLDocument3_get_oncellchange,
475     HTMLDocument3_put_ondatasetchanged,
476     HTMLDocument3_get_ondatasetchanged,
477     HTMLDocument3_put_ondataavailable,
478     HTMLDocument3_get_ondataavailable,
479     HTMLDocument3_put_ondatasetcomplete,
480     HTMLDocument3_get_ondatasetcomplete,
481     HTMLDocument3_put_onpropertychange,
482     HTMLDocument3_get_onpropertychange,
483     HTMLDocument3_put_dir,
484     HTMLDocument3_get_dir,
485     HTMLDocument3_put_oncontextmenu,
486     HTMLDocument3_get_oncontextmenu,
487     HTMLDocument3_put_onstop,
488     HTMLDocument3_get_onstop,
489     HTMLDocument3_createDocumentFragment,
490     HTMLDocument3_get_parentDocument,
491     HTMLDocument3_put_enableDownload,
492     HTMLDocument3_get_enableDownload,
493     HTMLDocument3_put_baseUrl,
494     HTMLDocument3_get_baseUrl,
495     HTMLDocument3_get_childNodes,
496     HTMLDocument3_put_inheritStyleSheets,
497     HTMLDocument3_get_inheritStyleSheets,
498     HTMLDocument3_put_onbeforeeditfocus,
499     HTMLDocument3_get_onbeforeeditfocus,
500     HTMLDocument3_getElementsByName,
501     HTMLDocument3_getElementById,
502     HTMLDocument3_getElementsByTagName
503 };
504
505 #define HTMLDOC4_THIS(iface) DEFINE_THIS(HTMLDocument, HTMLDocument4, iface)
506
507 static HRESULT WINAPI HTMLDocument4_QueryInterface(IHTMLDocument4 *iface,
508                                                    REFIID riid, void **ppv)
509 {
510     HTMLDocument *This = HTMLDOC4_THIS(iface);
511     return IHTMLDocument2_QueryInterface(HTMLDOC(This), riid, ppv);
512 }
513
514 static ULONG WINAPI HTMLDocument4_AddRef(IHTMLDocument4 *iface)
515 {
516     HTMLDocument *This = HTMLDOC4_THIS(iface);
517     return IHTMLDocument2_AddRef(HTMLDOC(This));
518 }
519
520 static ULONG WINAPI HTMLDocument4_Release(IHTMLDocument4 *iface)
521 {
522     HTMLDocument *This = HTMLDOC4_THIS(iface);
523     return IHTMLDocument2_Release(HTMLDOC(This));
524 }
525
526 static HRESULT WINAPI HTMLDocument4_GetTypeInfoCount(IHTMLDocument4 *iface, UINT *pctinfo)
527 {
528     HTMLDocument *This = HTMLDOC4_THIS(iface);
529     FIXME("(%p)->(%p)\n", This, pctinfo);
530     return E_NOTIMPL;
531 }
532
533 static HRESULT WINAPI HTMLDocument4_GetTypeInfo(IHTMLDocument4 *iface, UINT iTInfo,
534                                                 LCID lcid, ITypeInfo **ppTInfo)
535 {
536     HTMLDocument *This = HTMLDOC4_THIS(iface);
537     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
538     return E_NOTIMPL;
539 }
540
541 static HRESULT WINAPI HTMLDocument4_GetIDsOfNames(IHTMLDocument4 *iface, REFIID riid,
542                                                 LPOLESTR *rgszNames, UINT cNames,
543                                                 LCID lcid, DISPID *rgDispId)
544 {
545     HTMLDocument *This = HTMLDOC4_THIS(iface);
546     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
547                                         lcid, rgDispId);
548     return E_NOTIMPL;
549 }
550
551 static HRESULT WINAPI HTMLDocument4_Invoke(IHTMLDocument4 *iface, DISPID dispIdMember,
552                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
553                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
554 {
555     HTMLDocument *This = HTMLDOC4_THIS(iface);
556     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
557             lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
558     return E_NOTIMPL;
559 }
560
561 static HRESULT WINAPI HTMLDocument4_focus(IHTMLDocument4 *iface)
562 {
563     HTMLDocument *This = HTMLDOC4_THIS(iface);
564     FIXME("(%p)->()\n", This);
565     return E_NOTIMPL;
566 }
567
568 static HRESULT WINAPI HTMLDocument4_hasFocus(IHTMLDocument4 *iface, VARIANT_BOOL *pfFocus)
569 {
570     HTMLDocument *This = HTMLDOC4_THIS(iface);
571     FIXME("(%p)->(%p)\n", This, pfFocus);
572     return E_NOTIMPL;
573 }
574
575 static HRESULT WINAPI HTMLDocument4_put_onselectionchange(IHTMLDocument4 *iface, VARIANT v)
576 {
577     HTMLDocument *This = HTMLDOC4_THIS(iface);
578     FIXME("(%p)->(v)\n", This);
579     return E_NOTIMPL;
580 }
581
582 static HRESULT WINAPI HTMLDocument4_get_onselectionchange(IHTMLDocument4 *iface, VARIANT *p)
583 {
584     HTMLDocument *This = HTMLDOC4_THIS(iface);
585     FIXME("(%p)->(%p)\n", This, p);
586     return E_NOTIMPL;
587 }
588
589 static HRESULT WINAPI HTMLDocument4_get_namespace(IHTMLDocument4 *iface, IDispatch **p)
590 {
591     HTMLDocument *This = HTMLDOC4_THIS(iface);
592     FIXME("(%p)->(%p)\n", This, p);
593     return E_NOTIMPL;
594 }
595
596 static HRESULT WINAPI HTMLDocument4_createDocumentFromUrl(IHTMLDocument4 *iface, BSTR bstrUrl,
597         BSTR bstrOptions, IHTMLDocument2 **newDoc)
598 {
599     HTMLDocument *This = HTMLDOC4_THIS(iface);
600     FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(bstrUrl), debugstr_w(bstrOptions), newDoc);
601     return E_NOTIMPL;
602 }
603
604 static HRESULT WINAPI HTMLDocument4_put_media(IHTMLDocument4 *iface, BSTR v)
605 {
606     HTMLDocument *This = HTMLDOC4_THIS(iface);
607     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
608     return E_NOTIMPL;
609 }
610
611 static HRESULT WINAPI HTMLDocument4_get_media(IHTMLDocument4 *iface, BSTR *p)
612 {
613     HTMLDocument *This = HTMLDOC4_THIS(iface);
614     FIXME("(%p)->(%p)\n", This, p);
615     return E_NOTIMPL;
616 }
617
618 static HRESULT WINAPI HTMLDocument4_createEventObject(IHTMLDocument4 *iface,
619         VARIANT *pvarEventObject, IHTMLEventObj **ppEventObj)
620 {
621     HTMLDocument *This = HTMLDOC4_THIS(iface);
622     FIXME("(%p)->(%p %p)\n", This, pvarEventObject, ppEventObj);
623     return E_NOTIMPL;
624 }
625
626 static HRESULT WINAPI HTMLDocument4_fireEvent(IHTMLDocument4 *iface, BSTR bstrEventName,
627         VARIANT *pvarEventObject, VARIANT_BOOL *pfCanceled)
628 {
629     HTMLDocument *This = HTMLDOC4_THIS(iface);
630     FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(bstrEventName), pvarEventObject, pfCanceled);
631     return E_NOTIMPL;
632 }
633
634 static HRESULT WINAPI HTMLDocument4_createRenderStyle(IHTMLDocument4 *iface, BSTR v,
635         IHTMLRenderStyle **ppIHTMLRenderStyle)
636 {
637     HTMLDocument *This = HTMLDOC4_THIS(iface);
638     FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), ppIHTMLRenderStyle);
639     return E_NOTIMPL;
640 }
641
642 static HRESULT WINAPI HTMLDocument4_put_oncontrolselect(IHTMLDocument4 *iface, VARIANT v)
643 {
644     HTMLDocument *This = HTMLDOC4_THIS(iface);
645     FIXME("(%p)->(v)\n", This);
646     return E_NOTIMPL;
647 }
648
649 static HRESULT WINAPI HTMLDocument4_get_oncontrolselect(IHTMLDocument4 *iface, VARIANT *p)
650 {
651     HTMLDocument *This = HTMLDOC4_THIS(iface);
652     FIXME("(%p)->(%p)\n", This, p);
653     return E_NOTIMPL;
654 }
655
656 static HRESULT WINAPI HTMLDocument4_get_URLEncoded(IHTMLDocument4 *iface, BSTR *p)
657 {
658     HTMLDocument *This = HTMLDOC4_THIS(iface);
659     FIXME("(%p)->(%p)\n", This, p);
660     return E_NOTIMPL;
661 }
662
663 #undef HTMLDOC4_THIS
664
665 static const IHTMLDocument4Vtbl HTMLDocument4Vtbl = {
666     HTMLDocument4_QueryInterface,
667     HTMLDocument4_AddRef,
668     HTMLDocument4_Release,
669     HTMLDocument4_GetTypeInfoCount,
670     HTMLDocument4_GetTypeInfo,
671     HTMLDocument4_GetIDsOfNames,
672     HTMLDocument4_Invoke,
673     HTMLDocument4_focus,
674     HTMLDocument4_hasFocus,
675     HTMLDocument4_put_onselectionchange,
676     HTMLDocument4_get_onselectionchange,
677     HTMLDocument4_get_namespace,
678     HTMLDocument4_createDocumentFromUrl,
679     HTMLDocument4_put_media,
680     HTMLDocument4_get_media,
681     HTMLDocument4_createEventObject,
682     HTMLDocument4_fireEvent,
683     HTMLDocument4_createRenderStyle,
684     HTMLDocument4_put_oncontrolselect,
685     HTMLDocument4_get_oncontrolselect,
686     HTMLDocument4_get_URLEncoded
687 };
688
689 void HTMLDocument_HTMLDocument3_Init(HTMLDocument *This)
690 {
691     This->lpHTMLDocument3Vtbl = &HTMLDocument3Vtbl;
692     This->lpHTMLDocument4Vtbl = &HTMLDocument4Vtbl;
693 }