2 * Copyright 2005 Jacek Caban for CodeWeavers
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.
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.
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
31 #include "wine/debug.h"
33 #include "mshtml_private.h"
34 #include "htmlevent.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
38 static inline HTMLDocument
*impl_from_IHTMLDocument3(IHTMLDocument3
*iface
)
40 return CONTAINING_RECORD(iface
, HTMLDocument
, IHTMLDocument3_iface
);
43 static HRESULT WINAPI
HTMLDocument3_QueryInterface(IHTMLDocument3
*iface
,
44 REFIID riid
, void **ppv
)
46 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
47 return htmldoc_query_interface(This
, riid
, ppv
);
50 static ULONG WINAPI
HTMLDocument3_AddRef(IHTMLDocument3
*iface
)
52 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
53 return htmldoc_addref(This
);
56 static ULONG WINAPI
HTMLDocument3_Release(IHTMLDocument3
*iface
)
58 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
59 return htmldoc_release(This
);
62 static HRESULT WINAPI
HTMLDocument3_GetTypeInfoCount(IHTMLDocument3
*iface
, UINT
*pctinfo
)
64 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
65 return IDispatchEx_GetTypeInfoCount(&This
->IDispatchEx_iface
, pctinfo
);
68 static HRESULT WINAPI
HTMLDocument3_GetTypeInfo(IHTMLDocument3
*iface
, UINT iTInfo
,
69 LCID lcid
, ITypeInfo
**ppTInfo
)
71 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
72 return IDispatchEx_GetTypeInfo(&This
->IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
75 static HRESULT WINAPI
HTMLDocument3_GetIDsOfNames(IHTMLDocument3
*iface
, REFIID riid
,
76 LPOLESTR
*rgszNames
, UINT cNames
,
77 LCID lcid
, DISPID
*rgDispId
)
79 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
80 return IDispatchEx_GetIDsOfNames(&This
->IDispatchEx_iface
, riid
, rgszNames
, cNames
, lcid
,
84 static HRESULT WINAPI
HTMLDocument3_Invoke(IHTMLDocument3
*iface
, DISPID dispIdMember
,
85 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
86 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
88 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
89 return IDispatchEx_Invoke(&This
->IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
90 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
93 static HRESULT WINAPI
HTMLDocument3_releaseCapture(IHTMLDocument3
*iface
)
95 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
96 FIXME("(%p)\n", This
);
100 static HRESULT WINAPI
HTMLDocument3_recalc(IHTMLDocument3
*iface
, VARIANT_BOOL fForce
)
102 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
103 FIXME("(%p)->(%x)\n", This
, fForce
);
107 static HRESULT WINAPI
HTMLDocument3_createTextNode(IHTMLDocument3
*iface
, BSTR text
,
108 IHTMLDOMNode
**newTextNode
)
110 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
117 TRACE("(%p)->(%s %p)\n", This
, debugstr_w(text
), newTextNode
);
119 if(!This
->doc_node
->nsdoc
) {
120 WARN("NULL nsdoc\n");
124 nsAString_InitDepend(&text_str
, text
);
125 nsres
= nsIDOMHTMLDocument_CreateTextNode(This
->doc_node
->nsdoc
, &text_str
, &nstext
);
126 nsAString_Finish(&text_str
);
127 if(NS_FAILED(nsres
)) {
128 ERR("CreateTextNode failed: %08x\n", nsres
);
132 hres
= HTMLDOMTextNode_Create(This
->doc_node
, (nsIDOMNode
*)nstext
, &node
);
133 nsIDOMText_Release(nstext
);
137 *newTextNode
= &node
->IHTMLDOMNode_iface
;
141 static HRESULT WINAPI
HTMLDocument3_get_documentElement(IHTMLDocument3
*iface
, IHTMLElement
**p
)
143 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
144 nsIDOMElement
*nselem
= NULL
;
149 TRACE("(%p)->(%p)\n", This
, p
);
151 if(This
->window
->readystate
== READYSTATE_UNINITIALIZED
) {
156 if(!This
->doc_node
->nsdoc
) {
157 WARN("NULL nsdoc\n");
161 nsres
= nsIDOMHTMLDocument_GetDocumentElement(This
->doc_node
->nsdoc
, &nselem
);
162 if(NS_FAILED(nsres
)) {
163 ERR("GetDocumentElement failed: %08x\n", nsres
);
172 hres
= get_node(This
->doc_node
, (nsIDOMNode
*)nselem
, TRUE
, &node
);
173 nsIDOMElement_Release(nselem
);
177 hres
= IHTMLDOMNode_QueryInterface(&node
->IHTMLDOMNode_iface
, &IID_IHTMLElement
, (void**)p
);
182 static HRESULT WINAPI
HTMLDocument3_uniqueID(IHTMLDocument3
*iface
, BSTR
*p
)
184 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
185 FIXME("(%p)->(%p)\n", This
, p
);
189 static HRESULT WINAPI
HTMLDocument3_attachEvent(IHTMLDocument3
*iface
, BSTR event
,
190 IDispatch
* pDisp
, VARIANT_BOOL
*pfResult
)
192 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
194 TRACE("(%p)->(%s %p %p)\n", This
, debugstr_w(event
), pDisp
, pfResult
);
196 return attach_event(&This
->doc_node
->node
.event_target
, This
->doc_node
->node
.nsnode
, This
, event
, pDisp
, pfResult
);
199 static HRESULT WINAPI
HTMLDocument3_detachEvent(IHTMLDocument3
*iface
, BSTR event
,
202 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
204 TRACE("(%p)->(%s %p)\n", This
, debugstr_w(event
), pDisp
);
206 return detach_event(This
->doc_node
->node
.event_target
, This
, event
, pDisp
);
209 static HRESULT WINAPI
HTMLDocument3_put_onrowsdelete(IHTMLDocument3
*iface
, VARIANT v
)
211 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
212 FIXME("(%p)->()\n", This
);
216 static HRESULT WINAPI
HTMLDocument3_get_onrowsdelete(IHTMLDocument3
*iface
, VARIANT
*p
)
218 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
219 FIXME("(%p)->(%p)\n", This
, p
);
223 static HRESULT WINAPI
HTMLDocument3_put_onrowsinserted(IHTMLDocument3
*iface
, VARIANT v
)
225 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
226 FIXME("(%p)->()\n", This
);
230 static HRESULT WINAPI
HTMLDocument3_get_onrowsinserted(IHTMLDocument3
*iface
, VARIANT
*p
)
232 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
233 FIXME("(%p)->(%p)\n", This
, p
);
237 static HRESULT WINAPI
HTMLDocument3_put_oncellchange(IHTMLDocument3
*iface
, VARIANT v
)
239 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
240 FIXME("(%p)->()\n", This
);
244 static HRESULT WINAPI
HTMLDocument3_get_oncellchange(IHTMLDocument3
*iface
, VARIANT
*p
)
246 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
247 FIXME("(%p)->(%p)\n", This
, p
);
251 static HRESULT WINAPI
HTMLDocument3_put_ondatasetchanged(IHTMLDocument3
*iface
, VARIANT v
)
253 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
254 FIXME("(%p)->()\n", This
);
258 static HRESULT WINAPI
HTMLDocument3_get_ondatasetchanged(IHTMLDocument3
*iface
, VARIANT
*p
)
260 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
261 FIXME("(%p)->(%p)\n", This
, p
);
265 static HRESULT WINAPI
HTMLDocument3_put_ondataavailable(IHTMLDocument3
*iface
, VARIANT v
)
267 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
268 FIXME("(%p)->()\n", This
);
272 static HRESULT WINAPI
HTMLDocument3_get_ondataavailable(IHTMLDocument3
*iface
, VARIANT
*p
)
274 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
275 FIXME("(%p)->(%p)\n", This
, p
);
279 static HRESULT WINAPI
HTMLDocument3_put_ondatasetcomplete(IHTMLDocument3
*iface
, VARIANT v
)
281 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
282 FIXME("(%p)->()\n", This
);
286 static HRESULT WINAPI
HTMLDocument3_get_ondatasetcomplete(IHTMLDocument3
*iface
, VARIANT
*p
)
288 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
289 FIXME("(%p)->(%p)\n", This
, p
);
293 static HRESULT WINAPI
HTMLDocument3_put_onpropertychange(IHTMLDocument3
*iface
, VARIANT v
)
295 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
296 FIXME("(%p)->()\n", This
);
300 static HRESULT WINAPI
HTMLDocument3_get_onpropertychange(IHTMLDocument3
*iface
, VARIANT
*p
)
302 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
303 FIXME("(%p)->(%p)\n", This
, p
);
307 static HRESULT WINAPI
HTMLDocument3_put_dir(IHTMLDocument3
*iface
, BSTR v
)
309 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
310 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
314 static HRESULT WINAPI
HTMLDocument3_get_dir(IHTMLDocument3
*iface
, BSTR
*p
)
316 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
317 FIXME("(%p)->(%p)\n", This
, p
);
321 static HRESULT WINAPI
HTMLDocument3_put_oncontextmenu(IHTMLDocument3
*iface
, VARIANT v
)
323 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
325 TRACE("(%p)->()\n", This
);
327 return set_doc_event(This
, EVENTID_CONTEXTMENU
, &v
);
330 static HRESULT WINAPI
HTMLDocument3_get_oncontextmenu(IHTMLDocument3
*iface
, VARIANT
*p
)
332 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
334 TRACE("(%p)->(%p)\n", This
, p
);
336 return get_doc_event(This
, EVENTID_CONTEXTMENU
, p
);
339 static HRESULT WINAPI
HTMLDocument3_put_onstop(IHTMLDocument3
*iface
, VARIANT v
)
341 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
342 FIXME("(%p)->()\n", This
);
346 static HRESULT WINAPI
HTMLDocument3_get_onstop(IHTMLDocument3
*iface
, VARIANT
*p
)
348 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
349 FIXME("(%p)->(%p)\n", This
, p
);
353 static HRESULT WINAPI
HTMLDocument3_createDocumentFragment(IHTMLDocument3
*iface
,
354 IHTMLDocument2
**ppNewDoc
)
356 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
357 nsIDOMDocumentFragment
*doc_frag
;
358 HTMLDocumentNode
*docnode
;
362 TRACE("(%p)->(%p)\n", This
, ppNewDoc
);
364 if(!This
->doc_node
->nsdoc
) {
365 FIXME("NULL nsdoc\n");
369 nsres
= nsIDOMHTMLDocument_CreateDocumentFragment(This
->doc_node
->nsdoc
, &doc_frag
);
370 if(NS_FAILED(nsres
)) {
371 ERR("CreateDocumentFragment failed: %08x\n", nsres
);
375 hres
= create_document_fragment((nsIDOMNode
*)doc_frag
, This
->doc_node
, &docnode
);
376 nsIDOMDocumentFragment_Release(doc_frag
);
380 *ppNewDoc
= &docnode
->basedoc
.IHTMLDocument2_iface
;
384 static HRESULT WINAPI
HTMLDocument3_get_parentDocument(IHTMLDocument3
*iface
,
387 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
388 FIXME("(%p)->(%p)\n", This
, p
);
392 static HRESULT WINAPI
HTMLDocument3_put_enableDownload(IHTMLDocument3
*iface
,
395 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
396 FIXME("(%p)->(%x)\n", This
, v
);
400 static HRESULT WINAPI
HTMLDocument3_get_enableDownload(IHTMLDocument3
*iface
,
403 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
404 FIXME("(%p)->(%p)\n", This
, p
);
408 static HRESULT WINAPI
HTMLDocument3_put_baseUrl(IHTMLDocument3
*iface
, BSTR v
)
410 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
411 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
415 static HRESULT WINAPI
HTMLDocument3_get_baseUrl(IHTMLDocument3
*iface
, BSTR
*p
)
417 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
418 FIXME("(%p)->(%p)\n", This
, p
);
422 static HRESULT WINAPI
HTMLDocument3_get_childNodes(IHTMLDocument3
*iface
, IDispatch
**p
)
424 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
425 FIXME("(%p)->(%p)\n", This
, p
);
429 static HRESULT WINAPI
HTMLDocument3_put_inheritStyleSheets(IHTMLDocument3
*iface
,
432 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
433 FIXME("(%p)->()\n", This
);
437 static HRESULT WINAPI
HTMLDocument3_get_inheritStyleSheets(IHTMLDocument3
*iface
,
440 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
441 FIXME("(%p)->(%p)\n", This
, p
);
445 static HRESULT WINAPI
HTMLDocument3_put_onbeforeeditfocus(IHTMLDocument3
*iface
, VARIANT v
)
447 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
448 FIXME("(%p)->()\n", This
);
452 static HRESULT WINAPI
HTMLDocument3_get_onbeforeeditfocus(IHTMLDocument3
*iface
, VARIANT
*p
)
454 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
455 FIXME("(%p)->(%p)\n", This
, p
);
459 static HRESULT WINAPI
HTMLDocument3_getElementsByName(IHTMLDocument3
*iface
, BSTR v
,
460 IHTMLElementCollection
**ppelColl
)
462 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
463 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(v
), ppelColl
);
468 static HRESULT WINAPI
HTMLDocument3_getElementById(IHTMLDocument3
*iface
, BSTR v
,
471 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
472 nsIDOMElement
*nselem
;
474 nsIDOMNode
*nsnode
, *nsnode_by_id
, *nsnode_by_name
;
475 nsIDOMNodeList
*nsnode_list
;
480 TRACE("(%p)->(%s %p)\n", This
, debugstr_w(v
), pel
);
482 if(!This
->doc_node
->nsdoc
) {
483 WARN("NULL nsdoc\n");
487 nsAString_InitDepend(&id_str
, v
);
488 /* get element by id attribute */
489 nsres
= nsIDOMHTMLDocument_GetElementById(This
->doc_node
->nsdoc
, &id_str
, &nselem
);
491 ERR("GetElementById failed: %08x\n", nsres
);
492 nsAString_Finish(&id_str
);
495 nsnode_by_id
= (nsIDOMNode
*)nselem
;
497 /* get first element by name attribute */
498 nsres
= nsIDOMHTMLDocument_GetElementsByName(This
->doc_node
->nsdoc
, &id_str
, &nsnode_list
);
499 nsAString_Finish(&id_str
);
501 ERR("getElementsByName failed: %08x\n", nsres
);
503 nsIDOMNode_Release(nsnode_by_id
);
506 nsIDOMNodeList_Item(nsnode_list
, 0, &nsnode_by_name
);
507 nsIDOMNodeList_Release(nsnode_list
);
510 if(nsnode_by_name
&& nsnode_by_id
) {
513 nsres
= nsIDOMNode_CompareDocumentPosition(nsnode_by_name
, nsnode_by_id
, &pos
);
514 if(NS_FAILED(nsres
)) {
515 FIXME("CompareDocumentPosition failed: 0x%08x\n", nsres
);
516 nsIDOMNode_Release(nsnode_by_name
);
517 nsIDOMNode_Release(nsnode_by_id
);
521 TRACE("CompareDocumentPosition gave: 0x%x\n", pos
);
522 if(pos
& (DOCUMENT_POSITION_PRECEDING
| DOCUMENT_POSITION_CONTAINS
)) {
523 nsnode
= nsnode_by_id
;
524 nsIDOMNode_Release(nsnode_by_name
);
526 nsnode
= nsnode_by_name
;
527 nsIDOMNode_Release(nsnode_by_id
);
530 nsnode
= nsnode_by_name
? nsnode_by_name
: nsnode_by_id
;
533 hres
= get_node(This
->doc_node
, nsnode
, TRUE
, &node
);
534 nsIDOMNode_Release(nsnode
);
536 if(SUCCEEDED(hres
)) {
537 hres
= IHTMLDOMNode_QueryInterface(&node
->IHTMLDOMNode_iface
, &IID_IHTMLElement
, (void**)pel
);
549 static HRESULT WINAPI
HTMLDocument3_getElementsByTagName(IHTMLDocument3
*iface
, BSTR v
,
550 IHTMLElementCollection
**pelColl
)
552 HTMLDocument
*This
= impl_from_IHTMLDocument3(iface
);
553 nsIDOMNodeList
*nslist
;
554 nsAString id_str
, ns_str
;
556 static const WCHAR str
[] = {'*',0};
558 TRACE("(%p)->(%s %p)\n", This
, debugstr_w(v
), pelColl
);
560 if(!This
->doc_node
->nsdoc
) {
561 WARN("NULL nsdoc\n");
565 nsAString_InitDepend(&id_str
, v
);
566 nsAString_InitDepend(&ns_str
, str
);
567 nsres
= nsIDOMHTMLDocument_GetElementsByTagNameNS(This
->doc_node
->nsdoc
, &ns_str
, &id_str
, &nslist
);
568 nsAString_Finish(&id_str
);
569 nsAString_Finish(&ns_str
);
571 ERR("GetElementByName failed: %08x\n", nsres
);
575 *pelColl
= create_collection_from_nodelist(This
->doc_node
, nslist
);
576 nsIDOMNodeList_Release(nslist
);
581 static const IHTMLDocument3Vtbl HTMLDocument3Vtbl
= {
582 HTMLDocument3_QueryInterface
,
583 HTMLDocument3_AddRef
,
584 HTMLDocument3_Release
,
585 HTMLDocument3_GetTypeInfoCount
,
586 HTMLDocument3_GetTypeInfo
,
587 HTMLDocument3_GetIDsOfNames
,
588 HTMLDocument3_Invoke
,
589 HTMLDocument3_releaseCapture
,
590 HTMLDocument3_recalc
,
591 HTMLDocument3_createTextNode
,
592 HTMLDocument3_get_documentElement
,
593 HTMLDocument3_uniqueID
,
594 HTMLDocument3_attachEvent
,
595 HTMLDocument3_detachEvent
,
596 HTMLDocument3_put_onrowsdelete
,
597 HTMLDocument3_get_onrowsdelete
,
598 HTMLDocument3_put_onrowsinserted
,
599 HTMLDocument3_get_onrowsinserted
,
600 HTMLDocument3_put_oncellchange
,
601 HTMLDocument3_get_oncellchange
,
602 HTMLDocument3_put_ondatasetchanged
,
603 HTMLDocument3_get_ondatasetchanged
,
604 HTMLDocument3_put_ondataavailable
,
605 HTMLDocument3_get_ondataavailable
,
606 HTMLDocument3_put_ondatasetcomplete
,
607 HTMLDocument3_get_ondatasetcomplete
,
608 HTMLDocument3_put_onpropertychange
,
609 HTMLDocument3_get_onpropertychange
,
610 HTMLDocument3_put_dir
,
611 HTMLDocument3_get_dir
,
612 HTMLDocument3_put_oncontextmenu
,
613 HTMLDocument3_get_oncontextmenu
,
614 HTMLDocument3_put_onstop
,
615 HTMLDocument3_get_onstop
,
616 HTMLDocument3_createDocumentFragment
,
617 HTMLDocument3_get_parentDocument
,
618 HTMLDocument3_put_enableDownload
,
619 HTMLDocument3_get_enableDownload
,
620 HTMLDocument3_put_baseUrl
,
621 HTMLDocument3_get_baseUrl
,
622 HTMLDocument3_get_childNodes
,
623 HTMLDocument3_put_inheritStyleSheets
,
624 HTMLDocument3_get_inheritStyleSheets
,
625 HTMLDocument3_put_onbeforeeditfocus
,
626 HTMLDocument3_get_onbeforeeditfocus
,
627 HTMLDocument3_getElementsByName
,
628 HTMLDocument3_getElementById
,
629 HTMLDocument3_getElementsByTagName
632 static inline HTMLDocument
*impl_from_IHTMLDocument4(IHTMLDocument4
*iface
)
634 return CONTAINING_RECORD(iface
, HTMLDocument
, IHTMLDocument4_iface
);
637 static HRESULT WINAPI
HTMLDocument4_QueryInterface(IHTMLDocument4
*iface
,
638 REFIID riid
, void **ppv
)
640 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
641 return htmldoc_query_interface(This
, riid
, ppv
);
644 static ULONG WINAPI
HTMLDocument4_AddRef(IHTMLDocument4
*iface
)
646 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
647 return htmldoc_addref(This
);
650 static ULONG WINAPI
HTMLDocument4_Release(IHTMLDocument4
*iface
)
652 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
653 return htmldoc_release(This
);
656 static HRESULT WINAPI
HTMLDocument4_GetTypeInfoCount(IHTMLDocument4
*iface
, UINT
*pctinfo
)
658 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
659 return IDispatchEx_GetTypeInfoCount(&This
->IDispatchEx_iface
, pctinfo
);
662 static HRESULT WINAPI
HTMLDocument4_GetTypeInfo(IHTMLDocument4
*iface
, UINT iTInfo
,
663 LCID lcid
, ITypeInfo
**ppTInfo
)
665 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
666 return IDispatchEx_GetTypeInfo(&This
->IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
669 static HRESULT WINAPI
HTMLDocument4_GetIDsOfNames(IHTMLDocument4
*iface
, REFIID riid
,
670 LPOLESTR
*rgszNames
, UINT cNames
,
671 LCID lcid
, DISPID
*rgDispId
)
673 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
674 return IDispatchEx_GetIDsOfNames(&This
->IDispatchEx_iface
, riid
, rgszNames
, cNames
, lcid
,
678 static HRESULT WINAPI
HTMLDocument4_Invoke(IHTMLDocument4
*iface
, DISPID dispIdMember
,
679 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
680 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
682 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
683 return IDispatchEx_Invoke(&This
->IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
684 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
687 static HRESULT WINAPI
HTMLDocument4_focus(IHTMLDocument4
*iface
)
689 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
690 nsIDOMHTMLElement
*nsbody
;
693 TRACE("(%p)->()\n", This
);
695 nsres
= nsIDOMHTMLDocument_GetBody(This
->doc_node
->nsdoc
, &nsbody
);
696 if(NS_FAILED(nsres
) || !nsbody
) {
697 ERR("GetBody failed: %08x\n", nsres
);
701 nsres
= nsIDOMHTMLElement_Focus(nsbody
);
702 nsIDOMHTMLElement_Release(nsbody
);
703 if(NS_FAILED(nsres
)) {
704 ERR("Focus failed: %08x\n", nsres
);
711 static HRESULT WINAPI
HTMLDocument4_hasFocus(IHTMLDocument4
*iface
, VARIANT_BOOL
*pfFocus
)
713 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
714 FIXME("(%p)->(%p)\n", This
, pfFocus
);
718 static HRESULT WINAPI
HTMLDocument4_put_onselectionchange(IHTMLDocument4
*iface
, VARIANT v
)
720 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
721 FIXME("(%p)->(%s)\n", This
, debugstr_variant(&v
));
725 static HRESULT WINAPI
HTMLDocument4_get_onselectionchange(IHTMLDocument4
*iface
, VARIANT
*p
)
727 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
728 FIXME("(%p)->(%p)\n", This
, p
);
732 static HRESULT WINAPI
HTMLDocument4_get_namespace(IHTMLDocument4
*iface
, IDispatch
**p
)
734 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
735 FIXME("(%p)->(%p)\n", This
, p
);
739 static HRESULT WINAPI
HTMLDocument4_createDocumentFromUrl(IHTMLDocument4
*iface
, BSTR bstrUrl
,
740 BSTR bstrOptions
, IHTMLDocument2
**newDoc
)
742 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
743 FIXME("(%p)->(%s %s %p)\n", This
, debugstr_w(bstrUrl
), debugstr_w(bstrOptions
), newDoc
);
747 static HRESULT WINAPI
HTMLDocument4_put_media(IHTMLDocument4
*iface
, BSTR v
)
749 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
750 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
754 static HRESULT WINAPI
HTMLDocument4_get_media(IHTMLDocument4
*iface
, BSTR
*p
)
756 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
757 FIXME("(%p)->(%p)\n", This
, p
);
761 static HRESULT WINAPI
HTMLDocument4_createEventObject(IHTMLDocument4
*iface
,
762 VARIANT
*pvarEventObject
, IHTMLEventObj
**ppEventObj
)
764 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
765 FIXME("(%p)->(%p %p)\n", This
, pvarEventObject
, ppEventObj
);
769 static HRESULT WINAPI
HTMLDocument4_fireEvent(IHTMLDocument4
*iface
, BSTR bstrEventName
,
770 VARIANT
*pvarEventObject
, VARIANT_BOOL
*pfCanceled
)
772 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
773 FIXME("(%p)->(%s %p %p)\n", This
, debugstr_w(bstrEventName
), pvarEventObject
, pfCanceled
);
777 static HRESULT WINAPI
HTMLDocument4_createRenderStyle(IHTMLDocument4
*iface
, BSTR v
,
778 IHTMLRenderStyle
**ppIHTMLRenderStyle
)
780 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
781 FIXME("(%p)->(%s %p)\n", This
, debugstr_w(v
), ppIHTMLRenderStyle
);
785 static HRESULT WINAPI
HTMLDocument4_put_oncontrolselect(IHTMLDocument4
*iface
, VARIANT v
)
787 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
788 FIXME("(%p)->(%s)\n", This
, debugstr_variant(&v
));
792 static HRESULT WINAPI
HTMLDocument4_get_oncontrolselect(IHTMLDocument4
*iface
, VARIANT
*p
)
794 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
795 FIXME("(%p)->(%p)\n", This
, p
);
799 static HRESULT WINAPI
HTMLDocument4_get_URLEncoded(IHTMLDocument4
*iface
, BSTR
*p
)
801 HTMLDocument
*This
= impl_from_IHTMLDocument4(iface
);
802 FIXME("(%p)->(%p)\n", This
, p
);
806 static const IHTMLDocument4Vtbl HTMLDocument4Vtbl
= {
807 HTMLDocument4_QueryInterface
,
808 HTMLDocument4_AddRef
,
809 HTMLDocument4_Release
,
810 HTMLDocument4_GetTypeInfoCount
,
811 HTMLDocument4_GetTypeInfo
,
812 HTMLDocument4_GetIDsOfNames
,
813 HTMLDocument4_Invoke
,
815 HTMLDocument4_hasFocus
,
816 HTMLDocument4_put_onselectionchange
,
817 HTMLDocument4_get_onselectionchange
,
818 HTMLDocument4_get_namespace
,
819 HTMLDocument4_createDocumentFromUrl
,
820 HTMLDocument4_put_media
,
821 HTMLDocument4_get_media
,
822 HTMLDocument4_createEventObject
,
823 HTMLDocument4_fireEvent
,
824 HTMLDocument4_createRenderStyle
,
825 HTMLDocument4_put_oncontrolselect
,
826 HTMLDocument4_get_oncontrolselect
,
827 HTMLDocument4_get_URLEncoded
830 void HTMLDocument_HTMLDocument3_Init(HTMLDocument
*This
)
832 This
->IHTMLDocument3_iface
.lpVtbl
= &HTMLDocument3Vtbl
;
833 This
->IHTMLDocument4_iface
.lpVtbl
= &HTMLDocument4Vtbl
;