imagehlp: Use the IMAGE_FIRST_SECTION helper macro.
[wine.git] / dlls / mshtml / oleobj.c
blob870500ff0abf0b803a0729fd6deb7b85393c870e
1 /*
2 * Copyright 2005 Jacek Caban
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
19 #include <stdarg.h>
20 #include <stdio.h>
22 #define COBJMACROS
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "ole2.h"
28 #include "shlguid.h"
29 #include "shdeprecated.h"
30 #include "mscoree.h"
31 #include "mshtmdid.h"
32 #include "idispids.h"
34 #include "wine/debug.h"
36 #include "mshtml_private.h"
37 #include "htmlevent.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
41 #define DOCHOST_DOCCANNAVIGATE 0
43 typedef struct {
44 IEnumUnknown IEnumUnknown_iface;
45 LONG ref;
46 } EnumUnknown;
48 static inline EnumUnknown *impl_from_IEnumUnknown(IEnumUnknown *iface)
50 return CONTAINING_RECORD(iface, EnumUnknown, IEnumUnknown_iface);
53 static HRESULT WINAPI EnumUnknown_QueryInterface(IEnumUnknown *iface, REFIID riid, void **ppv)
55 EnumUnknown *This = impl_from_IEnumUnknown(iface);
57 if(IsEqualGUID(&IID_IUnknown, riid)) {
58 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
59 *ppv = &This->IEnumUnknown_iface;
60 }else if(IsEqualGUID(&IID_IEnumUnknown, riid)) {
61 TRACE("(%p)->(IID_IEnumUnknown %p)\n", This, ppv);
62 *ppv = &This->IEnumUnknown_iface;
63 }else {
64 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
65 *ppv = NULL;
66 return E_NOINTERFACE;
69 IUnknown_AddRef((IUnknown*)*ppv);
70 return S_OK;
73 static ULONG WINAPI EnumUnknown_AddRef(IEnumUnknown *iface)
75 EnumUnknown *This = impl_from_IEnumUnknown(iface);
76 LONG ref = InterlockedIncrement(&This->ref);
78 TRACE("(%p) ref=%ld\n", This, ref);
80 return ref;
83 static ULONG WINAPI EnumUnknown_Release(IEnumUnknown *iface)
85 EnumUnknown *This = impl_from_IEnumUnknown(iface);
86 LONG ref = InterlockedDecrement(&This->ref);
88 TRACE("(%p) ref=%ld\n", This, ref);
90 if(!ref)
91 free(This);
93 return ref;
96 static HRESULT WINAPI EnumUnknown_Next(IEnumUnknown *iface, ULONG celt, IUnknown **rgelt, ULONG *pceltFetched)
98 EnumUnknown *This = impl_from_IEnumUnknown(iface);
100 TRACE("(%p)->(%lu %p %p)\n", This, celt, rgelt, pceltFetched);
102 /* FIXME: It's not clear if we should ever return something here */
103 if(pceltFetched)
104 *pceltFetched = 0;
105 return S_FALSE;
108 static HRESULT WINAPI EnumUnknown_Skip(IEnumUnknown *iface, ULONG celt)
110 EnumUnknown *This = impl_from_IEnumUnknown(iface);
111 FIXME("(%p)->(%lu)\n", This, celt);
112 return E_NOTIMPL;
115 static HRESULT WINAPI EnumUnknown_Reset(IEnumUnknown *iface)
117 EnumUnknown *This = impl_from_IEnumUnknown(iface);
118 FIXME("(%p)\n", This);
119 return E_NOTIMPL;
122 static HRESULT WINAPI EnumUnknown_Clone(IEnumUnknown *iface, IEnumUnknown **ppenum)
124 EnumUnknown *This = impl_from_IEnumUnknown(iface);
125 FIXME("(%p)->(%p)\n", This, ppenum);
126 return E_NOTIMPL;
129 static const IEnumUnknownVtbl EnumUnknownVtbl = {
130 EnumUnknown_QueryInterface,
131 EnumUnknown_AddRef,
132 EnumUnknown_Release,
133 EnumUnknown_Next,
134 EnumUnknown_Skip,
135 EnumUnknown_Reset,
136 EnumUnknown_Clone
139 /**********************************************************
140 * IOleObject implementation
143 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleObject(IOleObject *iface)
145 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleObject_iface);
148 static HRESULT WINAPI DocNodeOleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
150 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
151 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
154 static ULONG WINAPI DocNodeOleObject_AddRef(IOleObject *iface)
156 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
157 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
160 static ULONG WINAPI DocNodeOleObject_Release(IOleObject *iface)
162 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
163 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
166 static HRESULT WINAPI DocNodeOleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
168 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
169 return IOleObject_SetClientSite(&This->doc_obj->IOleObject_iface, pClientSite);
172 static HRESULT WINAPI DocNodeOleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite)
174 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
175 return IOleObject_GetClientSite(&This->doc_obj->IOleObject_iface, ppClientSite);
178 static HRESULT WINAPI DocNodeOleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
180 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
181 FIXME("(%p)->(%s %s)\n", This, debugstr_w(szContainerApp), debugstr_w(szContainerObj));
182 return E_NOTIMPL;
185 static HRESULT WINAPI DocNodeOleObject_Close(IOleObject *iface, DWORD dwSaveOption)
187 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
188 return IOleObject_Close(&This->doc_obj->IOleObject_iface, dwSaveOption);
191 static HRESULT WINAPI DocNodeOleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker *pmk)
193 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
194 FIXME("(%p %ld %p)->()\n", This, dwWhichMoniker, pmk);
195 return E_NOTIMPL;
198 static HRESULT WINAPI DocNodeOleObject_GetMoniker(IOleObject *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
200 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
201 FIXME("(%p)->(%ld %ld %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
202 return E_NOTIMPL;
205 static HRESULT WINAPI DocNodeOleObject_InitFromData(IOleObject *iface, IDataObject *pDataObject, BOOL fCreation,
206 DWORD dwReserved)
208 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
209 FIXME("(%p)->(%p %x %ld)\n", This, pDataObject, fCreation, dwReserved);
210 return E_NOTIMPL;
213 static HRESULT WINAPI DocNodeOleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved, IDataObject **ppDataObject)
215 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
216 FIXME("(%p)->(%ld %p)\n", This, dwReserved, ppDataObject);
217 return E_NOTIMPL;
220 static HRESULT WINAPI DocNodeOleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite,
221 LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
223 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
224 return IOleObject_DoVerb(&This->doc_obj->IOleObject_iface, iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect);
227 static HRESULT WINAPI DocNodeOleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
229 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
230 FIXME("(%p)->(%p)\n", This, ppEnumOleVerb);
231 return E_NOTIMPL;
234 static HRESULT WINAPI DocNodeOleObject_Update(IOleObject *iface)
236 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
237 FIXME("(%p)\n", This);
238 return E_NOTIMPL;
241 static HRESULT WINAPI DocNodeOleObject_IsUpToDate(IOleObject *iface)
243 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
244 FIXME("(%p)\n", This);
245 return E_NOTIMPL;
248 static HRESULT WINAPI DocNodeOleObject_GetUserClassID(IOleObject *iface, CLSID *pClsid)
250 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
251 return IOleObject_GetUserClassID(&This->doc_obj->IOleObject_iface, pClsid);
254 static HRESULT WINAPI DocNodeOleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType, LPOLESTR *pszUserType)
256 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
257 FIXME("(%p)->(%ld %p)\n", This, dwFormOfType, pszUserType);
258 return E_NOTIMPL;
261 static HRESULT WINAPI DocNodeOleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
263 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
264 return IOleObject_SetExtent(&This->doc_obj->IOleObject_iface, dwDrawAspect, psizel);
267 static HRESULT WINAPI DocNodeOleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
269 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
270 return IOleObject_GetExtent(&This->doc_obj->IOleObject_iface, dwDrawAspect, psizel);
273 static HRESULT WINAPI DocNodeOleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink, DWORD *pdwConnection)
275 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
276 return IOleObject_Advise(&This->doc_obj->IOleObject_iface, pAdvSink, pdwConnection);
279 static HRESULT WINAPI DocNodeOleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
281 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
282 return IOleObject_Unadvise(&This->doc_obj->IOleObject_iface, dwConnection);
285 static HRESULT WINAPI DocNodeOleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
287 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
288 return IOleObject_EnumAdvise(&This->doc_obj->IOleObject_iface, ppenumAdvise);
291 static HRESULT WINAPI DocNodeOleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
293 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
294 FIXME("(%p)->(%ld %p)\n", This, dwAspect, pdwStatus);
295 return E_NOTIMPL;
298 static HRESULT WINAPI DocNodeOleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *pLogpal)
300 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleObject(iface);
301 FIXME("(%p)->(%p)\n", This, pLogpal);
302 return E_NOTIMPL;
305 static const IOleObjectVtbl DocNodeOleObjectVtbl = {
306 DocNodeOleObject_QueryInterface,
307 DocNodeOleObject_AddRef,
308 DocNodeOleObject_Release,
309 DocNodeOleObject_SetClientSite,
310 DocNodeOleObject_GetClientSite,
311 DocNodeOleObject_SetHostNames,
312 DocNodeOleObject_Close,
313 DocNodeOleObject_SetMoniker,
314 DocNodeOleObject_GetMoniker,
315 DocNodeOleObject_InitFromData,
316 DocNodeOleObject_GetClipboardData,
317 DocNodeOleObject_DoVerb,
318 DocNodeOleObject_EnumVerbs,
319 DocNodeOleObject_Update,
320 DocNodeOleObject_IsUpToDate,
321 DocNodeOleObject_GetUserClassID,
322 DocNodeOleObject_GetUserType,
323 DocNodeOleObject_SetExtent,
324 DocNodeOleObject_GetExtent,
325 DocNodeOleObject_Advise,
326 DocNodeOleObject_Unadvise,
327 DocNodeOleObject_EnumAdvise,
328 DocNodeOleObject_GetMiscStatus,
329 DocNodeOleObject_SetColorScheme
332 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleObject(IOleObject *iface)
334 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleObject_iface);
337 static HRESULT WINAPI DocObjOleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
339 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
340 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
343 static ULONG WINAPI DocObjOleObject_AddRef(IOleObject *iface)
345 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
346 return IUnknown_AddRef(This->outer_unk);
349 static ULONG WINAPI DocObjOleObject_Release(IOleObject *iface)
351 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
352 return IUnknown_Release(This->outer_unk);
355 static void update_hostinfo(HTMLDocumentObj *This, DOCHOSTUIINFO *hostinfo)
357 nsIScrollable *scrollable;
358 nsresult nsres;
360 if(!This->nscontainer)
361 return;
363 nsres = nsIWebBrowser_QueryInterface(This->nscontainer->webbrowser, &IID_nsIScrollable, (void**)&scrollable);
364 if(NS_SUCCEEDED(nsres)) {
365 nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_Y,
366 (hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO) ? Scrollbar_Never : Scrollbar_Auto);
367 if(NS_FAILED(nsres))
368 ERR("Could not set default Y scrollbar prefs: %08lx\n", nsres);
370 nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_X,
371 hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO ? Scrollbar_Never : Scrollbar_Auto);
372 if(NS_FAILED(nsres))
373 ERR("Could not set default X scrollbar prefs: %08lx\n", nsres);
375 nsIScrollable_Release(scrollable);
376 }else {
377 ERR("Could not get nsIScrollable: %08lx\n", nsres);
381 /* Calls undocumented 84 cmd of CGID_ShellDocView */
382 void call_docview_84(HTMLDocumentObj *doc)
384 IOleCommandTarget *olecmd;
385 VARIANT var;
386 HRESULT hres;
388 if(!doc->client)
389 return;
391 hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd);
392 if(FAILED(hres))
393 return;
395 VariantInit(&var);
396 hres = IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 84, 0, NULL, &var);
397 IOleCommandTarget_Release(olecmd);
398 if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL)
399 FIXME("handle result\n");
402 void set_document_navigation(HTMLDocumentObj *doc, BOOL doc_can_navigate)
404 VARIANT var;
406 if(!doc->client_cmdtrg)
407 return;
409 if(doc_can_navigate) {
410 V_VT(&var) = VT_UNKNOWN;
411 V_UNKNOWN(&var) = (IUnknown*)&doc->window->base.IHTMLWindow2_iface;
414 IOleCommandTarget_Exec(doc->client_cmdtrg, &CGID_DocHostCmdPriv, DOCHOST_DOCCANNAVIGATE, 0,
415 doc_can_navigate ? &var : NULL, NULL);
418 static void load_settings(HTMLDocumentObj *doc)
420 HKEY settings_key;
421 DWORD val, size;
422 LONG res;
424 res = RegOpenKeyW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Internet Explorer", &settings_key);
425 if(res != ERROR_SUCCESS)
426 return;
428 size = sizeof(val);
429 res = RegGetValueW(settings_key, L"Zoom", L"ZoomFactor", RRF_RT_REG_DWORD, NULL, &val, &size);
430 RegCloseKey(settings_key);
431 if(res == ERROR_SUCCESS)
432 set_viewer_zoom(doc->nscontainer, (float)val/100000);
435 static HRESULT WINAPI DocObjOleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
437 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
438 IBrowserService *browser_service;
439 IOleCommandTarget *cmdtrg = NULL;
440 IOleWindow *ole_window;
441 BOOL hostui_setup;
442 VARIANT silent;
443 HWND hwnd;
444 HRESULT hres;
446 TRACE("(%p)->(%p)\n", This, pClientSite);
448 if(pClientSite == This->client)
449 return S_OK;
451 if(This->client)
452 This->nscontainer->usermode = UNKNOWN_USERMODE;
454 unlink_ref(&This->client);
455 unlink_ref(&This->client_cmdtrg);
456 if(!This->custom_hostui)
457 unlink_ref(&This->hostui);
458 unlink_ref(&This->doc_object_service);
459 unlink_ref(&This->webbrowser);
460 unlink_ref(&This->browser_service);
461 unlink_ref(&This->travel_log);
463 memset(&This->hostinfo, 0, sizeof(DOCHOSTUIINFO));
465 if(!pClientSite)
466 return S_OK;
468 IOleClientSite_AddRef(pClientSite);
469 This->client = pClientSite;
471 hostui_setup = This->hostui_setup;
473 if(!This->hostui) {
474 IDocHostUIHandler *uihandler;
476 This->custom_hostui = FALSE;
478 hres = IOleClientSite_QueryInterface(pClientSite, &IID_IDocHostUIHandler, (void**)&uihandler);
479 if(SUCCEEDED(hres))
480 This->hostui = uihandler;
483 if(This->hostui) {
484 DOCHOSTUIINFO hostinfo;
485 LPOLESTR key_path = NULL, override_key_path = NULL;
486 IDocHostUIHandler2 *uihandler2;
488 memset(&hostinfo, 0, sizeof(DOCHOSTUIINFO));
489 hostinfo.cbSize = sizeof(DOCHOSTUIINFO);
490 hres = IDocHostUIHandler_GetHostInfo(This->hostui, &hostinfo);
491 if(SUCCEEDED(hres)) {
492 TRACE("hostinfo = {%lu %08lx %08lx %s %s}\n",
493 hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick,
494 debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS));
495 update_hostinfo(This, &hostinfo);
496 This->hostinfo = hostinfo;
499 if(!hostui_setup) {
500 hres = IDocHostUIHandler_GetOptionKeyPath(This->hostui, &key_path, 0);
501 if(hres == S_OK && key_path) {
502 if(key_path[0]) {
503 /* FIXME: use key_path */
504 FIXME("key_path = %s\n", debugstr_w(key_path));
506 CoTaskMemFree(key_path);
509 hres = IDocHostUIHandler_QueryInterface(This->hostui, &IID_IDocHostUIHandler2,
510 (void**)&uihandler2);
511 if(SUCCEEDED(hres)) {
512 hres = IDocHostUIHandler2_GetOverrideKeyPath(uihandler2, &override_key_path, 0);
513 if(hres == S_OK && override_key_path) {
514 if(override_key_path[0]) {
515 /*FIXME: use override_key_path */
516 FIXME("override_key_path = %s\n", debugstr_w(override_key_path));
518 CoTaskMemFree(override_key_path);
520 IDocHostUIHandler2_Release(uihandler2);
523 This->hostui_setup = TRUE;
527 load_settings(This);
529 /* Native calls here GetWindow. What is it for?
530 * We don't have anything to do with it here (yet). */
531 hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleWindow, (void**)&ole_window);
532 if(SUCCEEDED(hres)) {
533 IOleWindow_GetWindow(ole_window, &hwnd);
534 IOleWindow_Release(ole_window);
537 hres = do_query_service((IUnknown*)pClientSite, &IID_IShellBrowser,
538 &IID_IBrowserService, (void**)&browser_service);
539 if(SUCCEEDED(hres)) {
540 ITravelLog *travel_log;
542 This->browser_service = (IUnknown*)browser_service;
544 hres = IBrowserService_GetTravelLog(browser_service, &travel_log);
545 if(SUCCEEDED(hres))
546 This->travel_log = travel_log;
547 }else {
548 browser_service = NULL;
551 hres = IOleClientSite_QueryInterface(pClientSite, &IID_IOleCommandTarget, (void**)&cmdtrg);
552 if(SUCCEEDED(hres)) {
553 VARIANT var;
554 OLECMD cmd = {OLECMDID_SETPROGRESSTEXT, 0};
556 This->client_cmdtrg = cmdtrg;
558 if(!hostui_setup) {
559 IDocObjectService *doc_object_service;
560 IWebBrowser2 *wb;
562 set_document_navigation(This, TRUE);
564 if(browser_service) {
565 hres = IBrowserService_QueryInterface(browser_service,
566 &IID_IDocObjectService, (void**)&doc_object_service);
567 if(SUCCEEDED(hres)) {
568 This->doc_object_service = doc_object_service;
571 * Some embedding routines, esp. in regards to use of IDocObjectService, differ if
572 * embedder supports IWebBrowserApp.
574 hres = do_query_service((IUnknown*)pClientSite, &IID_IWebBrowserApp, &IID_IWebBrowser2, (void**)&wb);
575 if(SUCCEEDED(hres))
576 This->webbrowser = (IUnknown*)wb;
581 call_docview_84(This);
583 IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &cmd, NULL);
585 V_VT(&var) = VT_I4;
586 V_I4(&var) = 0;
587 IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSMAX,
588 OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL);
589 IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_SETPROGRESSPOS,
590 OLECMDEXECOPT_DONTPROMPTUSER, &var, NULL);
593 if(This->nscontainer->usermode == UNKNOWN_USERMODE)
594 IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERMODE);
596 IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface,
597 DISPID_AMBIENT_OFFLINEIFNOTCONNECTED);
599 hres = get_client_disp_property(This->client, DISPID_AMBIENT_SILENT, &silent);
600 if(SUCCEEDED(hres)) {
601 if(V_VT(&silent) != VT_BOOL)
602 WARN("silent = %s\n", debugstr_variant(&silent));
603 else if(V_BOOL(&silent))
604 FIXME("silent == true\n");
607 IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_USERAGENT);
608 IOleControl_OnAmbientPropertyChange(&This->IOleControl_iface, DISPID_AMBIENT_PALETTE);
610 return S_OK;
613 static HRESULT WINAPI DocObjOleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite)
615 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
617 TRACE("(%p)->(%p)\n", This, ppClientSite);
619 if(!ppClientSite)
620 return E_INVALIDARG;
622 if(This->client)
623 IOleClientSite_AddRef(This->client);
624 *ppClientSite = This->client;
626 return S_OK;
629 static HRESULT WINAPI DocObjOleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
631 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
632 FIXME("(%p)->(%s %s)\n", This, debugstr_w(szContainerApp), debugstr_w(szContainerObj));
633 return E_NOTIMPL;
636 static HRESULT WINAPI DocObjOleObject_Close(IOleObject *iface, DWORD dwSaveOption)
638 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
640 TRACE("(%p)->(%08lx)\n", This, dwSaveOption);
642 if(dwSaveOption == OLECLOSE_PROMPTSAVE)
643 FIXME("OLECLOSE_PROMPTSAVE not implemented\n");
645 if(This->in_place_active)
646 IOleInPlaceObjectWindowless_InPlaceDeactivate(&This->IOleInPlaceObjectWindowless_iface);
648 HTMLDocument_LockContainer(This, FALSE);
650 if(This->advise_holder)
651 IOleAdviseHolder_SendOnClose(This->advise_holder);
653 return S_OK;
656 static HRESULT WINAPI DocObjOleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker *pmk)
658 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
659 FIXME("(%p %ld %p)->()\n", This, dwWhichMoniker, pmk);
660 return E_NOTIMPL;
663 static HRESULT WINAPI DocObjOleObject_GetMoniker(IOleObject *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
665 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
666 FIXME("(%p)->(%ld %ld %p)\n", This, dwAssign, dwWhichMoniker, ppmk);
667 return E_NOTIMPL;
670 static HRESULT WINAPI DocObjOleObject_InitFromData(IOleObject *iface, IDataObject *pDataObject, BOOL fCreation,
671 DWORD dwReserved)
673 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
674 FIXME("(%p)->(%p %x %ld)\n", This, pDataObject, fCreation, dwReserved);
675 return E_NOTIMPL;
678 static HRESULT WINAPI DocObjOleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved, IDataObject **ppDataObject)
680 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
681 FIXME("(%p)->(%ld %p)\n", This, dwReserved, ppDataObject);
682 return E_NOTIMPL;
685 static HRESULT WINAPI DocObjOleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite,
686 LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
688 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
689 IOleDocumentSite *pDocSite;
690 HRESULT hres;
692 TRACE("(%p)->(%ld %p %p %ld %p %p)\n", This, iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect);
694 if(iVerb != OLEIVERB_SHOW && iVerb != OLEIVERB_UIACTIVATE && iVerb != OLEIVERB_INPLACEACTIVATE) {
695 FIXME("iVerb = %ld not supported\n", iVerb);
696 return E_NOTIMPL;
699 if(!pActiveSite)
700 pActiveSite = This->client;
702 hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleDocumentSite, (void**)&pDocSite);
703 if(SUCCEEDED(hres)) {
704 HTMLDocument_LockContainer(This, TRUE);
706 /* FIXME: Create new IOleDocumentView. See CreateView for more info. */
707 hres = IOleDocumentSite_ActivateMe(pDocSite, &This->IOleDocumentView_iface);
708 IOleDocumentSite_Release(pDocSite);
709 }else {
710 hres = IOleDocumentView_UIActivate(&This->IOleDocumentView_iface, TRUE);
711 if(SUCCEEDED(hres)) {
712 if(lprcPosRect) {
713 RECT rect; /* We need to pass rect as not const pointer */
714 rect = *lprcPosRect;
715 IOleDocumentView_SetRect(&This->IOleDocumentView_iface, &rect);
717 IOleDocumentView_Show(&This->IOleDocumentView_iface, TRUE);
721 return hres;
724 static HRESULT WINAPI DocObjOleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
726 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
727 FIXME("(%p)->(%p)\n", This, ppEnumOleVerb);
728 return E_NOTIMPL;
731 static HRESULT WINAPI DocObjOleObject_Update(IOleObject *iface)
733 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
734 FIXME("(%p)\n", This);
735 return E_NOTIMPL;
738 static HRESULT WINAPI DocObjOleObject_IsUpToDate(IOleObject *iface)
740 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
741 FIXME("(%p)\n", This);
742 return E_NOTIMPL;
745 static HRESULT WINAPI DocObjOleObject_GetUserClassID(IOleObject *iface, CLSID *pClsid)
747 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
749 TRACE("(%p)->(%p)\n", This, pClsid);
751 if(!pClsid)
752 return E_INVALIDARG;
754 *pClsid = CLSID_HTMLDocument;
755 return S_OK;
758 static HRESULT WINAPI DocObjOleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType, LPOLESTR *pszUserType)
760 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
761 FIXME("(%p)->(%ld %p)\n", This, dwFormOfType, pszUserType);
762 return E_NOTIMPL;
765 static HRESULT WINAPI DocObjOleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
767 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
769 TRACE("(%p)->(%ld %p)\n", This, dwDrawAspect, psizel);
771 if (dwDrawAspect != DVASPECT_CONTENT)
772 return E_INVALIDARG;
774 This->extent = *psizel;
775 return S_OK;
778 static HRESULT WINAPI DocObjOleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
780 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
782 TRACE("(%p)->(%ld %p)\n", This, dwDrawAspect, psizel);
784 if (dwDrawAspect != DVASPECT_CONTENT)
785 return E_INVALIDARG;
787 *psizel = This->extent;
788 return S_OK;
791 static HRESULT WINAPI DocObjOleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink, DWORD *pdwConnection)
793 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
794 TRACE("(%p)->(%p %p)\n", This, pAdvSink, pdwConnection);
796 if(!pdwConnection)
797 return E_INVALIDARG;
799 if(!pAdvSink) {
800 *pdwConnection = 0;
801 return E_INVALIDARG;
804 if(!This->advise_holder) {
805 CreateOleAdviseHolder(&This->advise_holder);
806 if(!This->advise_holder)
807 return E_OUTOFMEMORY;
810 return IOleAdviseHolder_Advise(This->advise_holder, pAdvSink, pdwConnection);
813 static HRESULT WINAPI DocObjOleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
815 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
816 TRACE("(%p)->(%ld)\n", This, dwConnection);
818 if(!This->advise_holder)
819 return OLE_E_NOCONNECTION;
821 return IOleAdviseHolder_Unadvise(This->advise_holder, dwConnection);
824 static HRESULT WINAPI DocObjOleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
826 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
828 if(!This->advise_holder) {
829 *ppenumAdvise = NULL;
830 return S_OK;
833 return IOleAdviseHolder_EnumAdvise(This->advise_holder, ppenumAdvise);
836 static HRESULT WINAPI DocObjOleObject_GetMiscStatus(IOleObject *iface, DWORD dwAspect, DWORD *pdwStatus)
838 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
839 FIXME("(%p)->(%ld %p)\n", This, dwAspect, pdwStatus);
840 return E_NOTIMPL;
843 static HRESULT WINAPI DocObjOleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *pLogpal)
845 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleObject(iface);
846 FIXME("(%p)->(%p)\n", This, pLogpal);
847 return E_NOTIMPL;
850 static const IOleObjectVtbl DocObjOleObjectVtbl = {
851 DocObjOleObject_QueryInterface,
852 DocObjOleObject_AddRef,
853 DocObjOleObject_Release,
854 DocObjOleObject_SetClientSite,
855 DocObjOleObject_GetClientSite,
856 DocObjOleObject_SetHostNames,
857 DocObjOleObject_Close,
858 DocObjOleObject_SetMoniker,
859 DocObjOleObject_GetMoniker,
860 DocObjOleObject_InitFromData,
861 DocObjOleObject_GetClipboardData,
862 DocObjOleObject_DoVerb,
863 DocObjOleObject_EnumVerbs,
864 DocObjOleObject_Update,
865 DocObjOleObject_IsUpToDate,
866 DocObjOleObject_GetUserClassID,
867 DocObjOleObject_GetUserType,
868 DocObjOleObject_SetExtent,
869 DocObjOleObject_GetExtent,
870 DocObjOleObject_Advise,
871 DocObjOleObject_Unadvise,
872 DocObjOleObject_EnumAdvise,
873 DocObjOleObject_GetMiscStatus,
874 DocObjOleObject_SetColorScheme
877 /**********************************************************
878 * IOleDocument implementation
881 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleDocument(IOleDocument *iface)
883 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleDocument_iface);
886 static HRESULT WINAPI DocNodeOleDocument_QueryInterface(IOleDocument *iface, REFIID riid, void **ppv)
888 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
889 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
892 static ULONG WINAPI DocNodeOleDocument_AddRef(IOleDocument *iface)
894 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
895 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
898 static ULONG WINAPI DocNodeOleDocument_Release(IOleDocument *iface)
900 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
901 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
904 static HRESULT WINAPI DocNodeOleDocument_CreateView(IOleDocument *iface, IOleInPlaceSite *pIPSite, IStream *pstm,
905 DWORD dwReserved, IOleDocumentView **ppView)
907 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
908 return IOleDocument_CreateView(&This->doc_obj->IOleDocument_iface, pIPSite, pstm, dwReserved, ppView);
911 static HRESULT WINAPI DocNodeOleDocument_GetDocMiscStatus(IOleDocument *iface, DWORD *pdwStatus)
913 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
914 FIXME("(%p)->(%p)\n", This, pdwStatus);
915 return E_NOTIMPL;
918 static HRESULT WINAPI DocNodeOleDocument_EnumViews(IOleDocument *iface, IEnumOleDocumentViews **ppEnum,
919 IOleDocumentView **ppView)
921 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleDocument(iface);
922 FIXME("(%p)->(%p %p)\n", This, ppEnum, ppView);
923 return E_NOTIMPL;
926 static const IOleDocumentVtbl DocNodeOleDocumentVtbl = {
927 DocNodeOleDocument_QueryInterface,
928 DocNodeOleDocument_AddRef,
929 DocNodeOleDocument_Release,
930 DocNodeOleDocument_CreateView,
931 DocNodeOleDocument_GetDocMiscStatus,
932 DocNodeOleDocument_EnumViews
935 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleDocument(IOleDocument *iface)
937 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleDocument_iface);
940 static HRESULT WINAPI DocObjOleDocument_QueryInterface(IOleDocument *iface, REFIID riid, void **ppv)
942 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
943 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
946 static ULONG WINAPI DocObjOleDocument_AddRef(IOleDocument *iface)
948 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
949 return IUnknown_AddRef(This->outer_unk);
952 static ULONG WINAPI DocObjOleDocument_Release(IOleDocument *iface)
954 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
955 return IUnknown_Release(This->outer_unk);
958 static HRESULT WINAPI DocObjOleDocument_CreateView(IOleDocument *iface, IOleInPlaceSite *pIPSite, IStream *pstm,
959 DWORD dwReserved, IOleDocumentView **ppView)
961 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
962 HRESULT hres;
964 TRACE("(%p)->(%p %p %ld %p)\n", This, pIPSite, pstm, dwReserved, ppView);
966 if(!ppView)
967 return E_INVALIDARG;
969 /* FIXME:
970 * Windows implementation creates new IOleDocumentView when function is called for the
971 * first time and returns E_FAIL when it is called for the second time, but it doesn't matter
972 * if the application uses returned interfaces, passed to ActivateMe or returned by
973 * QueryInterface, so there is no reason to create new interface. This needs more testing.
976 if(pIPSite) {
977 hres = IOleDocumentView_SetInPlaceSite(&This->IOleDocumentView_iface, pIPSite);
978 if(FAILED(hres))
979 return hres;
982 if(pstm)
983 FIXME("pstm is not supported\n");
985 IOleDocumentView_AddRef(&This->IOleDocumentView_iface);
986 *ppView = &This->IOleDocumentView_iface;
987 return S_OK;
990 static HRESULT WINAPI DocObjOleDocument_GetDocMiscStatus(IOleDocument *iface, DWORD *pdwStatus)
992 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
993 FIXME("(%p)->(%p)\n", This, pdwStatus);
994 return E_NOTIMPL;
997 static HRESULT WINAPI DocObjOleDocument_EnumViews(IOleDocument *iface, IEnumOleDocumentViews **ppEnum,
998 IOleDocumentView **ppView)
1000 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleDocument(iface);
1001 FIXME("(%p)->(%p %p)\n", This, ppEnum, ppView);
1002 return E_NOTIMPL;
1005 static const IOleDocumentVtbl DocObjOleDocumentVtbl = {
1006 DocObjOleDocument_QueryInterface,
1007 DocObjOleDocument_AddRef,
1008 DocObjOleDocument_Release,
1009 DocObjOleDocument_CreateView,
1010 DocObjOleDocument_GetDocMiscStatus,
1011 DocObjOleDocument_EnumViews
1014 /**********************************************************
1015 * IOleControl implementation
1018 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleControl(IOleControl *iface)
1020 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleControl_iface);
1023 static HRESULT WINAPI DocNodeOleControl_QueryInterface(IOleControl *iface, REFIID riid, void **ppv)
1025 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1026 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1029 static ULONG WINAPI DocNodeOleControl_AddRef(IOleControl *iface)
1031 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1032 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1035 static ULONG WINAPI DocNodeOleControl_Release(IOleControl *iface)
1037 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1038 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1041 static HRESULT WINAPI DocNodeOleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
1043 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1044 FIXME("(%p)->(%p)\n", This, pCI);
1045 return E_NOTIMPL;
1048 static HRESULT WINAPI DocNodeOleControl_OnMnemonic(IOleControl *iface, MSG *pMsg)
1050 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1051 FIXME("(%p)->(%p)\n", This, pMsg);
1052 return E_NOTIMPL;
1055 static HRESULT WINAPI DocNodeOleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
1057 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1058 return IOleControl_OnAmbientPropertyChange(&This->doc_obj->IOleControl_iface, dispID);
1061 static HRESULT WINAPI DocNodeOleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
1063 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleControl(iface);
1064 FIXME("(%p)->(%x)\n", This, bFreeze);
1065 return E_NOTIMPL;
1068 static const IOleControlVtbl DocNodeOleControlVtbl = {
1069 DocNodeOleControl_QueryInterface,
1070 DocNodeOleControl_AddRef,
1071 DocNodeOleControl_Release,
1072 DocNodeOleControl_GetControlInfo,
1073 DocNodeOleControl_OnMnemonic,
1074 DocNodeOleControl_OnAmbientPropertyChange,
1075 DocNodeOleControl_FreezeEvents
1078 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleControl(IOleControl *iface)
1080 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleControl_iface);
1083 static HRESULT WINAPI DocObjOleControl_QueryInterface(IOleControl *iface, REFIID riid, void **ppv)
1085 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1086 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
1089 static ULONG WINAPI DocObjOleControl_AddRef(IOleControl *iface)
1091 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1092 return IUnknown_AddRef(This->outer_unk);
1095 static ULONG WINAPI DocObjOleControl_Release(IOleControl *iface)
1097 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1098 return IUnknown_Release(This->outer_unk);
1101 static HRESULT WINAPI DocObjOleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
1103 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1104 FIXME("(%p)->(%p)\n", This, pCI);
1105 return E_NOTIMPL;
1108 static HRESULT WINAPI DocObjOleControl_OnMnemonic(IOleControl *iface, MSG *pMsg)
1110 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1111 FIXME("(%p)->(%p)\n", This, pMsg);
1112 return E_NOTIMPL;
1115 HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res)
1117 IDispatch *disp = NULL;
1118 DISPPARAMS dispparams = {NULL, 0};
1119 UINT err;
1120 HRESULT hres;
1122 hres = IOleClientSite_QueryInterface(client, &IID_IDispatch, (void**)&disp);
1123 if(FAILED(hres)) {
1124 TRACE("Could not get IDispatch\n");
1125 return hres;
1128 VariantInit(res);
1130 hres = IDispatch_Invoke(disp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
1131 DISPATCH_PROPERTYGET, &dispparams, res, NULL, &err);
1133 IDispatch_Release(disp);
1135 return hres;
1138 static HRESULT on_change_dlcontrol(HTMLDocumentObj *This)
1140 VARIANT res;
1141 HRESULT hres;
1143 hres = get_client_disp_property(This->client, DISPID_AMBIENT_DLCONTROL, &res);
1144 if(SUCCEEDED(hres))
1145 FIXME("unsupported dlcontrol %08lx\n", V_I4(&res));
1147 return S_OK;
1150 static HRESULT WINAPI DocObjOleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
1152 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1153 IOleClientSite *client;
1154 VARIANT res;
1155 HRESULT hres;
1157 client = This->client;
1158 if(!client) {
1159 TRACE("client = NULL\n");
1160 return S_OK;
1163 switch(dispID) {
1164 case DISPID_AMBIENT_USERMODE:
1165 TRACE("(%p)->(DISPID_AMBIENT_USERMODE)\n", This);
1166 hres = get_client_disp_property(client, DISPID_AMBIENT_USERMODE, &res);
1167 if(FAILED(hres))
1168 return S_OK;
1170 if(V_VT(&res) == VT_BOOL) {
1171 if(V_BOOL(&res)) {
1172 This->nscontainer->usermode = BROWSEMODE;
1173 }else {
1174 FIXME("edit mode is not supported\n");
1175 This->nscontainer->usermode = EDITMODE;
1177 }else {
1178 FIXME("usermode=%s\n", debugstr_variant(&res));
1180 return S_OK;
1181 case DISPID_AMBIENT_DLCONTROL:
1182 TRACE("(%p)->(DISPID_AMBIENT_DLCONTROL)\n", This);
1183 return on_change_dlcontrol(This);
1184 case DISPID_AMBIENT_OFFLINEIFNOTCONNECTED:
1185 TRACE("(%p)->(DISPID_AMBIENT_OFFLINEIFNOTCONNECTED)\n", This);
1186 on_change_dlcontrol(This);
1187 hres = get_client_disp_property(client, DISPID_AMBIENT_OFFLINEIFNOTCONNECTED, &res);
1188 if(FAILED(hres))
1189 return S_OK;
1191 if(V_VT(&res) == VT_BOOL) {
1192 if(V_BOOL(&res)) {
1193 FIXME("offline connection is not supported\n");
1194 hres = E_FAIL;
1196 }else {
1197 FIXME("offlineconnected=%s\n", debugstr_variant(&res));
1199 return S_OK;
1200 case DISPID_AMBIENT_SILENT:
1201 TRACE("(%p)->(DISPID_AMBIENT_SILENT)\n", This);
1202 on_change_dlcontrol(This);
1203 hres = get_client_disp_property(client, DISPID_AMBIENT_SILENT, &res);
1204 if(FAILED(hres))
1205 return S_OK;
1207 if(V_VT(&res) == VT_BOOL) {
1208 if(V_BOOL(&res)) {
1209 FIXME("silent mode is not supported\n");
1211 }else {
1212 FIXME("silent=%s\n", debugstr_variant(&res));
1214 return S_OK;
1215 case DISPID_AMBIENT_USERAGENT:
1216 TRACE("(%p)->(DISPID_AMBIENT_USERAGENT)\n", This);
1217 hres = get_client_disp_property(client, DISPID_AMBIENT_USERAGENT, &res);
1218 if(FAILED(hres))
1219 return S_OK;
1221 FIXME("not supported AMBIENT_USERAGENT\n");
1222 return S_OK;
1223 case DISPID_AMBIENT_PALETTE:
1224 TRACE("(%p)->(DISPID_AMBIENT_PALETTE)\n", This);
1225 hres = get_client_disp_property(client, DISPID_AMBIENT_PALETTE, &res);
1226 if(FAILED(hres))
1227 return S_OK;
1229 FIXME("not supported AMBIENT_PALETTE\n");
1230 return S_OK;
1233 FIXME("(%p) unsupported dispID=%ld\n", This, dispID);
1234 return E_FAIL;
1237 static HRESULT WINAPI DocObjOleControl_FreezeEvents(IOleControl *iface, BOOL bFreeze)
1239 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleControl(iface);
1240 FIXME("(%p)->(%x)\n", This, bFreeze);
1241 return E_NOTIMPL;
1244 static const IOleControlVtbl DocObjOleControlVtbl = {
1245 DocObjOleControl_QueryInterface,
1246 DocObjOleControl_AddRef,
1247 DocObjOleControl_Release,
1248 DocObjOleControl_GetControlInfo,
1249 DocObjOleControl_OnMnemonic,
1250 DocObjOleControl_OnAmbientPropertyChange,
1251 DocObjOleControl_FreezeEvents
1254 /**********************************************************
1255 * IOleInPlaceActiveObject implementation
1258 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleInPlaceActiveObject(IOleInPlaceActiveObject *iface)
1260 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleInPlaceActiveObject_iface);
1263 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject *iface, REFIID riid, void **ppv)
1265 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1266 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1269 static ULONG WINAPI DocNodeOleInPlaceActiveObject_AddRef(IOleInPlaceActiveObject *iface)
1271 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1272 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1275 static ULONG WINAPI DocNodeOleInPlaceActiveObject_Release(IOleInPlaceActiveObject *iface)
1277 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1278 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1281 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_GetWindow(IOleInPlaceActiveObject *iface, HWND *phwnd)
1283 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1284 return IOleInPlaceActiveObject_GetWindow(&This->doc_obj->IOleInPlaceActiveObject_iface, phwnd);
1287 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject *iface, BOOL fEnterMode)
1289 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1290 FIXME("(%p)->(%x)\n", This, fEnterMode);
1291 return E_NOTIMPL;
1294 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface, LPMSG lpmsg)
1296 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1297 FIXME("(%p)->(%p)\n", This, lpmsg);
1298 return E_NOTIMPL;
1301 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
1302 BOOL fActivate)
1304 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1305 return IOleInPlaceActiveObject_OnFrameWindowActivate(&This->doc_obj->IOleInPlaceActiveObject_iface, fActivate);
1308 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject *iface, BOOL fActivate)
1310 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1311 FIXME("(%p)->(%x)\n", This, fActivate);
1312 return E_NOTIMPL;
1315 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject *iface, LPCRECT prcBorder,
1316 IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow)
1318 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1319 FIXME("(%p)->(%p %p %x)\n", This, prcBorder, pUIWindow, fFrameWindow);
1320 return E_NOTIMPL;
1323 static HRESULT WINAPI DocNodeOleInPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject *iface, BOOL fEnable)
1325 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceActiveObject(iface);
1326 FIXME("(%p)->(%x)\n", This, fEnable);
1327 return E_NOTIMPL;
1330 static const IOleInPlaceActiveObjectVtbl DocNodeOleInPlaceActiveObjectVtbl = {
1331 DocNodeOleInPlaceActiveObject_QueryInterface,
1332 DocNodeOleInPlaceActiveObject_AddRef,
1333 DocNodeOleInPlaceActiveObject_Release,
1334 DocNodeOleInPlaceActiveObject_GetWindow,
1335 DocNodeOleInPlaceActiveObject_ContextSensitiveHelp,
1336 DocNodeOleInPlaceActiveObject_TranslateAccelerator,
1337 DocNodeOleInPlaceActiveObject_OnFrameWindowActivate,
1338 DocNodeOleInPlaceActiveObject_OnDocWindowActivate,
1339 DocNodeOleInPlaceActiveObject_ResizeBorder,
1340 DocNodeOleInPlaceActiveObject_EnableModeless
1343 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleInPlaceActiveObject(IOleInPlaceActiveObject *iface)
1345 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleInPlaceActiveObject_iface);
1348 static HRESULT WINAPI DocObjOleInPlaceActiveObject_QueryInterface(IOleInPlaceActiveObject *iface, REFIID riid, void **ppv)
1350 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1351 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
1354 static ULONG WINAPI DocObjOleInPlaceActiveObject_AddRef(IOleInPlaceActiveObject *iface)
1356 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1357 return IUnknown_AddRef(This->outer_unk);
1360 static ULONG WINAPI DocObjOleInPlaceActiveObject_Release(IOleInPlaceActiveObject *iface)
1362 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1363 return IUnknown_Release(This->outer_unk);
1366 static HRESULT WINAPI DocObjOleInPlaceActiveObject_GetWindow(IOleInPlaceActiveObject *iface, HWND *phwnd)
1368 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1370 TRACE("(%p)->(%p)\n", This, phwnd);
1372 if(!phwnd)
1373 return E_INVALIDARG;
1375 if(!This->in_place_active) {
1376 *phwnd = NULL;
1377 return E_FAIL;
1380 *phwnd = This->hwnd;
1381 return S_OK;
1384 static HRESULT WINAPI DocObjOleInPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceActiveObject *iface, BOOL fEnterMode)
1386 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1387 FIXME("(%p)->(%x)\n", This, fEnterMode);
1388 return E_NOTIMPL;
1391 static HRESULT WINAPI DocObjOleInPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface, LPMSG lpmsg)
1393 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1394 FIXME("(%p)->(%p)\n", This, lpmsg);
1395 return E_NOTIMPL;
1398 static HRESULT WINAPI DocObjOleInPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
1399 BOOL fActivate)
1401 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1403 TRACE("(%p)->(%x)\n", This, fActivate);
1405 if(This->hostui)
1406 IDocHostUIHandler_OnFrameWindowActivate(This->hostui, fActivate);
1408 return S_OK;
1411 static HRESULT WINAPI DocObjOleInPlaceActiveObject_OnDocWindowActivate(IOleInPlaceActiveObject *iface, BOOL fActivate)
1413 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1414 FIXME("(%p)->(%x)\n", This, fActivate);
1415 return E_NOTIMPL;
1418 static HRESULT WINAPI DocObjOleInPlaceActiveObject_ResizeBorder(IOleInPlaceActiveObject *iface, LPCRECT prcBorder,
1419 IOleInPlaceUIWindow *pUIWindow, BOOL fFrameWindow)
1421 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1422 FIXME("(%p)->(%p %p %x)\n", This, prcBorder, pUIWindow, fFrameWindow);
1423 return E_NOTIMPL;
1426 static HRESULT WINAPI DocObjOleInPlaceActiveObject_EnableModeless(IOleInPlaceActiveObject *iface, BOOL fEnable)
1428 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
1429 FIXME("(%p)->(%x)\n", This, fEnable);
1430 return E_NOTIMPL;
1433 static const IOleInPlaceActiveObjectVtbl DocObjOleInPlaceActiveObjectVtbl = {
1434 DocObjOleInPlaceActiveObject_QueryInterface,
1435 DocObjOleInPlaceActiveObject_AddRef,
1436 DocObjOleInPlaceActiveObject_Release,
1437 DocObjOleInPlaceActiveObject_GetWindow,
1438 DocObjOleInPlaceActiveObject_ContextSensitiveHelp,
1439 DocObjOleInPlaceActiveObject_TranslateAccelerator,
1440 DocObjOleInPlaceActiveObject_OnFrameWindowActivate,
1441 DocObjOleInPlaceActiveObject_OnDocWindowActivate,
1442 DocObjOleInPlaceActiveObject_ResizeBorder,
1443 DocObjOleInPlaceActiveObject_EnableModeless
1446 /**********************************************************
1447 * IOleInPlaceObjectWindowless implementation
1450 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleInPlaceObjectWindowless(IOleInPlaceObjectWindowless *iface)
1452 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleInPlaceObjectWindowless_iface);
1455 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_QueryInterface(IOleInPlaceObjectWindowless *iface,
1456 REFIID riid, void **ppv)
1458 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1459 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1462 static ULONG WINAPI DocNodeOleInPlaceObjectWindowless_AddRef(IOleInPlaceObjectWindowless *iface)
1464 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1465 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1468 static ULONG WINAPI DocNodeOleInPlaceObjectWindowless_Release(IOleInPlaceObjectWindowless *iface)
1470 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1471 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1474 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_GetWindow(IOleInPlaceObjectWindowless *iface,
1475 HWND *phwnd)
1477 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1478 return IOleInPlaceActiveObject_GetWindow(&This->IOleInPlaceActiveObject_iface, phwnd);
1481 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_ContextSensitiveHelp(IOleInPlaceObjectWindowless *iface,
1482 BOOL fEnterMode)
1484 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1485 return IOleInPlaceActiveObject_ContextSensitiveHelp(&This->IOleInPlaceActiveObject_iface, fEnterMode);
1488 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_InPlaceDeactivate(IOleInPlaceObjectWindowless *iface)
1490 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1491 return IOleInPlaceObjectWindowless_InPlaceDeactivate(&This->doc_obj->IOleInPlaceObjectWindowless_iface);
1494 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_UIDeactivate(IOleInPlaceObjectWindowless *iface)
1496 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1497 FIXME("(%p)\n", This);
1498 return E_NOTIMPL;
1501 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_SetObjectRects(IOleInPlaceObjectWindowless *iface,
1502 const RECT *pos, const RECT *clip)
1504 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1505 return IOleInPlaceObjectWindowless_SetObjectRects(&This->doc_obj->IOleInPlaceObjectWindowless_iface, pos, clip);
1508 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_ReactivateAndUndo(IOleInPlaceObjectWindowless *iface)
1510 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1511 FIXME("(%p)\n", This);
1512 return E_NOTIMPL;
1515 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_OnWindowMessage(IOleInPlaceObjectWindowless *iface,
1516 UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *lpResult)
1518 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1519 FIXME("(%p)->(%u %Iu %Iu %p)\n", This, msg, wParam, lParam, lpResult);
1520 return E_NOTIMPL;
1523 static HRESULT WINAPI DocNodeOleInPlaceObjectWindowless_GetDropTarget(IOleInPlaceObjectWindowless *iface,
1524 IDropTarget **ppDropTarget)
1526 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleInPlaceObjectWindowless(iface);
1527 FIXME("(%p)->(%p)\n", This, ppDropTarget);
1528 return E_NOTIMPL;
1531 static const IOleInPlaceObjectWindowlessVtbl DocNodeOleInPlaceObjectWindowlessVtbl = {
1532 DocNodeOleInPlaceObjectWindowless_QueryInterface,
1533 DocNodeOleInPlaceObjectWindowless_AddRef,
1534 DocNodeOleInPlaceObjectWindowless_Release,
1535 DocNodeOleInPlaceObjectWindowless_GetWindow,
1536 DocNodeOleInPlaceObjectWindowless_ContextSensitiveHelp,
1537 DocNodeOleInPlaceObjectWindowless_InPlaceDeactivate,
1538 DocNodeOleInPlaceObjectWindowless_UIDeactivate,
1539 DocNodeOleInPlaceObjectWindowless_SetObjectRects,
1540 DocNodeOleInPlaceObjectWindowless_ReactivateAndUndo,
1541 DocNodeOleInPlaceObjectWindowless_OnWindowMessage,
1542 DocNodeOleInPlaceObjectWindowless_GetDropTarget
1545 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleInPlaceObjectWindowless(IOleInPlaceObjectWindowless *iface)
1547 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleInPlaceObjectWindowless_iface);
1550 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_QueryInterface(IOleInPlaceObjectWindowless *iface,
1551 REFIID riid, void **ppv)
1553 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1554 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
1557 static ULONG WINAPI DocObjOleInPlaceObjectWindowless_AddRef(IOleInPlaceObjectWindowless *iface)
1559 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1560 return IUnknown_AddRef(This->outer_unk);
1563 static ULONG WINAPI DocObjOleInPlaceObjectWindowless_Release(IOleInPlaceObjectWindowless *iface)
1565 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1566 return IUnknown_Release(This->outer_unk);
1569 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_GetWindow(IOleInPlaceObjectWindowless *iface,
1570 HWND *phwnd)
1572 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1573 return IOleInPlaceActiveObject_GetWindow(&This->IOleInPlaceActiveObject_iface, phwnd);
1576 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_ContextSensitiveHelp(IOleInPlaceObjectWindowless *iface,
1577 BOOL fEnterMode)
1579 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1580 return IOleInPlaceActiveObject_ContextSensitiveHelp(&This->IOleInPlaceActiveObject_iface, fEnterMode);
1583 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_InPlaceDeactivate(IOleInPlaceObjectWindowless *iface)
1585 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1587 TRACE("(%p)\n", This);
1589 if(This->ui_active)
1590 IOleDocumentView_UIActivate(&This->IOleDocumentView_iface, FALSE);
1591 This->window_active = FALSE;
1593 if(!This->in_place_active)
1594 return S_OK;
1596 unlink_ref(&This->frame);
1597 if(This->hwnd) {
1598 ShowWindow(This->hwnd, SW_HIDE);
1599 SetWindowPos(This->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
1602 This->focus = FALSE;
1603 notif_focus(This);
1605 This->in_place_active = FALSE;
1606 if(This->ipsite) {
1607 IOleInPlaceSiteEx *ipsiteex;
1608 HRESULT hres;
1610 hres = IOleInPlaceSite_QueryInterface(This->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex);
1611 if(SUCCEEDED(hres)) {
1612 IOleInPlaceSiteEx_OnInPlaceDeactivateEx(ipsiteex, TRUE);
1613 IOleInPlaceSiteEx_Release(ipsiteex);
1614 }else {
1615 IOleInPlaceSite_OnInPlaceDeactivate(This->ipsite);
1619 return S_OK;
1622 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_UIDeactivate(IOleInPlaceObjectWindowless *iface)
1624 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1625 FIXME("(%p)\n", This);
1626 return E_NOTIMPL;
1629 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_SetObjectRects(IOleInPlaceObjectWindowless *iface,
1630 const RECT *pos, const RECT *clip)
1632 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1633 RECT r;
1635 TRACE("(%p)->(%s %s)\n", This, wine_dbgstr_rect(pos), wine_dbgstr_rect(clip));
1637 if(clip && !EqualRect(clip, pos))
1638 FIXME("Ignoring clip rect %s\n", wine_dbgstr_rect(clip));
1640 r = *pos;
1641 return IOleDocumentView_SetRect(&This->IOleDocumentView_iface, &r);
1644 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_ReactivateAndUndo(IOleInPlaceObjectWindowless *iface)
1646 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1647 FIXME("(%p)\n", This);
1648 return E_NOTIMPL;
1651 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_OnWindowMessage(IOleInPlaceObjectWindowless *iface,
1652 UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *lpResult)
1654 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1655 FIXME("(%p)->(%u %Iu %Iu %p)\n", This, msg, wParam, lParam, lpResult);
1656 return E_NOTIMPL;
1659 static HRESULT WINAPI DocObjOleInPlaceObjectWindowless_GetDropTarget(IOleInPlaceObjectWindowless *iface,
1660 IDropTarget **ppDropTarget)
1662 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceObjectWindowless(iface);
1663 FIXME("(%p)->(%p)\n", This, ppDropTarget);
1664 return E_NOTIMPL;
1667 static const IOleInPlaceObjectWindowlessVtbl DocObjOleInPlaceObjectWindowlessVtbl = {
1668 DocObjOleInPlaceObjectWindowless_QueryInterface,
1669 DocObjOleInPlaceObjectWindowless_AddRef,
1670 DocObjOleInPlaceObjectWindowless_Release,
1671 DocObjOleInPlaceObjectWindowless_GetWindow,
1672 DocObjOleInPlaceObjectWindowless_ContextSensitiveHelp,
1673 DocObjOleInPlaceObjectWindowless_InPlaceDeactivate,
1674 DocObjOleInPlaceObjectWindowless_UIDeactivate,
1675 DocObjOleInPlaceObjectWindowless_SetObjectRects,
1676 DocObjOleInPlaceObjectWindowless_ReactivateAndUndo,
1677 DocObjOleInPlaceObjectWindowless_OnWindowMessage,
1678 DocObjOleInPlaceObjectWindowless_GetDropTarget
1681 /**********************************************************
1682 * IObjectWithSite implementation
1685 static inline HTMLDocumentNode *HTMLDocumentNode_from_IObjectWithSite(IObjectWithSite *iface)
1687 return CONTAINING_RECORD(iface, HTMLDocumentNode, IObjectWithSite_iface);
1690 static HRESULT WINAPI DocNodeObjectWithSite_QueryInterface(IObjectWithSite *iface, REFIID riid, void **ppv)
1692 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectWithSite(iface);
1693 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1696 static ULONG WINAPI DocNodeObjectWithSite_AddRef(IObjectWithSite *iface)
1698 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectWithSite(iface);
1699 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1702 static ULONG WINAPI DocNodeObjectWithSite_Release(IObjectWithSite *iface)
1704 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectWithSite(iface);
1705 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1708 static HRESULT WINAPI DocNodeObjectWithSite_SetSite(IObjectWithSite *iface, IUnknown *pUnkSite)
1710 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectWithSite(iface);
1711 FIXME("(%p)->(%p)\n", This, pUnkSite);
1712 return E_NOTIMPL;
1715 static HRESULT WINAPI DocNodeObjectWithSite_GetSite(IObjectWithSite* iface, REFIID riid, PVOID *ppvSite)
1717 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectWithSite(iface);
1718 FIXME("(%p)->(%p)\n", This, ppvSite);
1719 return E_NOTIMPL;
1722 static const IObjectWithSiteVtbl DocNodeObjectWithSiteVtbl = {
1723 DocNodeObjectWithSite_QueryInterface,
1724 DocNodeObjectWithSite_AddRef,
1725 DocNodeObjectWithSite_Release,
1726 DocNodeObjectWithSite_SetSite,
1727 DocNodeObjectWithSite_GetSite
1730 static inline HTMLDocumentObj *HTMLDocumentObj_from_IObjectWithSite(IObjectWithSite *iface)
1732 return CONTAINING_RECORD(iface, HTMLDocumentObj, IObjectWithSite_iface);
1735 static HRESULT WINAPI DocObjObjectWithSite_QueryInterface(IObjectWithSite *iface, REFIID riid, void **ppv)
1737 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectWithSite(iface);
1738 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
1741 static ULONG WINAPI DocObjObjectWithSite_AddRef(IObjectWithSite *iface)
1743 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectWithSite(iface);
1744 return IUnknown_AddRef(This->outer_unk);
1747 static ULONG WINAPI DocObjObjectWithSite_Release(IObjectWithSite *iface)
1749 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectWithSite(iface);
1750 return IUnknown_Release(This->outer_unk);
1753 static HRESULT WINAPI DocObjObjectWithSite_SetSite(IObjectWithSite *iface, IUnknown *pUnkSite)
1755 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectWithSite(iface);
1756 FIXME("(%p)->(%p)\n", This, pUnkSite);
1757 return E_NOTIMPL;
1760 static HRESULT WINAPI DocObjObjectWithSite_GetSite(IObjectWithSite* iface, REFIID riid, PVOID *ppvSite)
1762 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectWithSite(iface);
1763 FIXME("(%p)->(%p)\n", This, ppvSite);
1764 return E_NOTIMPL;
1767 static const IObjectWithSiteVtbl DocObjObjectWithSiteVtbl = {
1768 DocObjObjectWithSite_QueryInterface,
1769 DocObjObjectWithSite_AddRef,
1770 DocObjObjectWithSite_Release,
1771 DocObjObjectWithSite_SetSite,
1772 DocObjObjectWithSite_GetSite
1775 /**********************************************************
1776 * IOleContainer implementation
1779 static inline HTMLDocumentNode *HTMLDocumentNode_from_IOleContainer(IOleContainer *iface)
1781 return CONTAINING_RECORD(iface, HTMLDocumentNode, IOleContainer_iface);
1784 static HRESULT WINAPI DocNodeOleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
1786 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1787 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1790 static ULONG WINAPI DocNodeOleContainer_AddRef(IOleContainer *iface)
1792 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1793 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1796 static ULONG WINAPI DocNodeOleContainer_Release(IOleContainer *iface)
1798 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1799 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1802 static HRESULT WINAPI DocNodeOleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc, LPOLESTR pszDisplayName,
1803 ULONG *pchEaten, IMoniker **ppmkOut)
1805 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1806 FIXME("(%p)->(%p %s %p %p)\n", This, pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut);
1807 return E_NOTIMPL;
1810 static HRESULT WINAPI DocNodeOleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags, IEnumUnknown **ppenum)
1812 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1813 return IOleContainer_EnumObjects(&This->doc_obj->IOleContainer_iface, grfFlags, ppenum);
1816 static HRESULT WINAPI DocNodeOleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
1818 HTMLDocumentNode *This = HTMLDocumentNode_from_IOleContainer(iface);
1819 FIXME("(%p)->(%x)\n", This, fLock);
1820 return E_NOTIMPL;
1823 static const IOleContainerVtbl DocNodeOleContainerVtbl = {
1824 DocNodeOleContainer_QueryInterface,
1825 DocNodeOleContainer_AddRef,
1826 DocNodeOleContainer_Release,
1827 DocNodeOleContainer_ParseDisplayName,
1828 DocNodeOleContainer_EnumObjects,
1829 DocNodeOleContainer_LockContainer
1832 static inline HTMLDocumentObj *HTMLDocumentObj_from_IOleContainer(IOleContainer *iface)
1834 return CONTAINING_RECORD(iface, HTMLDocumentObj, IOleContainer_iface);
1837 static HRESULT WINAPI DocObjOleContainer_QueryInterface(IOleContainer *iface, REFIID riid, void **ppv)
1839 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1840 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
1843 static ULONG WINAPI DocObjOleContainer_AddRef(IOleContainer *iface)
1845 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1846 return IUnknown_AddRef(This->outer_unk);
1849 static ULONG WINAPI DocObjOleContainer_Release(IOleContainer *iface)
1851 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1852 return IUnknown_Release(This->outer_unk);
1855 static HRESULT WINAPI DocObjOleContainer_ParseDisplayName(IOleContainer *iface, IBindCtx *pbc, LPOLESTR pszDisplayName,
1856 ULONG *pchEaten, IMoniker **ppmkOut)
1858 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1859 FIXME("(%p)->(%p %s %p %p)\n", This, pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut);
1860 return E_NOTIMPL;
1863 static HRESULT WINAPI DocObjOleContainer_EnumObjects(IOleContainer *iface, DWORD grfFlags, IEnumUnknown **ppenum)
1865 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1866 EnumUnknown *ret;
1868 TRACE("(%p)->(%lx %p)\n", This, grfFlags, ppenum);
1870 ret = malloc(sizeof(*ret));
1871 if(!ret)
1872 return E_OUTOFMEMORY;
1874 ret->IEnumUnknown_iface.lpVtbl = &EnumUnknownVtbl;
1875 ret->ref = 1;
1877 *ppenum = &ret->IEnumUnknown_iface;
1878 return S_OK;
1881 static HRESULT WINAPI DocObjOleContainer_LockContainer(IOleContainer *iface, BOOL fLock)
1883 HTMLDocumentObj *This = HTMLDocumentObj_from_IOleContainer(iface);
1884 FIXME("(%p)->(%x)\n", This, fLock);
1885 return E_NOTIMPL;
1888 static const IOleContainerVtbl DocObjOleContainerVtbl = {
1889 DocObjOleContainer_QueryInterface,
1890 DocObjOleContainer_AddRef,
1891 DocObjOleContainer_Release,
1892 DocObjOleContainer_ParseDisplayName,
1893 DocObjOleContainer_EnumObjects,
1894 DocObjOleContainer_LockContainer
1897 static inline HTMLDocumentObj *impl_from_ITargetContainer(ITargetContainer *iface)
1899 return CONTAINING_RECORD(iface, HTMLDocumentObj, ITargetContainer_iface);
1902 static HRESULT WINAPI TargetContainer_QueryInterface(ITargetContainer *iface, REFIID riid, void **ppv)
1904 HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
1905 return ICustomDoc_QueryInterface(&This->ICustomDoc_iface, riid, ppv);
1908 static ULONG WINAPI TargetContainer_AddRef(ITargetContainer *iface)
1910 HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
1911 return ICustomDoc_AddRef(&This->ICustomDoc_iface);
1914 static ULONG WINAPI TargetContainer_Release(ITargetContainer *iface)
1916 HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
1917 return ICustomDoc_Release(&This->ICustomDoc_iface);
1920 static HRESULT WINAPI TargetContainer_GetFrameUrl(ITargetContainer *iface, LPWSTR *ppszFrameSrc)
1922 HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
1923 FIXME("(%p)->(%p)\n", This, ppszFrameSrc);
1924 return E_NOTIMPL;
1927 static HRESULT WINAPI TargetContainer_GetFramesContainer(ITargetContainer *iface, IOleContainer **ppContainer)
1929 HTMLDocumentObj *This = impl_from_ITargetContainer(iface);
1931 TRACE("(%p)->(%p)\n", This, ppContainer);
1933 /* NOTE: we should return wrapped interface here */
1934 IOleContainer_AddRef(&This->IOleContainer_iface);
1935 *ppContainer = &This->IOleContainer_iface;
1936 return S_OK;
1939 static const ITargetContainerVtbl TargetContainerVtbl = {
1940 TargetContainer_QueryInterface,
1941 TargetContainer_AddRef,
1942 TargetContainer_Release,
1943 TargetContainer_GetFrameUrl,
1944 TargetContainer_GetFramesContainer
1947 void TargetContainer_Init(HTMLDocumentObj *This)
1949 This->ITargetContainer_iface.lpVtbl = &TargetContainerVtbl;
1952 /**********************************************************
1953 * IObjectSafety implementation
1956 static inline HTMLDocumentNode *HTMLDocumentNode_from_IObjectSafety(IObjectSafety *iface)
1958 return CONTAINING_RECORD(iface, HTMLDocumentNode, IObjectSafety_iface);
1961 static HRESULT WINAPI DocNodeObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
1963 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectSafety(iface);
1964 return IHTMLDOMNode_QueryInterface(&This->node.IHTMLDOMNode_iface, riid, ppv);
1967 static ULONG WINAPI DocNodeObjectSafety_AddRef(IObjectSafety *iface)
1969 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectSafety(iface);
1970 return IHTMLDOMNode_AddRef(&This->node.IHTMLDOMNode_iface);
1973 static ULONG WINAPI DocNodeObjectSafety_Release(IObjectSafety *iface)
1975 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectSafety(iface);
1976 return IHTMLDOMNode_Release(&This->node.IHTMLDOMNode_iface);
1979 static HRESULT WINAPI DocNodeObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *iface,
1980 REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
1982 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectSafety(iface);
1983 FIXME("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
1984 return E_NOTIMPL;
1987 static HRESULT WINAPI DocNodeObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *iface,
1988 REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
1990 HTMLDocumentNode *This = HTMLDocumentNode_from_IObjectSafety(iface);
1991 return IObjectSafety_SetInterfaceSafetyOptions(&This->doc_obj->IObjectSafety_iface,
1992 riid, dwOptionSetMask, dwEnabledOptions);
1995 static const IObjectSafetyVtbl DocNodeObjectSafetyVtbl = {
1996 DocNodeObjectSafety_QueryInterface,
1997 DocNodeObjectSafety_AddRef,
1998 DocNodeObjectSafety_Release,
1999 DocNodeObjectSafety_GetInterfaceSafetyOptions,
2000 DocNodeObjectSafety_SetInterfaceSafetyOptions
2003 static inline HTMLDocumentObj *HTMLDocumentObj_from_IObjectSafety(IObjectSafety *iface)
2005 return CONTAINING_RECORD(iface, HTMLDocumentObj, IObjectSafety_iface);
2008 static HRESULT WINAPI DocObjObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
2010 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectSafety(iface);
2011 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
2014 static ULONG WINAPI DocObjObjectSafety_AddRef(IObjectSafety *iface)
2016 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectSafety(iface);
2017 return IUnknown_AddRef(This->outer_unk);
2020 static ULONG WINAPI DocObjObjectSafety_Release(IObjectSafety *iface)
2022 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectSafety(iface);
2023 return IUnknown_Release(This->outer_unk);
2026 static HRESULT WINAPI DocObjObjectSafety_GetInterfaceSafetyOptions(IObjectSafety *iface,
2027 REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
2029 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectSafety(iface);
2030 FIXME("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
2031 return E_NOTIMPL;
2034 static HRESULT WINAPI DocObjObjectSafety_SetInterfaceSafetyOptions(IObjectSafety *iface,
2035 REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
2037 HTMLDocumentObj *This = HTMLDocumentObj_from_IObjectSafety(iface);
2038 FIXME("(%p)->(%s %lx %lx)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
2040 if(IsEqualGUID(&IID_IPersistMoniker, riid) &&
2041 dwOptionSetMask==INTERFACESAFE_FOR_UNTRUSTED_DATA &&
2042 dwEnabledOptions==INTERFACESAFE_FOR_UNTRUSTED_DATA)
2043 return S_OK;
2045 return E_NOTIMPL;
2048 static const IObjectSafetyVtbl DocObjObjectSafetyVtbl = {
2049 DocObjObjectSafety_QueryInterface,
2050 DocObjObjectSafety_AddRef,
2051 DocObjObjectSafety_Release,
2052 DocObjObjectSafety_GetInterfaceSafetyOptions,
2053 DocObjObjectSafety_SetInterfaceSafetyOptions
2056 void HTMLDocument_LockContainer(HTMLDocumentObj *This, BOOL fLock)
2058 IOleContainer *container;
2059 HRESULT hres;
2061 if(!This->client || This->container_locked == fLock)
2062 return;
2064 hres = IOleClientSite_GetContainer(This->client, &container);
2065 if(SUCCEEDED(hres)) {
2066 IOleContainer_LockContainer(container, fLock);
2067 This->container_locked = fLock;
2068 IOleContainer_Release(container);
2072 void HTMLDocumentNode_OleObj_Init(HTMLDocumentNode *This)
2074 This->IOleObject_iface.lpVtbl = &DocNodeOleObjectVtbl;
2075 This->IOleDocument_iface.lpVtbl = &DocNodeOleDocumentVtbl;
2076 This->IOleControl_iface.lpVtbl = &DocNodeOleControlVtbl;
2077 This->IOleInPlaceActiveObject_iface.lpVtbl = &DocNodeOleInPlaceActiveObjectVtbl;
2078 This->IOleInPlaceObjectWindowless_iface.lpVtbl = &DocNodeOleInPlaceObjectWindowlessVtbl;
2079 This->IObjectWithSite_iface.lpVtbl = &DocNodeObjectWithSiteVtbl;
2080 This->IOleContainer_iface.lpVtbl = &DocNodeOleContainerVtbl;
2081 This->IObjectSafety_iface.lpVtbl = &DocNodeObjectSafetyVtbl;
2082 This->doc_obj->extent.cx = 1;
2083 This->doc_obj->extent.cy = 1;
2086 static void HTMLDocumentObj_OleObj_Init(HTMLDocumentObj *This)
2088 This->IOleObject_iface.lpVtbl = &DocObjOleObjectVtbl;
2089 This->IOleDocument_iface.lpVtbl = &DocObjOleDocumentVtbl;
2090 This->IOleControl_iface.lpVtbl = &DocObjOleControlVtbl;
2091 This->IOleInPlaceActiveObject_iface.lpVtbl = &DocObjOleInPlaceActiveObjectVtbl;
2092 This->IOleInPlaceObjectWindowless_iface.lpVtbl = &DocObjOleInPlaceObjectWindowlessVtbl;
2093 This->IObjectWithSite_iface.lpVtbl = &DocObjObjectWithSiteVtbl;
2094 This->IOleContainer_iface.lpVtbl = &DocObjOleContainerVtbl;
2095 This->IObjectSafety_iface.lpVtbl = &DocObjObjectSafetyVtbl;
2096 This->extent.cx = 1;
2097 This->extent.cy = 1;
2100 #define HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(iface) \
2101 static HRESULT WINAPI DocObj##iface##_QueryInterface(I##iface *_0, REFIID riid, void **ppv) \
2103 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2104 return IUnknown_QueryInterface(This->outer_unk, riid, ppv); \
2106 static ULONG WINAPI DocObj##iface##_AddRef(I##iface *_0) \
2108 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2109 return IUnknown_AddRef(This->outer_unk); \
2111 static ULONG WINAPI DocObj##iface##_Release(I##iface *_0) \
2113 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2114 return IUnknown_Release(This->outer_unk); \
2117 #define HTMLDOCUMENTOBJ_IDISPATCH_METHODS(iface) HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(iface) \
2118 static HRESULT WINAPI DocObj##iface##_GetTypeInfoCount(I##iface *_0, UINT *pctinfo) \
2120 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2121 return IDispatchEx_GetTypeInfoCount(&This->IDispatchEx_iface, pctinfo); \
2123 static HRESULT WINAPI DocObj##iface##_GetTypeInfo(I##iface *_0, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) \
2125 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2126 return IDispatchEx_GetTypeInfo(&This->IDispatchEx_iface, iTInfo, lcid, ppTInfo); \
2128 static HRESULT WINAPI DocObj##iface##_GetIDsOfNames(I##iface *_0, REFIID riid, LPOLESTR *rgszNames, UINT cNames, \
2129 LCID lcid, DISPID *rgDispId) \
2131 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2132 return IDispatchEx_GetIDsOfNames(&This->IDispatchEx_iface, riid, rgszNames, cNames, lcid, rgDispId); \
2134 static HRESULT WINAPI DocObj##iface##_Invoke(I##iface *_0, DISPID dispIdMember, REFIID riid, LCID lcid, \
2135 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) \
2137 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2138 return IDispatchEx_Invoke(&This->IDispatchEx_iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); \
2141 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_0(iface, method) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0) \
2143 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2144 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface); \
2147 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_1(iface, method, a) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0, a _1) \
2149 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2150 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface, _1); \
2153 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_2(iface, method, a,b) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0, a _1, b _2) \
2155 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2156 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface, _1, _2); \
2159 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_3(iface, method, a,b,c) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0, a _1, b _2, c _3) \
2161 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2162 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface, _1, _2, _3); \
2165 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_4(iface, method, a,b,c,d) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0, a _1, b _2, c _3, d _4) \
2167 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2168 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface, _1, _2, _3, _4); \
2171 #define HTMLDOCUMENTOBJ_FWD_TO_NODE_5(iface, method, a,b,c,d,e) static HRESULT WINAPI DocObj##iface##_##method(I##iface *_0, a _1, b _2, c _3, d _4, e _5) \
2173 HTMLDocumentObj *This = CONTAINING_RECORD(_0, HTMLDocumentObj, I##iface##_iface); \
2174 return This->doc_node->I##iface##_iface.lpVtbl->method(&This->doc_node->I##iface##_iface, _1, _2, _3, _4, _5); \
2177 /**********************************************************
2178 * IHTMLDocument2 implementation
2180 static inline HTMLDocumentObj *impl_from_IHTMLDocument2(IHTMLDocument2 *iface)
2182 return CONTAINING_RECORD(iface, HTMLDocumentObj, IHTMLDocument2_iface);
2185 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument2)
2187 static HRESULT WINAPI DocObjHTMLDocument2_get_Script(IHTMLDocument2 *iface, IDispatch **p)
2189 HTMLDocumentObj *This = impl_from_IHTMLDocument2(iface);
2190 HRESULT hres;
2192 TRACE("(%p)->(%p)\n", This, p);
2194 hres = IHTMLDocument7_get_parentWindow(&This->IHTMLDocument7_iface, (IHTMLWindow2**)p);
2195 return hres == S_OK && !*p ? E_PENDING : hres;
2198 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_all, IHTMLElementCollection**)
2199 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_body, IHTMLElement**)
2200 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_activeElement, IHTMLElement**)
2201 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_images, IHTMLElementCollection**)
2202 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_applets, IHTMLElementCollection**)
2203 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_links, IHTMLElementCollection**)
2204 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_forms, IHTMLElementCollection**)
2205 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_anchors, IHTMLElementCollection**)
2206 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_title, BSTR)
2207 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_title, BSTR*)
2208 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_scripts, IHTMLElementCollection**)
2210 static HRESULT WINAPI DocObjHTMLDocument2_put_designMode(IHTMLDocument2 *iface, BSTR v)
2212 HTMLDocumentObj *This = impl_from_IHTMLDocument2(iface);
2213 HRESULT hres;
2215 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
2217 if(wcsicmp(v, L"on")) {
2218 FIXME("Unsupported arg %s\n", debugstr_w(v));
2219 return E_NOTIMPL;
2222 hres = setup_edit_mode(This);
2223 if(FAILED(hres))
2224 return hres;
2226 call_property_onchanged(&This->cp_container, DISPID_IHTMLDOCUMENT2_DESIGNMODE);
2227 return S_OK;
2230 static HRESULT WINAPI DocObjHTMLDocument2_get_designMode(IHTMLDocument2 *iface, BSTR *p)
2232 HTMLDocumentObj *This = impl_from_IHTMLDocument2(iface);
2234 FIXME("(%p)->(%p) always returning Off\n", This, p);
2236 if(!p)
2237 return E_INVALIDARG;
2239 *p = SysAllocString(L"Off");
2240 return S_OK;
2243 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_selection, IHTMLSelectionObject**)
2244 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_readyState, BSTR*)
2246 static HRESULT WINAPI DocObjHTMLDocument2_get_frames(IHTMLDocument2 *iface, IHTMLFramesCollection2 **p)
2248 HTMLDocumentObj *This = impl_from_IHTMLDocument2(iface);
2250 TRACE("(%p)->(%p)\n", This, p);
2252 if(!This->window) {
2253 /* Not implemented by IE */
2254 return E_NOTIMPL;
2256 return IHTMLWindow2_get_frames(&This->window->base.IHTMLWindow2_iface, p);
2259 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_embeds, IHTMLElementCollection**)
2260 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_plugins, IHTMLElementCollection**)
2261 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_alinkColor, VARIANT)
2262 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_alinkColor, VARIANT*)
2263 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_bgColor, VARIANT)
2264 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_bgColor, VARIANT*)
2265 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_fgColor, VARIANT)
2266 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_fgColor, VARIANT*)
2267 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_linkColor, VARIANT)
2268 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_linkColor, VARIANT*)
2269 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_vlinkColor, VARIANT)
2270 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_vlinkColor, VARIANT*)
2271 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_referrer, BSTR*)
2272 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_location, IHTMLLocation**)
2273 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_lastModified, BSTR*)
2274 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_URL, BSTR)
2275 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_URL, BSTR*)
2276 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_domain, BSTR)
2277 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_domain, BSTR*)
2278 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_cookie, BSTR)
2279 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_cookie, BSTR*)
2280 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_expando, VARIANT_BOOL)
2281 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_expando, VARIANT_BOOL*)
2282 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_charset, BSTR)
2283 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_charset, BSTR*)
2284 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_defaultCharset, BSTR)
2285 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_defaultCharset, BSTR*)
2286 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_mimeType, BSTR*)
2287 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_fileSize, BSTR*)
2288 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_fileCreatedDate, BSTR*)
2289 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_fileModifiedDate, BSTR*)
2290 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_fileUpdatedDate, BSTR*)
2291 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_security, BSTR*)
2292 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_protocol, BSTR*)
2293 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_nameProp, BSTR*)
2294 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, write, SAFEARRAY*)
2295 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, writeln, SAFEARRAY*)
2296 HTMLDOCUMENTOBJ_FWD_TO_NODE_5(HTMLDocument2, open, BSTR,VARIANT,VARIANT,VARIANT,IDispatch**)
2297 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument2, close)
2298 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument2, clear)
2299 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandSupported, BSTR,VARIANT_BOOL*)
2300 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandEnabled, BSTR,VARIANT_BOOL*)
2301 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandState, BSTR,VARIANT_BOOL*)
2302 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandIndeterm, BSTR,VARIANT_BOOL*)
2303 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandText, BSTR,BSTR*)
2304 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, queryCommandValue, BSTR,VARIANT*)
2305 HTMLDOCUMENTOBJ_FWD_TO_NODE_4(HTMLDocument2, execCommand, BSTR,VARIANT_BOOL,VARIANT,VARIANT_BOOL*)
2306 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, execCommandShowHelp, BSTR,VARIANT_BOOL*)
2307 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument2, createElement, BSTR,IHTMLElement**)
2308 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onhelp, VARIANT)
2309 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onhelp, VARIANT*)
2310 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onclick, VARIANT)
2311 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onclick, VARIANT*)
2312 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_ondblclick, VARIANT)
2313 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_ondblclick, VARIANT*)
2314 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onkeyup, VARIANT)
2315 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onkeyup, VARIANT*)
2316 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onkeydown, VARIANT)
2317 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onkeydown, VARIANT*)
2318 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onkeypress, VARIANT)
2319 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onkeypress, VARIANT*)
2320 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onmouseup, VARIANT)
2321 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onmouseup, VARIANT*)
2322 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onmousedown, VARIANT)
2323 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onmousedown, VARIANT*)
2324 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onmousemove, VARIANT)
2325 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onmousemove, VARIANT*)
2326 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onmouseout, VARIANT)
2327 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onmouseout, VARIANT*)
2328 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onmouseover, VARIANT)
2329 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onmouseover, VARIANT*)
2330 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onreadystatechange, VARIANT)
2331 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onreadystatechange, VARIANT*)
2332 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onafterupdate, VARIANT)
2333 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onafterupdate, VARIANT*)
2334 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onrowexit, VARIANT)
2335 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onrowexit, VARIANT*)
2336 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onrowenter, VARIANT)
2337 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onrowenter, VARIANT*)
2338 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_ondragstart, VARIANT)
2339 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_ondragstart, VARIANT*)
2340 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onselectstart, VARIANT)
2341 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onselectstart, VARIANT*)
2342 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument2, elementFromPoint, LONG,LONG,IHTMLElement**)
2344 static HRESULT WINAPI DocObjHTMLDocument2_get_parentWindow(IHTMLDocument2 *iface, IHTMLWindow2 **p)
2346 HTMLDocumentObj *This = impl_from_IHTMLDocument2(iface);
2347 HRESULT hres;
2349 TRACE("(%p)->(%p)\n", This, p);
2351 hres = IHTMLDocument7_get_defaultView(&This->IHTMLDocument7_iface, p);
2352 return hres == S_OK && !*p ? E_FAIL : hres;
2355 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_styleSheets, IHTMLStyleSheetsCollection**)
2356 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onbeforeupdate, VARIANT)
2357 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onbeforeupdate, VARIANT*)
2358 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, put_onerrorupdate, VARIANT)
2359 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, get_onerrorupdate, VARIANT*)
2360 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument2, toString, BSTR*)
2361 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument2, createStyleSheet, BSTR,LONG,IHTMLStyleSheet**)
2363 static const IHTMLDocument2Vtbl DocObjHTMLDocument2Vtbl = {
2364 DocObjHTMLDocument2_QueryInterface,
2365 DocObjHTMLDocument2_AddRef,
2366 DocObjHTMLDocument2_Release,
2367 DocObjHTMLDocument2_GetTypeInfoCount,
2368 DocObjHTMLDocument2_GetTypeInfo,
2369 DocObjHTMLDocument2_GetIDsOfNames,
2370 DocObjHTMLDocument2_Invoke,
2371 DocObjHTMLDocument2_get_Script,
2372 DocObjHTMLDocument2_get_all,
2373 DocObjHTMLDocument2_get_body,
2374 DocObjHTMLDocument2_get_activeElement,
2375 DocObjHTMLDocument2_get_images,
2376 DocObjHTMLDocument2_get_applets,
2377 DocObjHTMLDocument2_get_links,
2378 DocObjHTMLDocument2_get_forms,
2379 DocObjHTMLDocument2_get_anchors,
2380 DocObjHTMLDocument2_put_title,
2381 DocObjHTMLDocument2_get_title,
2382 DocObjHTMLDocument2_get_scripts,
2383 DocObjHTMLDocument2_put_designMode,
2384 DocObjHTMLDocument2_get_designMode,
2385 DocObjHTMLDocument2_get_selection,
2386 DocObjHTMLDocument2_get_readyState,
2387 DocObjHTMLDocument2_get_frames,
2388 DocObjHTMLDocument2_get_embeds,
2389 DocObjHTMLDocument2_get_plugins,
2390 DocObjHTMLDocument2_put_alinkColor,
2391 DocObjHTMLDocument2_get_alinkColor,
2392 DocObjHTMLDocument2_put_bgColor,
2393 DocObjHTMLDocument2_get_bgColor,
2394 DocObjHTMLDocument2_put_fgColor,
2395 DocObjHTMLDocument2_get_fgColor,
2396 DocObjHTMLDocument2_put_linkColor,
2397 DocObjHTMLDocument2_get_linkColor,
2398 DocObjHTMLDocument2_put_vlinkColor,
2399 DocObjHTMLDocument2_get_vlinkColor,
2400 DocObjHTMLDocument2_get_referrer,
2401 DocObjHTMLDocument2_get_location,
2402 DocObjHTMLDocument2_get_lastModified,
2403 DocObjHTMLDocument2_put_URL,
2404 DocObjHTMLDocument2_get_URL,
2405 DocObjHTMLDocument2_put_domain,
2406 DocObjHTMLDocument2_get_domain,
2407 DocObjHTMLDocument2_put_cookie,
2408 DocObjHTMLDocument2_get_cookie,
2409 DocObjHTMLDocument2_put_expando,
2410 DocObjHTMLDocument2_get_expando,
2411 DocObjHTMLDocument2_put_charset,
2412 DocObjHTMLDocument2_get_charset,
2413 DocObjHTMLDocument2_put_defaultCharset,
2414 DocObjHTMLDocument2_get_defaultCharset,
2415 DocObjHTMLDocument2_get_mimeType,
2416 DocObjHTMLDocument2_get_fileSize,
2417 DocObjHTMLDocument2_get_fileCreatedDate,
2418 DocObjHTMLDocument2_get_fileModifiedDate,
2419 DocObjHTMLDocument2_get_fileUpdatedDate,
2420 DocObjHTMLDocument2_get_security,
2421 DocObjHTMLDocument2_get_protocol,
2422 DocObjHTMLDocument2_get_nameProp,
2423 DocObjHTMLDocument2_write,
2424 DocObjHTMLDocument2_writeln,
2425 DocObjHTMLDocument2_open,
2426 DocObjHTMLDocument2_close,
2427 DocObjHTMLDocument2_clear,
2428 DocObjHTMLDocument2_queryCommandSupported,
2429 DocObjHTMLDocument2_queryCommandEnabled,
2430 DocObjHTMLDocument2_queryCommandState,
2431 DocObjHTMLDocument2_queryCommandIndeterm,
2432 DocObjHTMLDocument2_queryCommandText,
2433 DocObjHTMLDocument2_queryCommandValue,
2434 DocObjHTMLDocument2_execCommand,
2435 DocObjHTMLDocument2_execCommandShowHelp,
2436 DocObjHTMLDocument2_createElement,
2437 DocObjHTMLDocument2_put_onhelp,
2438 DocObjHTMLDocument2_get_onhelp,
2439 DocObjHTMLDocument2_put_onclick,
2440 DocObjHTMLDocument2_get_onclick,
2441 DocObjHTMLDocument2_put_ondblclick,
2442 DocObjHTMLDocument2_get_ondblclick,
2443 DocObjHTMLDocument2_put_onkeyup,
2444 DocObjHTMLDocument2_get_onkeyup,
2445 DocObjHTMLDocument2_put_onkeydown,
2446 DocObjHTMLDocument2_get_onkeydown,
2447 DocObjHTMLDocument2_put_onkeypress,
2448 DocObjHTMLDocument2_get_onkeypress,
2449 DocObjHTMLDocument2_put_onmouseup,
2450 DocObjHTMLDocument2_get_onmouseup,
2451 DocObjHTMLDocument2_put_onmousedown,
2452 DocObjHTMLDocument2_get_onmousedown,
2453 DocObjHTMLDocument2_put_onmousemove,
2454 DocObjHTMLDocument2_get_onmousemove,
2455 DocObjHTMLDocument2_put_onmouseout,
2456 DocObjHTMLDocument2_get_onmouseout,
2457 DocObjHTMLDocument2_put_onmouseover,
2458 DocObjHTMLDocument2_get_onmouseover,
2459 DocObjHTMLDocument2_put_onreadystatechange,
2460 DocObjHTMLDocument2_get_onreadystatechange,
2461 DocObjHTMLDocument2_put_onafterupdate,
2462 DocObjHTMLDocument2_get_onafterupdate,
2463 DocObjHTMLDocument2_put_onrowexit,
2464 DocObjHTMLDocument2_get_onrowexit,
2465 DocObjHTMLDocument2_put_onrowenter,
2466 DocObjHTMLDocument2_get_onrowenter,
2467 DocObjHTMLDocument2_put_ondragstart,
2468 DocObjHTMLDocument2_get_ondragstart,
2469 DocObjHTMLDocument2_put_onselectstart,
2470 DocObjHTMLDocument2_get_onselectstart,
2471 DocObjHTMLDocument2_elementFromPoint,
2472 DocObjHTMLDocument2_get_parentWindow,
2473 DocObjHTMLDocument2_get_styleSheets,
2474 DocObjHTMLDocument2_put_onbeforeupdate,
2475 DocObjHTMLDocument2_get_onbeforeupdate,
2476 DocObjHTMLDocument2_put_onerrorupdate,
2477 DocObjHTMLDocument2_get_onerrorupdate,
2478 DocObjHTMLDocument2_toString,
2479 DocObjHTMLDocument2_createStyleSheet
2482 /**********************************************************
2483 * IHTMLDocument3 implementation
2485 static inline HTMLDocumentObj *impl_from_IHTMLDocument3(IHTMLDocument3 *iface)
2487 return CONTAINING_RECORD(iface, HTMLDocumentObj, IHTMLDocument3_iface);
2490 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument3)
2491 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument3, releaseCapture)
2492 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, recalc, VARIANT_BOOL)
2493 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument3, createTextNode, BSTR,IHTMLDOMNode**)
2494 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_documentElement, IHTMLElement**)
2495 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_uniqueID, BSTR*)
2496 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument3, attachEvent, BSTR,IDispatch*,VARIANT_BOOL*)
2497 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument3, detachEvent, BSTR,IDispatch*)
2498 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_onrowsdelete, VARIANT)
2499 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_onrowsdelete, VARIANT*)
2500 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_onrowsinserted, VARIANT)
2501 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_onrowsinserted, VARIANT*)
2502 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_oncellchange, VARIANT)
2503 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_oncellchange, VARIANT*)
2504 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_ondatasetchanged, VARIANT)
2505 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_ondatasetchanged, VARIANT*)
2506 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_ondataavailable, VARIANT)
2507 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_ondataavailable, VARIANT*)
2508 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_ondatasetcomplete, VARIANT)
2509 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_ondatasetcomplete, VARIANT*)
2510 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_onpropertychange, VARIANT)
2511 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_onpropertychange, VARIANT*)
2512 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_dir, BSTR)
2513 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_dir, BSTR*)
2514 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_oncontextmenu, VARIANT)
2515 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_oncontextmenu, VARIANT*)
2516 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_onstop, VARIANT)
2517 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_onstop, VARIANT*)
2518 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, createDocumentFragment, IHTMLDocument2**)
2520 static HRESULT WINAPI DocObjHTMLDocument3_get_parentDocument(IHTMLDocument3 *iface, IHTMLDocument2 **p)
2522 HTMLDocumentObj *This = impl_from_IHTMLDocument3(iface);
2523 FIXME("(%p)->(%p)\n", This, p);
2524 return E_NOTIMPL;
2527 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_enableDownload, VARIANT_BOOL)
2528 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_enableDownload, VARIANT_BOOL*)
2529 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_baseUrl, BSTR)
2530 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_baseUrl, BSTR*)
2531 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_childNodes, IDispatch**)
2532 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_inheritStyleSheets, VARIANT_BOOL)
2533 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_inheritStyleSheets, VARIANT_BOOL*)
2534 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, put_onbeforeeditfocus, VARIANT)
2535 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument3, get_onbeforeeditfocus, VARIANT*)
2536 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument3, getElementsByName, BSTR,IHTMLElementCollection**)
2537 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument3, getElementById, BSTR,IHTMLElement**)
2538 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument3, getElementsByTagName, BSTR,IHTMLElementCollection**)
2540 static const IHTMLDocument3Vtbl DocObjHTMLDocument3Vtbl = {
2541 DocObjHTMLDocument3_QueryInterface,
2542 DocObjHTMLDocument3_AddRef,
2543 DocObjHTMLDocument3_Release,
2544 DocObjHTMLDocument3_GetTypeInfoCount,
2545 DocObjHTMLDocument3_GetTypeInfo,
2546 DocObjHTMLDocument3_GetIDsOfNames,
2547 DocObjHTMLDocument3_Invoke,
2548 DocObjHTMLDocument3_releaseCapture,
2549 DocObjHTMLDocument3_recalc,
2550 DocObjHTMLDocument3_createTextNode,
2551 DocObjHTMLDocument3_get_documentElement,
2552 DocObjHTMLDocument3_get_uniqueID,
2553 DocObjHTMLDocument3_attachEvent,
2554 DocObjHTMLDocument3_detachEvent,
2555 DocObjHTMLDocument3_put_onrowsdelete,
2556 DocObjHTMLDocument3_get_onrowsdelete,
2557 DocObjHTMLDocument3_put_onrowsinserted,
2558 DocObjHTMLDocument3_get_onrowsinserted,
2559 DocObjHTMLDocument3_put_oncellchange,
2560 DocObjHTMLDocument3_get_oncellchange,
2561 DocObjHTMLDocument3_put_ondatasetchanged,
2562 DocObjHTMLDocument3_get_ondatasetchanged,
2563 DocObjHTMLDocument3_put_ondataavailable,
2564 DocObjHTMLDocument3_get_ondataavailable,
2565 DocObjHTMLDocument3_put_ondatasetcomplete,
2566 DocObjHTMLDocument3_get_ondatasetcomplete,
2567 DocObjHTMLDocument3_put_onpropertychange,
2568 DocObjHTMLDocument3_get_onpropertychange,
2569 DocObjHTMLDocument3_put_dir,
2570 DocObjHTMLDocument3_get_dir,
2571 DocObjHTMLDocument3_put_oncontextmenu,
2572 DocObjHTMLDocument3_get_oncontextmenu,
2573 DocObjHTMLDocument3_put_onstop,
2574 DocObjHTMLDocument3_get_onstop,
2575 DocObjHTMLDocument3_createDocumentFragment,
2576 DocObjHTMLDocument3_get_parentDocument,
2577 DocObjHTMLDocument3_put_enableDownload,
2578 DocObjHTMLDocument3_get_enableDownload,
2579 DocObjHTMLDocument3_put_baseUrl,
2580 DocObjHTMLDocument3_get_baseUrl,
2581 DocObjHTMLDocument3_get_childNodes,
2582 DocObjHTMLDocument3_put_inheritStyleSheets,
2583 DocObjHTMLDocument3_get_inheritStyleSheets,
2584 DocObjHTMLDocument3_put_onbeforeeditfocus,
2585 DocObjHTMLDocument3_get_onbeforeeditfocus,
2586 DocObjHTMLDocument3_getElementsByName,
2587 DocObjHTMLDocument3_getElementById,
2588 DocObjHTMLDocument3_getElementsByTagName
2591 /**********************************************************
2592 * IHTMLDocument4 implementation
2594 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument4)
2595 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument4, focus)
2596 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, hasFocus, VARIANT_BOOL*)
2597 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, put_onselectionchange, VARIANT)
2598 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, get_onselectionchange, VARIANT*)
2599 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, get_namespaces, IDispatch**)
2600 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument4, createDocumentFromUrl, BSTR,BSTR,IHTMLDocument2**)
2601 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, put_media, BSTR)
2602 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, get_media, BSTR*)
2603 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument4, createEventObject, VARIANT*,IHTMLEventObj**)
2604 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument4, fireEvent, BSTR,VARIANT*,VARIANT_BOOL*)
2605 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument4, createRenderStyle, BSTR,IHTMLRenderStyle**)
2606 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, put_oncontrolselect, VARIANT)
2607 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, get_oncontrolselect, VARIANT*)
2608 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument4, get_URLUnencoded, BSTR*)
2610 static const IHTMLDocument4Vtbl DocObjHTMLDocument4Vtbl = {
2611 DocObjHTMLDocument4_QueryInterface,
2612 DocObjHTMLDocument4_AddRef,
2613 DocObjHTMLDocument4_Release,
2614 DocObjHTMLDocument4_GetTypeInfoCount,
2615 DocObjHTMLDocument4_GetTypeInfo,
2616 DocObjHTMLDocument4_GetIDsOfNames,
2617 DocObjHTMLDocument4_Invoke,
2618 DocObjHTMLDocument4_focus,
2619 DocObjHTMLDocument4_hasFocus,
2620 DocObjHTMLDocument4_put_onselectionchange,
2621 DocObjHTMLDocument4_get_onselectionchange,
2622 DocObjHTMLDocument4_get_namespaces,
2623 DocObjHTMLDocument4_createDocumentFromUrl,
2624 DocObjHTMLDocument4_put_media,
2625 DocObjHTMLDocument4_get_media,
2626 DocObjHTMLDocument4_createEventObject,
2627 DocObjHTMLDocument4_fireEvent,
2628 DocObjHTMLDocument4_createRenderStyle,
2629 DocObjHTMLDocument4_put_oncontrolselect,
2630 DocObjHTMLDocument4_get_oncontrolselect,
2631 DocObjHTMLDocument4_get_URLUnencoded
2634 /**********************************************************
2635 * IHTMLDocument5 implementation
2637 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument5)
2638 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onmousewheel, VARIANT)
2639 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onmousewheel, VARIANT*)
2640 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_doctype, IHTMLDOMNode**)
2641 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_implementation, IHTMLDOMImplementation**)
2642 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument5, createAttribute, BSTR,IHTMLDOMAttribute**)
2643 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument5, createComment, BSTR,IHTMLDOMNode**)
2644 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onfocusin, VARIANT)
2645 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onfocusin, VARIANT*)
2646 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onfocusout, VARIANT)
2647 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onfocusout, VARIANT*)
2648 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onactivate, VARIANT)
2649 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onactivate, VARIANT*)
2650 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_ondeactivate, VARIANT)
2651 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_ondeactivate, VARIANT*)
2652 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onbeforeactivate, VARIANT)
2653 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onbeforeactivate, VARIANT*)
2654 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, put_onbeforedeactivate, VARIANT)
2655 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_onbeforedeactivate, VARIANT*)
2656 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument5, get_compatMode, BSTR*)
2658 static const IHTMLDocument5Vtbl DocObjHTMLDocument5Vtbl = {
2659 DocObjHTMLDocument5_QueryInterface,
2660 DocObjHTMLDocument5_AddRef,
2661 DocObjHTMLDocument5_Release,
2662 DocObjHTMLDocument5_GetTypeInfoCount,
2663 DocObjHTMLDocument5_GetTypeInfo,
2664 DocObjHTMLDocument5_GetIDsOfNames,
2665 DocObjHTMLDocument5_Invoke,
2666 DocObjHTMLDocument5_put_onmousewheel,
2667 DocObjHTMLDocument5_get_onmousewheel,
2668 DocObjHTMLDocument5_get_doctype,
2669 DocObjHTMLDocument5_get_implementation,
2670 DocObjHTMLDocument5_createAttribute,
2671 DocObjHTMLDocument5_createComment,
2672 DocObjHTMLDocument5_put_onfocusin,
2673 DocObjHTMLDocument5_get_onfocusin,
2674 DocObjHTMLDocument5_put_onfocusout,
2675 DocObjHTMLDocument5_get_onfocusout,
2676 DocObjHTMLDocument5_put_onactivate,
2677 DocObjHTMLDocument5_get_onactivate,
2678 DocObjHTMLDocument5_put_ondeactivate,
2679 DocObjHTMLDocument5_get_ondeactivate,
2680 DocObjHTMLDocument5_put_onbeforeactivate,
2681 DocObjHTMLDocument5_get_onbeforeactivate,
2682 DocObjHTMLDocument5_put_onbeforedeactivate,
2683 DocObjHTMLDocument5_get_onbeforedeactivate,
2684 DocObjHTMLDocument5_get_compatMode
2687 /**********************************************************
2688 * IHTMLDocument6 implementation
2690 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument6)
2691 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, get_compatible, IHTMLDocumentCompatibleInfoCollection**)
2692 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, get_documentMode, VARIANT*)
2693 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, put_onstorage, VARIANT)
2694 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, get_onstorage, VARIANT*)
2695 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, put_onstoragecommit, VARIANT)
2696 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument6, get_onstoragecommit, VARIANT*)
2697 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument6, getElementById, BSTR,IHTMLElement2**)
2698 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument6, updateSettings)
2700 static const IHTMLDocument6Vtbl DocObjHTMLDocument6Vtbl = {
2701 DocObjHTMLDocument6_QueryInterface,
2702 DocObjHTMLDocument6_AddRef,
2703 DocObjHTMLDocument6_Release,
2704 DocObjHTMLDocument6_GetTypeInfoCount,
2705 DocObjHTMLDocument6_GetTypeInfo,
2706 DocObjHTMLDocument6_GetIDsOfNames,
2707 DocObjHTMLDocument6_Invoke,
2708 DocObjHTMLDocument6_get_compatible,
2709 DocObjHTMLDocument6_get_documentMode,
2710 DocObjHTMLDocument6_put_onstorage,
2711 DocObjHTMLDocument6_get_onstorage,
2712 DocObjHTMLDocument6_put_onstoragecommit,
2713 DocObjHTMLDocument6_get_onstoragecommit,
2714 DocObjHTMLDocument6_getElementById,
2715 DocObjHTMLDocument6_updateSettings
2718 /**********************************************************
2719 * IHTMLDocument7 implementation
2721 static inline HTMLDocumentObj *impl_from_IHTMLDocument7(IHTMLDocument7 *iface)
2723 return CONTAINING_RECORD(iface, HTMLDocumentObj, IHTMLDocument7_iface);
2726 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(HTMLDocument7)
2728 static HRESULT WINAPI DocObjHTMLDocument7_get_defaultView(IHTMLDocument7 *iface, IHTMLWindow2 **p)
2730 HTMLDocumentObj *This = impl_from_IHTMLDocument7(iface);
2732 TRACE("(%p)->(%p)\n", This, p);
2734 if(This->window) {
2735 *p = &This->window->base.IHTMLWindow2_iface;
2736 IHTMLWindow2_AddRef(*p);
2737 }else {
2738 *p = NULL;
2740 return S_OK;
2743 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument7, createCDATASection, BSTR,IHTMLDOMNode**)
2744 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, getSelection, IHTMLSelection**)
2745 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument7, getElementsByTagNameNS, VARIANT*,BSTR,IHTMLElementCollection**)
2746 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument7, createElementNS, VARIANT*,BSTR,IHTMLElement**)
2747 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument7, createAttributeNS, VARIANT*,BSTR,IHTMLDOMAttribute**)
2748 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onmsthumbnailclick, VARIANT)
2749 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onmsthumbnailclick, VARIANT*)
2750 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_characterSet, BSTR*)
2751 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument7, createElement, BSTR,IHTMLElement**)
2752 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument7, createAttribute, BSTR,IHTMLDOMAttribute**)
2753 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument7, getElementsByClassName, BSTR,IHTMLElementCollection**)
2754 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument7, createProcessingInstruction, BSTR,BSTR,IDOMProcessingInstruction**)
2755 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(HTMLDocument7, adoptNode, IHTMLDOMNode*,IHTMLDOMNode3**)
2756 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onmssitemodejumplistitemremoved, VARIANT)
2757 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onmssitemodejumplistitemremoved, VARIANT*)
2758 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_all, IHTMLElementCollection**)
2759 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_inputEncoding, BSTR*)
2760 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_xmlEncoding, BSTR*)
2761 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_xmlStandalone, VARIANT_BOOL)
2762 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_xmlStandalone, VARIANT_BOOL*)
2763 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_xmlVersion, BSTR)
2764 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_xmlVersion, BSTR*)
2765 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, hasAttributes, VARIANT_BOOL*)
2766 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onabort, VARIANT)
2767 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onabort, VARIANT*)
2768 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onblur, VARIANT)
2769 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onblur, VARIANT*)
2770 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_oncanplay, VARIANT)
2771 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_oncanplay, VARIANT*)
2772 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_oncanplaythrough, VARIANT)
2773 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_oncanplaythrough, VARIANT*)
2774 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onchange, VARIANT)
2775 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onchange, VARIANT*)
2776 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondrag, VARIANT)
2777 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondrag, VARIANT*)
2778 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondragend, VARIANT)
2779 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondragend, VARIANT*)
2780 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondragenter, VARIANT)
2781 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondragenter, VARIANT*)
2782 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondragleave, VARIANT)
2783 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondragleave, VARIANT*)
2784 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondragover, VARIANT)
2785 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondragover, VARIANT*)
2786 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondrop, VARIANT)
2787 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondrop, VARIANT*)
2788 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ondurationchange, VARIANT)
2789 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ondurationchange, VARIANT*)
2790 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onemptied, VARIANT)
2791 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onemptied, VARIANT*)
2792 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onended, VARIANT)
2793 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onended, VARIANT*)
2794 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onerror, VARIANT)
2795 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onerror, VARIANT*)
2796 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onfocus, VARIANT)
2797 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onfocus, VARIANT*)
2798 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_oninput, VARIANT)
2799 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_oninput, VARIANT*)
2800 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onload, VARIANT)
2801 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onload, VARIANT*)
2802 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onloadeddata, VARIANT)
2803 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onloadeddata, VARIANT*)
2804 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onloadedmetadata, VARIANT)
2805 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onloadedmetadata, VARIANT*)
2806 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onloadstart, VARIANT)
2807 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onloadstart, VARIANT*)
2808 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onpause, VARIANT)
2809 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onpause, VARIANT*)
2810 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onplay, VARIANT)
2811 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onplay, VARIANT*)
2812 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onplaying, VARIANT)
2813 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onplaying, VARIANT*)
2814 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onprogress, VARIANT)
2815 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onprogress, VARIANT*)
2816 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onratechange, VARIANT)
2817 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onratechange, VARIANT*)
2818 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onreset, VARIANT)
2819 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onreset, VARIANT*)
2820 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onscroll, VARIANT)
2821 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onscroll, VARIANT*)
2822 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onseeked, VARIANT)
2823 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onseeked, VARIANT*)
2824 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onseeking, VARIANT)
2825 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onseeking, VARIANT*)
2826 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onselect, VARIANT)
2827 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onselect, VARIANT*)
2828 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onstalled, VARIANT)
2829 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onstalled, VARIANT*)
2830 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onsubmit, VARIANT)
2831 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onsubmit, VARIANT*)
2832 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onsuspend, VARIANT)
2833 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onsuspend, VARIANT*)
2834 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_ontimeupdate, VARIANT)
2835 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_ontimeupdate, VARIANT*)
2836 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onvolumechange, VARIANT)
2837 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onvolumechange, VARIANT*)
2838 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, put_onwaiting, VARIANT)
2839 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_onwaiting, VARIANT*)
2840 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(HTMLDocument7, normalize)
2841 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(HTMLDocument7, importNode, IHTMLDOMNode*,VARIANT_BOOL,IHTMLDOMNode3**)
2843 static HRESULT WINAPI DocObjHTMLDocument7_get_parentWindow(IHTMLDocument7 *iface, IHTMLWindow2 **p)
2845 HTMLDocumentObj *This = impl_from_IHTMLDocument7(iface);
2847 TRACE("(%p)->(%p)\n", This, p);
2849 return IHTMLDocument7_get_defaultView(&This->IHTMLDocument7_iface, p);
2852 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, putref_body, IHTMLElement*)
2853 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_body, IHTMLElement**)
2854 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(HTMLDocument7, get_head, IHTMLElement**)
2856 static const IHTMLDocument7Vtbl DocObjHTMLDocument7Vtbl = {
2857 DocObjHTMLDocument7_QueryInterface,
2858 DocObjHTMLDocument7_AddRef,
2859 DocObjHTMLDocument7_Release,
2860 DocObjHTMLDocument7_GetTypeInfoCount,
2861 DocObjHTMLDocument7_GetTypeInfo,
2862 DocObjHTMLDocument7_GetIDsOfNames,
2863 DocObjHTMLDocument7_Invoke,
2864 DocObjHTMLDocument7_get_defaultView,
2865 DocObjHTMLDocument7_createCDATASection,
2866 DocObjHTMLDocument7_getSelection,
2867 DocObjHTMLDocument7_getElementsByTagNameNS,
2868 DocObjHTMLDocument7_createElementNS,
2869 DocObjHTMLDocument7_createAttributeNS,
2870 DocObjHTMLDocument7_put_onmsthumbnailclick,
2871 DocObjHTMLDocument7_get_onmsthumbnailclick,
2872 DocObjHTMLDocument7_get_characterSet,
2873 DocObjHTMLDocument7_createElement,
2874 DocObjHTMLDocument7_createAttribute,
2875 DocObjHTMLDocument7_getElementsByClassName,
2876 DocObjHTMLDocument7_createProcessingInstruction,
2877 DocObjHTMLDocument7_adoptNode,
2878 DocObjHTMLDocument7_put_onmssitemodejumplistitemremoved,
2879 DocObjHTMLDocument7_get_onmssitemodejumplistitemremoved,
2880 DocObjHTMLDocument7_get_all,
2881 DocObjHTMLDocument7_get_inputEncoding,
2882 DocObjHTMLDocument7_get_xmlEncoding,
2883 DocObjHTMLDocument7_put_xmlStandalone,
2884 DocObjHTMLDocument7_get_xmlStandalone,
2885 DocObjHTMLDocument7_put_xmlVersion,
2886 DocObjHTMLDocument7_get_xmlVersion,
2887 DocObjHTMLDocument7_hasAttributes,
2888 DocObjHTMLDocument7_put_onabort,
2889 DocObjHTMLDocument7_get_onabort,
2890 DocObjHTMLDocument7_put_onblur,
2891 DocObjHTMLDocument7_get_onblur,
2892 DocObjHTMLDocument7_put_oncanplay,
2893 DocObjHTMLDocument7_get_oncanplay,
2894 DocObjHTMLDocument7_put_oncanplaythrough,
2895 DocObjHTMLDocument7_get_oncanplaythrough,
2896 DocObjHTMLDocument7_put_onchange,
2897 DocObjHTMLDocument7_get_onchange,
2898 DocObjHTMLDocument7_put_ondrag,
2899 DocObjHTMLDocument7_get_ondrag,
2900 DocObjHTMLDocument7_put_ondragend,
2901 DocObjHTMLDocument7_get_ondragend,
2902 DocObjHTMLDocument7_put_ondragenter,
2903 DocObjHTMLDocument7_get_ondragenter,
2904 DocObjHTMLDocument7_put_ondragleave,
2905 DocObjHTMLDocument7_get_ondragleave,
2906 DocObjHTMLDocument7_put_ondragover,
2907 DocObjHTMLDocument7_get_ondragover,
2908 DocObjHTMLDocument7_put_ondrop,
2909 DocObjHTMLDocument7_get_ondrop,
2910 DocObjHTMLDocument7_put_ondurationchange,
2911 DocObjHTMLDocument7_get_ondurationchange,
2912 DocObjHTMLDocument7_put_onemptied,
2913 DocObjHTMLDocument7_get_onemptied,
2914 DocObjHTMLDocument7_put_onended,
2915 DocObjHTMLDocument7_get_onended,
2916 DocObjHTMLDocument7_put_onerror,
2917 DocObjHTMLDocument7_get_onerror,
2918 DocObjHTMLDocument7_put_onfocus,
2919 DocObjHTMLDocument7_get_onfocus,
2920 DocObjHTMLDocument7_put_oninput,
2921 DocObjHTMLDocument7_get_oninput,
2922 DocObjHTMLDocument7_put_onload,
2923 DocObjHTMLDocument7_get_onload,
2924 DocObjHTMLDocument7_put_onloadeddata,
2925 DocObjHTMLDocument7_get_onloadeddata,
2926 DocObjHTMLDocument7_put_onloadedmetadata,
2927 DocObjHTMLDocument7_get_onloadedmetadata,
2928 DocObjHTMLDocument7_put_onloadstart,
2929 DocObjHTMLDocument7_get_onloadstart,
2930 DocObjHTMLDocument7_put_onpause,
2931 DocObjHTMLDocument7_get_onpause,
2932 DocObjHTMLDocument7_put_onplay,
2933 DocObjHTMLDocument7_get_onplay,
2934 DocObjHTMLDocument7_put_onplaying,
2935 DocObjHTMLDocument7_get_onplaying,
2936 DocObjHTMLDocument7_put_onprogress,
2937 DocObjHTMLDocument7_get_onprogress,
2938 DocObjHTMLDocument7_put_onratechange,
2939 DocObjHTMLDocument7_get_onratechange,
2940 DocObjHTMLDocument7_put_onreset,
2941 DocObjHTMLDocument7_get_onreset,
2942 DocObjHTMLDocument7_put_onscroll,
2943 DocObjHTMLDocument7_get_onscroll,
2944 DocObjHTMLDocument7_put_onseeked,
2945 DocObjHTMLDocument7_get_onseeked,
2946 DocObjHTMLDocument7_put_onseeking,
2947 DocObjHTMLDocument7_get_onseeking,
2948 DocObjHTMLDocument7_put_onselect,
2949 DocObjHTMLDocument7_get_onselect,
2950 DocObjHTMLDocument7_put_onstalled,
2951 DocObjHTMLDocument7_get_onstalled,
2952 DocObjHTMLDocument7_put_onsubmit,
2953 DocObjHTMLDocument7_get_onsubmit,
2954 DocObjHTMLDocument7_put_onsuspend,
2955 DocObjHTMLDocument7_get_onsuspend,
2956 DocObjHTMLDocument7_put_ontimeupdate,
2957 DocObjHTMLDocument7_get_ontimeupdate,
2958 DocObjHTMLDocument7_put_onvolumechange,
2959 DocObjHTMLDocument7_get_onvolumechange,
2960 DocObjHTMLDocument7_put_onwaiting,
2961 DocObjHTMLDocument7_get_onwaiting,
2962 DocObjHTMLDocument7_normalize,
2963 DocObjHTMLDocument7_importNode,
2964 DocObjHTMLDocument7_get_parentWindow,
2965 DocObjHTMLDocument7_putref_body,
2966 DocObjHTMLDocument7_get_body,
2967 DocObjHTMLDocument7_get_head
2970 /**********************************************************
2971 * ISupportErrorInfo implementation
2973 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(SupportErrorInfo)
2975 static HRESULT WINAPI DocObjSupportErrorInfo_InterfaceSupportsErrorInfo(ISupportErrorInfo *iface, REFIID riid)
2977 FIXME("(%p)->(%s)\n", iface, debugstr_mshtml_guid(riid));
2978 return S_FALSE;
2981 static const ISupportErrorInfoVtbl DocObjSupportErrorInfoVtbl = {
2982 DocObjSupportErrorInfo_QueryInterface,
2983 DocObjSupportErrorInfo_AddRef,
2984 DocObjSupportErrorInfo_Release,
2985 DocObjSupportErrorInfo_InterfaceSupportsErrorInfo
2988 /**********************************************************
2989 * IProvideMultipleClassInfo implementation
2991 static inline HTMLDocumentObj *impl_from_IProvideMultipleClassInfo(IProvideMultipleClassInfo *iface)
2993 return CONTAINING_RECORD(iface, HTMLDocumentObj, IProvideMultipleClassInfo_iface);
2996 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(ProvideMultipleClassInfo)
2998 static HRESULT WINAPI DocObjProvideMultipleClassInfo_GetClassInfo(IProvideMultipleClassInfo *iface, ITypeInfo **ppTI)
3000 HTMLDocumentObj *This = impl_from_IProvideMultipleClassInfo(iface);
3001 TRACE("(%p)->(%p)\n", This, ppTI);
3002 return get_class_typeinfo(&CLSID_HTMLDocument, ppTI);
3005 static HRESULT WINAPI DocObjProvideMultipleClassInfo_GetGUID(IProvideMultipleClassInfo *iface, DWORD dwGuidKind, GUID *pGUID)
3007 HTMLDocumentObj *This = impl_from_IProvideMultipleClassInfo(iface);
3008 FIXME("(%p)->(%lu %p)\n", This, dwGuidKind, pGUID);
3009 return E_NOTIMPL;
3012 static HRESULT WINAPI DocObjProvideMultipleClassInfo_GetMultiTypeInfoCount(IProvideMultipleClassInfo *iface, ULONG *pcti)
3014 HTMLDocumentObj *This = impl_from_IProvideMultipleClassInfo(iface);
3015 FIXME("(%p)->(%p)\n", This, pcti);
3016 *pcti = 1;
3017 return S_OK;
3020 static HRESULT WINAPI DocObjProvideMultipleClassInfo_GetInfoOfIndex(IProvideMultipleClassInfo *iface, ULONG iti,
3021 DWORD dwFlags, ITypeInfo **pptiCoClass, DWORD *pdwTIFlags, ULONG *pcdispidReserved, IID *piidPrimary, IID *piidSource)
3023 HTMLDocumentObj *This = impl_from_IProvideMultipleClassInfo(iface);
3024 FIXME("(%p)->(%lu %lx %p %p %p %p %p)\n", This, iti, dwFlags, pptiCoClass, pdwTIFlags, pcdispidReserved, piidPrimary, piidSource);
3025 return E_NOTIMPL;
3028 static const IProvideMultipleClassInfoVtbl DocObjProvideMultipleClassInfoVtbl = {
3029 DocObjProvideMultipleClassInfo_QueryInterface,
3030 DocObjProvideMultipleClassInfo_AddRef,
3031 DocObjProvideMultipleClassInfo_Release,
3032 DocObjProvideMultipleClassInfo_GetClassInfo,
3033 DocObjProvideMultipleClassInfo_GetGUID,
3034 DocObjProvideMultipleClassInfo_GetMultiTypeInfoCount,
3035 DocObjProvideMultipleClassInfo_GetInfoOfIndex
3038 /**********************************************************
3039 * IMarkupServices implementation
3041 static inline HTMLDocumentObj *impl_from_IMarkupServices(IMarkupServices *iface)
3043 return CONTAINING_RECORD(iface, HTMLDocumentObj, IMarkupServices_iface);
3046 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(MarkupServices)
3048 static HRESULT WINAPI DocObjMarkupServices_CreateMarkupPointer(IMarkupServices *iface, IMarkupPointer **ppPointer)
3050 HTMLDocumentObj *This = impl_from_IMarkupServices(iface);
3052 TRACE("(%p)->(%p)\n", This, ppPointer);
3054 return create_markup_pointer(ppPointer);
3057 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(MarkupServices, CreateMarkupContainer, IMarkupContainer**)
3058 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, CreateElement, ELEMENT_TAG_ID,OLECHAR*,IHTMLElement**)
3059 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, CloneElement, IHTMLElement*,IHTMLElement**)
3060 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, InsertElement, IHTMLElement*,IMarkupPointer*,IMarkupPointer*)
3061 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(MarkupServices, RemoveElement, IHTMLElement*)
3062 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, Remove, IMarkupPointer*,IMarkupPointer*)
3063 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, Copy, IMarkupPointer*,IMarkupPointer*,IMarkupPointer*)
3064 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, Move, IMarkupPointer*,IMarkupPointer*,IMarkupPointer*)
3065 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, InsertText, OLECHAR*,LONG,IMarkupPointer*)
3066 HTMLDOCUMENTOBJ_FWD_TO_NODE_5(MarkupServices, ParseString, OLECHAR*,DWORD,IMarkupContainer**,IMarkupPointer*,IMarkupPointer*)
3067 HTMLDOCUMENTOBJ_FWD_TO_NODE_5(MarkupServices, ParseGlobal, HGLOBAL,DWORD,IMarkupContainer**,IMarkupPointer*,IMarkupPointer*)
3068 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, IsScopedElement, IHTMLElement*,BOOL*)
3069 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, GetElementTagId, IHTMLElement*,ELEMENT_TAG_ID*)
3070 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, GetTagIDForName, BSTR,ELEMENT_TAG_ID*)
3071 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(MarkupServices, GetNameForTagID, ELEMENT_TAG_ID,BSTR*)
3072 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, MovePointersToRange, IHTMLTxtRange*,IMarkupPointer*,IMarkupPointer*)
3073 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(MarkupServices, MoveRangeToPointers, IMarkupPointer*,IMarkupPointer*,IHTMLTxtRange*)
3074 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(MarkupServices, BeginUndoUnit, OLECHAR*)
3075 HTMLDOCUMENTOBJ_FWD_TO_NODE_0(MarkupServices, EndUndoUnit)
3077 static const IMarkupServicesVtbl DocObjMarkupServicesVtbl = {
3078 DocObjMarkupServices_QueryInterface,
3079 DocObjMarkupServices_AddRef,
3080 DocObjMarkupServices_Release,
3081 DocObjMarkupServices_CreateMarkupPointer,
3082 DocObjMarkupServices_CreateMarkupContainer,
3083 DocObjMarkupServices_CreateElement,
3084 DocObjMarkupServices_CloneElement,
3085 DocObjMarkupServices_InsertElement,
3086 DocObjMarkupServices_RemoveElement,
3087 DocObjMarkupServices_Remove,
3088 DocObjMarkupServices_Copy,
3089 DocObjMarkupServices_Move,
3090 DocObjMarkupServices_InsertText,
3091 DocObjMarkupServices_ParseString,
3092 DocObjMarkupServices_ParseGlobal,
3093 DocObjMarkupServices_IsScopedElement,
3094 DocObjMarkupServices_GetElementTagId,
3095 DocObjMarkupServices_GetTagIDForName,
3096 DocObjMarkupServices_GetNameForTagID,
3097 DocObjMarkupServices_MovePointersToRange,
3098 DocObjMarkupServices_MoveRangeToPointers,
3099 DocObjMarkupServices_BeginUndoUnit,
3100 DocObjMarkupServices_EndUndoUnit
3103 /**********************************************************
3104 * IMarkupContainer implementation
3106 static inline HTMLDocumentObj *impl_from_IMarkupContainer(IMarkupContainer *iface)
3108 return CONTAINING_RECORD(iface, HTMLDocumentObj, IMarkupContainer_iface);
3111 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(MarkupContainer)
3113 static HRESULT WINAPI DocObjMarkupContainer_OwningDoc(IMarkupContainer *iface, IHTMLDocument2 **ppDoc)
3115 HTMLDocumentObj *This = impl_from_IMarkupContainer(iface);
3116 FIXME("(%p)->(%p)\n", This, ppDoc);
3117 return E_NOTIMPL;
3120 static const IMarkupContainerVtbl DocObjMarkupContainerVtbl = {
3121 DocObjMarkupContainer_QueryInterface,
3122 DocObjMarkupContainer_AddRef,
3123 DocObjMarkupContainer_Release,
3124 DocObjMarkupContainer_OwningDoc
3127 /**********************************************************
3128 * IDisplayServices implementation
3130 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(DisplayServices)
3131 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DisplayServices, CreateDisplayPointer, IDisplayPointer**)
3132 HTMLDOCUMENTOBJ_FWD_TO_NODE_4(DisplayServices, TransformRect, RECT*,COORD_SYSTEM,COORD_SYSTEM,IHTMLElement*)
3133 HTMLDOCUMENTOBJ_FWD_TO_NODE_4(DisplayServices, TransformPoint, POINT*,COORD_SYSTEM,COORD_SYSTEM,IHTMLElement*)
3134 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DisplayServices, GetCaret, IHTMLCaret**)
3135 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DisplayServices, GetComputedStyle, IMarkupPointer*,IHTMLComputedStyle**)
3136 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DisplayServices, ScrollRectIntoView, IHTMLElement*,RECT)
3137 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DisplayServices, HasFlowLayout, IHTMLElement*,BOOL*)
3139 static const IDisplayServicesVtbl DocObjDisplayServicesVtbl = {
3140 DocObjDisplayServices_QueryInterface,
3141 DocObjDisplayServices_AddRef,
3142 DocObjDisplayServices_Release,
3143 DocObjDisplayServices_CreateDisplayPointer,
3144 DocObjDisplayServices_TransformRect,
3145 DocObjDisplayServices_TransformPoint,
3146 DocObjDisplayServices_GetCaret,
3147 DocObjDisplayServices_GetComputedStyle,
3148 DocObjDisplayServices_ScrollRectIntoView,
3149 DocObjDisplayServices_HasFlowLayout
3152 /**********************************************************
3153 * IDocumentSelector implementation
3155 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(DocumentSelector)
3156 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DocumentSelector, querySelector, BSTR,IHTMLElement**)
3157 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DocumentSelector, querySelectorAll, BSTR,IHTMLDOMChildrenCollection**)
3159 static const IDocumentSelectorVtbl DocObjDocumentSelectorVtbl = {
3160 DocObjDocumentSelector_QueryInterface,
3161 DocObjDocumentSelector_AddRef,
3162 DocObjDocumentSelector_Release,
3163 DocObjDocumentSelector_GetTypeInfoCount,
3164 DocObjDocumentSelector_GetTypeInfo,
3165 DocObjDocumentSelector_GetIDsOfNames,
3166 DocObjDocumentSelector_Invoke,
3167 DocObjDocumentSelector_querySelector,
3168 DocObjDocumentSelector_querySelectorAll
3171 /**********************************************************
3172 * IDocumentEvent implementation
3174 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(DocumentEvent)
3175 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DocumentEvent, createEvent, BSTR,IDOMEvent**)
3177 static const IDocumentEventVtbl DocObjDocumentEventVtbl = {
3178 DocObjDocumentEvent_QueryInterface,
3179 DocObjDocumentEvent_AddRef,
3180 DocObjDocumentEvent_Release,
3181 DocObjDocumentEvent_GetTypeInfoCount,
3182 DocObjDocumentEvent_GetTypeInfo,
3183 DocObjDocumentEvent_GetIDsOfNames,
3184 DocObjDocumentEvent_Invoke,
3185 DocObjDocumentEvent_createEvent
3188 /**********************************************************
3189 * IDocumentRange implementation
3191 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(DocumentRange)
3192 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DocumentRange, createRange, IHTMLDOMRange**)
3194 static const IDocumentRangeVtbl DocObjDocumentRangeVtbl = {
3195 DocObjDocumentRange_QueryInterface,
3196 DocObjDocumentRange_AddRef,
3197 DocObjDocumentRange_Release,
3198 DocObjDocumentRange_GetTypeInfoCount,
3199 DocObjDocumentRange_GetTypeInfo,
3200 DocObjDocumentRange_GetIDsOfNames,
3201 DocObjDocumentRange_Invoke,
3202 DocObjDocumentRange_createRange
3205 /**********************************************************
3206 * IEventTarget implementation
3208 static inline HTMLDocumentObj *impl_from_IEventTarget(IEventTarget *iface)
3210 return CONTAINING_RECORD(iface, HTMLDocumentObj, IEventTarget_iface);
3213 HTMLDOCUMENTOBJ_IDISPATCH_METHODS(EventTarget)
3215 static HRESULT WINAPI DocObjEventTarget_addEventListener(IEventTarget *iface, BSTR type, IDispatch *listener,
3216 VARIANT_BOOL capture)
3218 HTMLDocumentObj *This = impl_from_IEventTarget(iface);
3220 return IEventTarget_addEventListener(&This->doc_node->node.event_target.IEventTarget_iface, type, listener, capture);
3223 static HRESULT WINAPI DocObjEventTarget_removeEventListener(IEventTarget *iface, BSTR type, IDispatch *listener,
3224 VARIANT_BOOL capture)
3226 HTMLDocumentObj *This = impl_from_IEventTarget(iface);
3228 return IEventTarget_removeEventListener(&This->doc_node->node.event_target.IEventTarget_iface, type, listener, capture);
3231 static HRESULT WINAPI DocObjEventTarget_dispatchEvent(IEventTarget *iface, IDOMEvent *event_iface, VARIANT_BOOL *result)
3233 HTMLDocumentObj *This = impl_from_IEventTarget(iface);
3235 return IEventTarget_dispatchEvent(&This->doc_node->node.event_target.IEventTarget_iface, event_iface, result);
3238 static const IEventTargetVtbl DocObjEventTargetVtbl = {
3239 DocObjEventTarget_QueryInterface,
3240 DocObjEventTarget_AddRef,
3241 DocObjEventTarget_Release,
3242 DocObjEventTarget_GetTypeInfoCount,
3243 DocObjEventTarget_GetTypeInfo,
3244 DocObjEventTarget_GetIDsOfNames,
3245 DocObjEventTarget_Invoke,
3246 DocObjEventTarget_addEventListener,
3247 DocObjEventTarget_removeEventListener,
3248 DocObjEventTarget_dispatchEvent
3251 static inline HTMLDocumentObj *impl_from_IUnknown(IUnknown *iface)
3253 return CONTAINING_RECORD(iface, HTMLDocumentObj, IUnknown_inner);
3256 static HRESULT WINAPI HTMLDocumentObj_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
3258 HTMLDocumentObj *This = impl_from_IUnknown(iface);
3260 TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv);
3262 if(IsEqualGUID(&IID_IUnknown, riid)) {
3263 *ppv = &This->IUnknown_inner;
3264 }else if(IsEqualGUID(&IID_IDispatch, riid) || IsEqualGUID(&IID_IDispatchEx, riid)) {
3265 *ppv = &This->IDispatchEx_iface;
3266 }else if(IsEqualGUID(&IID_IHTMLDocument, riid) || IsEqualGUID(&IID_IHTMLDocument2, riid)) {
3267 *ppv = &This->IHTMLDocument2_iface;
3268 }else if(IsEqualGUID(&IID_IHTMLDocument3, riid)) {
3269 *ppv = &This->IHTMLDocument3_iface;
3270 }else if(IsEqualGUID(&IID_IHTMLDocument4, riid)) {
3271 *ppv = &This->IHTMLDocument4_iface;
3272 }else if(IsEqualGUID(&IID_IHTMLDocument5, riid)) {
3273 *ppv = &This->IHTMLDocument5_iface;
3274 }else if(IsEqualGUID(&IID_IHTMLDocument6, riid)) {
3275 *ppv = &This->IHTMLDocument6_iface;
3276 }else if(IsEqualGUID(&IID_IHTMLDocument7, riid)) {
3277 *ppv = &This->IHTMLDocument7_iface;
3278 }else if(IsEqualGUID(&IID_ICustomDoc, riid)) {
3279 *ppv = &This->ICustomDoc_iface;
3280 }else if(IsEqualGUID(&IID_IDocumentSelector, riid)) {
3281 *ppv = &This->IDocumentSelector_iface;
3282 }else if(IsEqualGUID(&IID_IDocumentEvent, riid)) {
3283 *ppv = &This->IDocumentEvent_iface;
3284 }else if(IsEqualGUID(&DIID_DispHTMLDocument, riid)) {
3285 *ppv = &This->IHTMLDocument2_iface;
3286 }else if(IsEqualGUID(&IID_ISupportErrorInfo, riid)) {
3287 *ppv = &This->ISupportErrorInfo_iface;
3288 }else if(IsEqualGUID(&IID_IProvideClassInfo, riid)) {
3289 *ppv = &This->IProvideMultipleClassInfo_iface;
3290 }else if(IsEqualGUID(&IID_IProvideClassInfo2, riid)) {
3291 *ppv = &This->IProvideMultipleClassInfo_iface;
3292 }else if(IsEqualGUID(&IID_IProvideMultipleClassInfo, riid)) {
3293 *ppv = &This->IProvideMultipleClassInfo_iface;
3294 }else if(IsEqualGUID(&IID_IMarkupServices, riid)) {
3295 *ppv = &This->IMarkupServices_iface;
3296 }else if(IsEqualGUID(&IID_IMarkupContainer, riid)) {
3297 *ppv = &This->IMarkupContainer_iface;
3298 }else if(IsEqualGUID(&IID_IDisplayServices, riid)) {
3299 *ppv = &This->IDisplayServices_iface;
3300 }else if(IsEqualGUID(&IID_IDocumentRange, riid)) {
3301 *ppv = &This->IDocumentRange_iface;
3302 }else if(IsEqualGUID(&IID_IOleDocumentView, riid)) {
3303 *ppv = &This->IOleDocumentView_iface;
3304 }else if(IsEqualGUID(&IID_IViewObject, riid)) {
3305 *ppv = &This->IViewObjectEx_iface;
3306 }else if(IsEqualGUID(&IID_IViewObject2, riid)) {
3307 *ppv = &This->IViewObjectEx_iface;
3308 }else if(IsEqualGUID(&IID_IViewObjectEx, riid)) {
3309 *ppv = &This->IViewObjectEx_iface;
3310 }else if(IsEqualGUID(&IID_IPersist, riid)) {
3311 *ppv = &This->IPersistFile_iface;
3312 }else if(IsEqualGUID(&IID_IPersistMoniker, riid)) {
3313 *ppv = &This->IPersistMoniker_iface;
3314 }else if(IsEqualGUID(&IID_IPersistFile, riid)) {
3315 *ppv = &This->IPersistFile_iface;
3316 }else if(IsEqualGUID(&IID_IMonikerProp, riid)) {
3317 *ppv = &This->IMonikerProp_iface;
3318 }else if(IsEqualGUID(&IID_IPersistStreamInit, riid)) {
3319 *ppv = &This->IPersistStreamInit_iface;
3320 }else if(IsEqualGUID(&IID_IPersistHistory, riid)) {
3321 *ppv = &This->IPersistHistory_iface;
3322 }else if(IsEqualGUID(&IID_IHlinkTarget, riid)) {
3323 *ppv = &This->IHlinkTarget_iface;
3324 }else if(IsEqualGUID(&IID_IOleCommandTarget, riid)) {
3325 *ppv = &This->IOleCommandTarget_iface;
3326 }else if(IsEqualGUID(&IID_IOleObject, riid)) {
3327 *ppv = &This->IOleObject_iface;
3328 }else if(IsEqualGUID(&IID_IOleDocument, riid)) {
3329 *ppv = &This->IOleDocument_iface;
3330 }else if(IsEqualGUID(&IID_IOleInPlaceActiveObject, riid)) {
3331 *ppv = &This->IOleInPlaceActiveObject_iface;
3332 }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
3333 *ppv = &This->IOleInPlaceActiveObject_iface;
3334 }else if(IsEqualGUID(&IID_IOleInPlaceObject, riid)) {
3335 *ppv = &This->IOleInPlaceObjectWindowless_iface;
3336 }else if(IsEqualGUID(&IID_IOleInPlaceObjectWindowless, riid)) {
3337 *ppv = &This->IOleInPlaceObjectWindowless_iface;
3338 }else if(IsEqualGUID(&IID_IOleControl, riid)) {
3339 *ppv = &This->IOleControl_iface;
3340 }else if(IsEqualGUID(&IID_IObjectWithSite, riid)) {
3341 *ppv = &This->IObjectWithSite_iface;
3342 }else if(IsEqualGUID(&IID_IOleContainer, riid)) {
3343 *ppv = &This->IOleContainer_iface;
3344 }else if(IsEqualGUID(&IID_IObjectSafety, riid)) {
3345 *ppv = &This->IObjectSafety_iface;
3346 }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
3347 *ppv = &This->IServiceProvider_iface;
3348 }else if(IsEqualGUID(&IID_ITargetContainer, riid)) {
3349 *ppv = &This->ITargetContainer_iface;
3350 }else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
3351 *ppv = &This->cp_container.IConnectionPointContainer_iface;
3352 }else if(IsEqualGUID(&IID_IEventTarget, riid)) {
3353 /* IEventTarget is conditionally exposed. This breaks COM rules when
3354 it changes its compat mode, but it is how native works (see tests). */
3355 if(!This->doc_node || This->doc_node->document_mode < COMPAT_MODE_IE9) {
3356 *ppv = NULL;
3357 return E_NOINTERFACE;
3359 *ppv = &This->IEventTarget_iface;
3360 }else if(IsEqualGUID(&CLSID_CMarkup, riid)) {
3361 FIXME("(%p)->(CLSID_CMarkup %p)\n", This, ppv);
3362 *ppv = NULL;
3363 return E_NOINTERFACE;
3364 }else if(IsEqualGUID(&IID_IRunnableObject, riid)) {
3365 TRACE("(%p)->(IID_IRunnableObject %p) returning NULL\n", This, ppv);
3366 *ppv = NULL;
3367 return E_NOINTERFACE;
3368 }else if(IsEqualGUID(&IID_IPersistPropertyBag, riid)) {
3369 TRACE("(%p)->(IID_IPersistPropertyBag %p) returning NULL\n", This, ppv);
3370 *ppv = NULL;
3371 return E_NOINTERFACE;
3372 }else if(IsEqualGUID(&IID_IExternalConnection, riid)) {
3373 TRACE("(%p)->(IID_IExternalConnection %p) returning NULL\n", This, ppv);
3374 *ppv = NULL;
3375 return E_NOINTERFACE;
3376 }else if(IsEqualGUID(&IID_IStdMarshalInfo, riid)) {
3377 TRACE("(%p)->(IID_IStdMarshalInfo %p) returning NULL\n", This, ppv);
3378 *ppv = NULL;
3379 return E_NOINTERFACE;
3380 }else if(IsEqualGUID(&IID_IDispatchJS, riid) ||
3381 IsEqualGUID(&IID_UndocumentedScriptIface, riid) ||
3382 IsEqualGUID(&IID_IMarshal, riid) ||
3383 IsEqualGUID(&IID_IManagedObject, riid)) {
3384 *ppv = NULL;
3385 return E_NOINTERFACE;
3386 }else {
3387 FIXME("Unimplemented interface %s\n", debugstr_mshtml_guid(riid));
3388 *ppv = NULL;
3389 return E_NOINTERFACE;
3392 IUnknown_AddRef((IUnknown*)*ppv);
3393 return S_OK;
3396 static ULONG WINAPI HTMLDocumentObj_AddRef(IUnknown *iface)
3398 HTMLDocumentObj *This = impl_from_IUnknown(iface);
3399 ULONG ref = InterlockedIncrement(&This->ref);
3401 TRACE("(%p) ref = %lu\n", This, ref);
3403 return ref;
3406 static ULONG WINAPI HTMLDocumentObj_Release(IUnknown *iface)
3408 HTMLDocumentObj *This = impl_from_IUnknown(iface);
3409 ULONG ref = InterlockedDecrement(&This->ref);
3411 TRACE("(%p) ref = %lu\n", This, ref);
3413 if(!ref) {
3414 if(This->doc_node) {
3415 This->doc_node->doc_obj = NULL;
3416 IHTMLDOMNode_Release(&This->doc_node->node.IHTMLDOMNode_iface);
3418 if(This->window)
3419 IHTMLWindow2_Release(&This->window->base.IHTMLWindow2_iface);
3420 if(This->advise_holder)
3421 IOleAdviseHolder_Release(This->advise_holder);
3423 if(This->view_sink)
3424 IAdviseSink_Release(This->view_sink);
3425 if(This->client)
3426 IOleObject_SetClientSite(&This->IOleObject_iface, NULL);
3427 if(This->hostui)
3428 ICustomDoc_SetUIHandler(&This->ICustomDoc_iface, NULL);
3429 if(This->in_place_active)
3430 IOleInPlaceObjectWindowless_InPlaceDeactivate(&This->IOleInPlaceObjectWindowless_iface);
3431 if(This->ipsite)
3432 IOleDocumentView_SetInPlaceSite(&This->IOleDocumentView_iface, NULL);
3433 if(This->undomgr)
3434 IOleUndoManager_Release(This->undomgr);
3435 if(This->editsvcs)
3436 IHTMLEditServices_Release(This->editsvcs);
3437 if(This->tooltips_hwnd)
3438 DestroyWindow(This->tooltips_hwnd);
3440 if(This->hwnd)
3441 DestroyWindow(This->hwnd);
3442 free(This->mime);
3444 remove_target_tasks(This->task_magic);
3445 ConnectionPointContainer_Destroy(&This->cp_container);
3447 if(This->nscontainer)
3448 detach_gecko_browser(This->nscontainer);
3449 free(This);
3452 return ref;
3455 static const IUnknownVtbl HTMLDocumentObjVtbl = {
3456 HTMLDocumentObj_QueryInterface,
3457 HTMLDocumentObj_AddRef,
3458 HTMLDocumentObj_Release
3461 /**********************************************************
3462 * IDispatchEx implementation
3464 * Forwarding this breaks Dispatch rules by potentially retrieving
3465 * a different DISPID for the same name, if the node was changed
3466 * while using the same doc obj, but it is how native works.
3468 static inline HTMLDocumentObj *impl_from_IDispatchEx(IDispatchEx *iface)
3470 return CONTAINING_RECORD(iface, HTMLDocumentObj, IDispatchEx_iface);
3473 HTMLDOCUMENTOBJ_IUNKNOWN_METHODS(DispatchEx)
3474 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DispatchEx, GetTypeInfoCount, UINT*)
3475 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(DispatchEx, GetTypeInfo, UINT,LCID,ITypeInfo**)
3476 HTMLDOCUMENTOBJ_FWD_TO_NODE_5(DispatchEx, GetIDsOfNames, REFIID,LPOLESTR*,UINT,LCID,DISPID*)
3478 static HRESULT WINAPI DocObjDispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember, REFIID riid, LCID lcid,
3479 WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
3481 HTMLDocumentObj *This = impl_from_IDispatchEx(iface);
3483 return IDispatchEx_InvokeEx(&This->doc_node->IDispatchEx_iface, dispIdMember, lcid, wFlags, pDispParams,
3484 pVarResult, pExcepInfo, NULL);
3487 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(DispatchEx, GetDispID, BSTR,DWORD,DISPID*)
3489 static HRESULT WINAPI DocObjDispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
3490 VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
3492 HTMLDocumentObj *This = impl_from_IDispatchEx(iface);
3494 return IDispatchEx_InvokeEx(&This->doc_node->IDispatchEx_iface, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
3497 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DispatchEx, DeleteMemberByName, BSTR,DWORD)
3498 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DispatchEx, DeleteMemberByDispID, DISPID)
3499 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(DispatchEx, GetMemberProperties, DISPID,DWORD,DWORD*)
3500 HTMLDOCUMENTOBJ_FWD_TO_NODE_2(DispatchEx, GetMemberName, DISPID,BSTR*)
3501 HTMLDOCUMENTOBJ_FWD_TO_NODE_3(DispatchEx, GetNextDispID, DWORD,DISPID,DISPID*)
3502 HTMLDOCUMENTOBJ_FWD_TO_NODE_1(DispatchEx, GetNameSpaceParent, IUnknown**)
3504 static const IDispatchExVtbl DocObjDispatchExVtbl = {
3505 DocObjDispatchEx_QueryInterface,
3506 DocObjDispatchEx_AddRef,
3507 DocObjDispatchEx_Release,
3508 DocObjDispatchEx_GetTypeInfoCount,
3509 DocObjDispatchEx_GetTypeInfo,
3510 DocObjDispatchEx_GetIDsOfNames,
3511 DocObjDispatchEx_Invoke,
3512 DocObjDispatchEx_GetDispID,
3513 DocObjDispatchEx_InvokeEx,
3514 DocObjDispatchEx_DeleteMemberByName,
3515 DocObjDispatchEx_DeleteMemberByDispID,
3516 DocObjDispatchEx_GetMemberProperties,
3517 DocObjDispatchEx_GetMemberName,
3518 DocObjDispatchEx_GetNextDispID,
3519 DocObjDispatchEx_GetNameSpaceParent
3522 /**********************************************************
3523 * ICustomDoc implementation
3526 static inline HTMLDocumentObj *impl_from_ICustomDoc(ICustomDoc *iface)
3528 return CONTAINING_RECORD(iface, HTMLDocumentObj, ICustomDoc_iface);
3531 static HRESULT WINAPI CustomDoc_QueryInterface(ICustomDoc *iface, REFIID riid, void **ppv)
3533 HTMLDocumentObj *This = impl_from_ICustomDoc(iface);
3535 return IUnknown_QueryInterface(This->outer_unk, riid, ppv);
3538 static ULONG WINAPI CustomDoc_AddRef(ICustomDoc *iface)
3540 HTMLDocumentObj *This = impl_from_ICustomDoc(iface);
3542 return IUnknown_AddRef(This->outer_unk);
3545 static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
3547 HTMLDocumentObj *This = impl_from_ICustomDoc(iface);
3549 return IUnknown_Release(This->outer_unk);
3552 static HRESULT WINAPI CustomDoc_SetUIHandler(ICustomDoc *iface, IDocHostUIHandler *pUIHandler)
3554 HTMLDocumentObj *This = impl_from_ICustomDoc(iface);
3555 IOleCommandTarget *cmdtrg;
3556 HRESULT hres;
3558 TRACE("(%p)->(%p)\n", This, pUIHandler);
3560 if(This->custom_hostui && This->hostui == pUIHandler)
3561 return S_OK;
3563 This->custom_hostui = TRUE;
3565 if(This->hostui)
3566 IDocHostUIHandler_Release(This->hostui);
3567 if(pUIHandler)
3568 IDocHostUIHandler_AddRef(pUIHandler);
3569 This->hostui = pUIHandler;
3570 if(!pUIHandler)
3571 return S_OK;
3573 hres = IDocHostUIHandler_QueryInterface(pUIHandler, &IID_IOleCommandTarget, (void**)&cmdtrg);
3574 if(SUCCEEDED(hres)) {
3575 FIXME("custom UI handler supports IOleCommandTarget\n");
3576 IOleCommandTarget_Release(cmdtrg);
3579 return S_OK;
3582 static const ICustomDocVtbl CustomDocVtbl = {
3583 CustomDoc_QueryInterface,
3584 CustomDoc_AddRef,
3585 CustomDoc_Release,
3586 CustomDoc_SetUIHandler
3589 static void HTMLDocumentObj_on_advise(IUnknown *iface, cp_static_data_t *cp)
3591 HTMLDocumentObj *This = impl_from_IUnknown(iface);
3593 if(This->window)
3594 update_doc_cp_events(This->doc_node, cp);
3597 static cp_static_data_t HTMLDocumentObjEvents_data = { HTMLDocumentEvents_tid, HTMLDocumentObj_on_advise };
3598 static cp_static_data_t HTMLDocumentObjEvents2_data = { HTMLDocumentEvents2_tid, HTMLDocumentObj_on_advise, TRUE };
3600 static const cpc_entry_t HTMLDocumentObj_cpc[] = {
3601 {&IID_IDispatch, &HTMLDocumentObjEvents_data},
3602 {&IID_IPropertyNotifySink},
3603 {&DIID_HTMLDocumentEvents, &HTMLDocumentObjEvents_data},
3604 {&DIID_HTMLDocumentEvents2, &HTMLDocumentObjEvents2_data},
3605 {NULL}
3608 static HRESULT create_document_object(BOOL is_mhtml, IUnknown *outer, REFIID riid, void **ppv)
3610 HTMLDocumentObj *doc;
3611 HRESULT hres;
3613 if(outer && !IsEqualGUID(&IID_IUnknown, riid)) {
3614 *ppv = NULL;
3615 return E_INVALIDARG;
3618 /* ensure that security manager is initialized */
3619 if(!get_security_manager())
3620 return E_OUTOFMEMORY;
3622 doc = calloc(1, sizeof(HTMLDocumentObj));
3623 if(!doc)
3624 return E_OUTOFMEMORY;
3626 doc->ref = 1;
3627 doc->IUnknown_inner.lpVtbl = &HTMLDocumentObjVtbl;
3628 doc->IDispatchEx_iface.lpVtbl = &DocObjDispatchExVtbl;
3629 doc->ICustomDoc_iface.lpVtbl = &CustomDocVtbl;
3630 doc->IHTMLDocument2_iface.lpVtbl = &DocObjHTMLDocument2Vtbl;
3631 doc->IHTMLDocument3_iface.lpVtbl = &DocObjHTMLDocument3Vtbl;
3632 doc->IHTMLDocument4_iface.lpVtbl = &DocObjHTMLDocument4Vtbl;
3633 doc->IHTMLDocument5_iface.lpVtbl = &DocObjHTMLDocument5Vtbl;
3634 doc->IHTMLDocument6_iface.lpVtbl = &DocObjHTMLDocument6Vtbl;
3635 doc->IHTMLDocument7_iface.lpVtbl = &DocObjHTMLDocument7Vtbl;
3636 doc->IDocumentSelector_iface.lpVtbl = &DocObjDocumentSelectorVtbl;
3637 doc->IDocumentEvent_iface.lpVtbl = &DocObjDocumentEventVtbl;
3638 doc->ISupportErrorInfo_iface.lpVtbl = &DocObjSupportErrorInfoVtbl;
3639 doc->IProvideMultipleClassInfo_iface.lpVtbl = &DocObjProvideMultipleClassInfoVtbl;
3640 doc->IMarkupServices_iface.lpVtbl = &DocObjMarkupServicesVtbl;
3641 doc->IMarkupContainer_iface.lpVtbl = &DocObjMarkupContainerVtbl;
3642 doc->IDisplayServices_iface.lpVtbl = &DocObjDisplayServicesVtbl;
3643 doc->IDocumentRange_iface.lpVtbl = &DocObjDocumentRangeVtbl;
3644 doc->IEventTarget_iface.lpVtbl = &DocObjEventTargetVtbl;
3646 doc->outer_unk = outer ? outer : &doc->IUnknown_inner;
3648 ConnectionPointContainer_Init(&doc->cp_container, &doc->IUnknown_inner, HTMLDocumentObj_cpc);
3649 HTMLDocumentObj_Persist_Init(doc);
3650 HTMLDocumentObj_Service_Init(doc);
3651 HTMLDocumentObj_OleCmd_Init(doc);
3652 HTMLDocumentObj_OleObj_Init(doc);
3653 TargetContainer_Init(doc);
3654 doc->is_mhtml = is_mhtml;
3656 doc->task_magic = get_task_target_magic();
3658 HTMLDocument_View_Init(doc);
3660 hres = create_gecko_browser(doc, &doc->nscontainer);
3661 if(FAILED(hres)) {
3662 ERR("Failed to init Gecko, returning CLASS_E_CLASSNOTAVAILABLE\n");
3663 IUnknown_Release(&doc->IUnknown_inner);
3664 return hres;
3667 if(IsEqualGUID(&IID_IUnknown, riid)) {
3668 *ppv = &doc->IUnknown_inner;
3669 }else {
3670 hres = IUnknown_QueryInterface(doc->outer_unk, riid, ppv);
3671 IUnknown_Release(doc->outer_unk);
3672 if(FAILED(hres))
3673 return hres;
3676 doc->window = doc->nscontainer->content_window;
3677 IHTMLWindow2_AddRef(&doc->window->base.IHTMLWindow2_iface);
3679 if(!doc->doc_node) {
3680 doc->doc_node = doc->window->base.inner_window->doc;
3681 IHTMLDOMNode_AddRef(&doc->doc_node->node.IHTMLDOMNode_iface);
3684 get_thread_hwnd();
3686 return S_OK;
3689 HRESULT HTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
3691 TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
3692 return create_document_object(FALSE, outer, riid, ppv);
3695 HRESULT MHTMLDocument_Create(IUnknown *outer, REFIID riid, void **ppv)
3697 TRACE("(%p %s %p)\n", outer, debugstr_mshtml_guid(riid), ppv);
3698 return create_document_object(TRUE, outer, riid, ppv);