ReactOS 0.4.15-dev-7674-gc0b4db1
dochost.c File Reference
#include "ieframe.h"
#include "exdispid.h"
#include "mshtml.h"
#include "perhist.h"
#include "initguid.h"
#include "wine/debug.h"
Include dependency graph for dochost.c:

Go to the source code of this file.

Classes

struct  ready_state_task_t
 

Macros

#define DOCHOST_DOCCANNAVIGATE   0
 
#define CMDID_EXPLORER_UPDATEHISTORY   38
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ieframe)
 
 DEFINE_OLEGUID (CGID_DocHostCmdPriv, 0x000214D4L, 0, 0)
 
void push_dochost_task (DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send)
 
LRESULT process_dochost_tasks (DocHost *This)
 
void abort_dochost_tasks (DocHost *This, task_proc_t proc)
 
void on_commandstate_change (DocHost *doc_host, LONG command, BOOL enable)
 
void update_navigation_commands (DocHost *dochost)
 
static void notif_complete (DocHost *This, DISPID dispid)
 
static void object_available (DocHost *This)
 
static HRESULT get_doc_ready_state (DocHost *This, READYSTATE *ret)
 
static void advise_prop_notif (DocHost *This, BOOL set)
 
void set_doc_state (DocHost *This, READYSTATE doc_state)
 
static void update_ready_state (DocHost *This, READYSTATE ready_state)
 
static void ready_state_task_destr (task_header_t *_task)
 
static void ready_state_proc (DocHost *This, task_header_t *_task)
 
static void push_ready_state_task (DocHost *This, READYSTATE ready_state)
 
static void object_available_task_destr (task_header_t *task)
 
static void object_available_proc (DocHost *This, task_header_t *task)
 
HRESULT dochost_object_available (DocHost *This, IUnknown *doc)
 
static LRESULT resize_document (DocHost *This, LONG width, LONG height)
 
static LRESULT WINAPI doc_view_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static void free_travellog_entry (travellog_entry_t *entry)
 
static IStreamget_travellog_stream (DocHost *This)
 
static void dump_travellog (DocHost *This)
 
static void update_travellog (DocHost *This)
 
void create_doc_view_hwnd (DocHost *This)
 
void deactivate_document (DocHost *This)
 
HRESULT refresh_document (DocHost *This, const VARIANT *level)
 
void release_dochost_client (DocHost *This)
 
static DocHostimpl_from_IOleCommandTarget (IOleCommandTarget *iface)
 
static HRESULT WINAPI ClOleCommandTarget_QueryInterface (IOleCommandTarget *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClOleCommandTarget_AddRef (IOleCommandTarget *iface)
 
static ULONG WINAPI ClOleCommandTarget_Release (IOleCommandTarget *iface)
 
static HRESULT WINAPI ClOleCommandTarget_QueryStatus (IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
 
static HRESULT WINAPI ClOleCommandTarget_Exec (IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
 
static DocHostimpl_from_IDocHostUIHandler2 (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_QueryInterface (IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI DocHostUIHandler_AddRef (IDocHostUIHandler2 *iface)
 
static ULONG WINAPI DocHostUIHandler_Release (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_ShowContextMenu (IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
 
static HRESULT WINAPI DocHostUIHandler_GetHostInfo (IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
 
static HRESULT WINAPI DocHostUIHandler_ShowUI (IDocHostUIHandler2 *iface, DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
 
static HRESULT WINAPI DocHostUIHandler_HideUI (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_UpdateUI (IDocHostUIHandler2 *iface)
 
static HRESULT WINAPI DocHostUIHandler_EnableModeless (IDocHostUIHandler2 *iface, BOOL fEnable)
 
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate (IDocHostUIHandler2 *iface, BOOL fActivate)
 
static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate (IDocHostUIHandler2 *iface, BOOL fActivate)
 
static HRESULT WINAPI DocHostUIHandler_ResizeBorder (IDocHostUIHandler2 *iface, LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
 
static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator (IDocHostUIHandler2 *iface, LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
 
static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath (IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
 
static HRESULT WINAPI DocHostUIHandler_GetDropTarget (IDocHostUIHandler2 *iface, IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
 
static HRESULT WINAPI DocHostUIHandler_GetExternal (IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
 
static HRESULT WINAPI DocHostUIHandler_TranslateUrl (IDocHostUIHandler2 *iface, DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
 
static HRESULT WINAPI DocHostUIHandler_FilterDataObject (IDocHostUIHandler2 *iface, IDataObject *pDO, IDataObject **ppDORet)
 
static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath (IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
 
static DocHostimpl_from_IPropertyNotifySink (IPropertyNotifySink *iface)
 
static HRESULT WINAPI PropertyNotifySink_QueryInterface (IPropertyNotifySink *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI PropertyNotifySink_AddRef (IPropertyNotifySink *iface)
 
static ULONG WINAPI PropertyNotifySink_Release (IPropertyNotifySink *iface)
 
static HRESULT WINAPI PropertyNotifySink_OnChanged (IPropertyNotifySink *iface, DISPID dispID)
 
static HRESULT WINAPI PropertyNotifySink_OnRequestEdit (IPropertyNotifySink *iface, DISPID dispID)
 
void DocHost_Init (DocHost *This, IWebBrowser2 *wb, const IDocHostContainerVtbl *container)
 
void DocHost_Release (DocHost *This)
 

Variables

static ATOM doc_view_atom = 0
 
static const IOleCommandTargetVtbl OleCommandTargetVtbl
 
static const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
 
static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
 

Macro Definition Documentation

◆ CMDID_EXPLORER_UPDATEHISTORY

#define CMDID_EXPLORER_UPDATEHISTORY   38

Definition at line 35 of file dochost.c.

◆ DOCHOST_DOCCANNAVIGATE

#define DOCHOST_DOCCANNAVIGATE   0

Definition at line 32 of file dochost.c.

Function Documentation

◆ abort_dochost_tasks()

void abort_dochost_tasks ( DocHost This,
task_proc_t  proc 
)

Definition at line 70 of file dochost.c.

71{
72 task_header_t *task, *cursor;
73
75 if(proc && proc != task->proc)
76 continue;
77
78 list_remove(&task->entry);
79 task->destr(task);
80 }
81}
static void list_remove(struct list_entry *entry)
Definition: list.h:90
const char cursor[]
Definition: icontest.c:13
uint32_t entry
Definition: isohybrid.c:63
static HANDLE proc()
Definition: pdb.c:34
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
async_task_proc_t proc
Definition: internet.h:389

Referenced by async_doc_navigate(), and DocHost_Release().

◆ advise_prop_notif()

static void advise_prop_notif ( DocHost This,
BOOL  set 
)
static

Definition at line 209 of file dochost.c.

210{
211 IConnectionPointContainer *cp_container;
214
215 hres = IUnknown_QueryInterface(This->document, &IID_IConnectionPointContainer, (void**)&cp_container);
216 if(FAILED(hres))
217 return;
218
219 hres = IConnectionPointContainer_FindConnectionPoint(cp_container, &IID_IPropertyNotifySink, &cp);
220 IConnectionPointContainer_Release(cp_container);
221 if(FAILED(hres))
222 return;
223
224 if(set)
225 hres = IConnectionPoint_Advise(cp, (IUnknown*)&This->IPropertyNotifySink_iface, &This->prop_notif_cookie);
226 else
227 hres = IConnectionPoint_Unadvise(cp, This->prop_notif_cookie);
228 IConnectionPoint_Release(cp);
229
230 if(SUCCEEDED(hres))
231 This->is_prop_notif = set;
232}
Definition: _set.h:50
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
POINT cp
Definition: magnifier.c:59
HRESULT hres
Definition: protocol.c:465
const GUID IID_IConnectionPointContainer
const GUID IID_IPropertyNotifySink

Referenced by deactivate_document(), dochost_object_available(), and PropertyNotifySink_OnChanged().

◆ ClOleCommandTarget_AddRef()

static ULONG WINAPI ClOleCommandTarget_AddRef ( IOleCommandTarget iface)
static

Definition at line 641 of file dochost.c.

642{
644 return IOleClientSite_AddRef(&This->IOleClientSite_iface);
645}
static DocHost * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
Definition: dochost.c:629

◆ ClOleCommandTarget_Exec()

static HRESULT WINAPI ClOleCommandTarget_Exec ( IOleCommandTarget iface,
const GUID pguidCmdGroup,
DWORD  nCmdID,
DWORD  nCmdexecopt,
VARIANT pvaIn,
VARIANT pvaOut 
)
static

Definition at line 667 of file dochost.c.

670{
672
673 TRACE("(%p)->(%s %d %d %s %s)\n", This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt,
674 debugstr_variant(pvaIn), debugstr_variant(pvaOut));
675
676 if(!pguidCmdGroup) {
677 switch(nCmdID) {
678 case OLECMDID_UPDATECOMMANDS:
679 if(!This->olecmd)
680 return E_NOTIMPL;
681 return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
682 case OLECMDID_SETDOWNLOADSTATE:
683 if(pvaIn && V_VT(pvaIn) == VT_I4)
684 This->busy = V_I4(pvaIn) ? VARIANT_TRUE : VARIANT_FALSE;
685 if(This->olecmd)
686 return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
687
688 if(!pvaIn || V_VT(pvaIn) != VT_I4)
689 return E_INVALIDARG;
690
692 return S_OK;
693 default:
694 TRACE("Unimplemented cmdid %d\n", nCmdID);
695 return E_NOTIMPL;
696 }
697 }
698
699 if(IsEqualGUID(pguidCmdGroup, &CGID_DocHostCmdPriv)) {
700 switch(nCmdID) {
702 if(!pvaIn || V_VT(pvaIn) != VT_UNKNOWN)
703 return E_INVALIDARG;
704
705 if(This->doc_navigate)
706 IUnknown_Release(This->doc_navigate);
707 IUnknown_AddRef(V_UNKNOWN(pvaIn));
708 This->doc_navigate = V_UNKNOWN(pvaIn);
709 return S_OK;
710
711 case 1: {
712 IHTMLWindow2 *win2;
713 SAFEARRAY *sa = V_ARRAY(pvaIn);
714 VARIANT status_code, url, htmlwindow;
715 LONG ind;
717
718 if(V_VT(pvaIn) != VT_ARRAY || !sa || (SafeArrayGetDim(sa) != 1))
719 return E_INVALIDARG;
720
721 ind = 0;
723 if(FAILED(hres) || V_VT(&status_code)!=VT_I4)
724 return E_INVALIDARG;
725
726 ind = 1;
727 hres = SafeArrayGetElement(sa, &ind, &url);
728 if(FAILED(hres) || V_VT(&url)!=VT_BSTR)
729 return E_INVALIDARG;
730
731 ind = 3;
732 hres = SafeArrayGetElement(sa, &ind, &htmlwindow);
733 if(FAILED(hres) || V_VT(&htmlwindow)!=VT_UNKNOWN || !V_UNKNOWN(&htmlwindow))
734 return E_INVALIDARG;
735
736 hres = IUnknown_QueryInterface(V_UNKNOWN(&htmlwindow), &IID_IHTMLWindow2, (void**)&win2);
737 if(FAILED(hres))
738 return E_INVALIDARG;
739
741 IHTMLWindow2_Release(win2);
742 return S_OK;
743 }
744
745 default:
746 TRACE("unsupported command %d of CGID_DocHostCmdPriv\n", nCmdID);
747 return E_NOTIMPL;
748 }
749 }
750
751 if(IsEqualGUID(pguidCmdGroup, &CGID_Explorer)) {
752 switch(nCmdID) {
756 return S_OK;
757
758 default:
759 TRACE("Unimplemented cmdid %d of CGID_Explorer\n", nCmdID);
760 return E_NOTIMPL;
761 }
762 }
763
764 if(IsEqualGUID(pguidCmdGroup, &CGID_ShellDocView)) {
765 switch(nCmdID) {
766 default:
767 TRACE("Unimplemented cmdid %d of CGID_ShellDocView\n", nCmdID);
768 return E_NOTIMPL;
769 }
770 }
771
772 if(IsEqualGUID(&CGID_DocHostCommandHandler, pguidCmdGroup)) {
773 if(!This->olecmd)
774 return E_NOTIMPL;
775 return IOleCommandTarget_Exec(This->olecmd, pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
776 }
777
778 TRACE("Unimplemented cmdid %d of group %s\n", nCmdID, debugstr_guid(pguidCmdGroup));
779 return E_NOTIMPL;
780}
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
@ VT_BSTR
Definition: compat.h:2303
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_ARRAY
Definition: compat.h:2341
@ VT_I4
Definition: compat.h:2298
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
Definition: safearray.c:947
UINT WINAPI SafeArrayGetDim(SAFEARRAY *psa)
Definition: safearray.c:1094
#define CMDID_EXPLORER_UPDATEHISTORY
Definition: dochost.c:35
static void update_travellog(DocHost *This)
Definition: dochost.c:424
#define DOCHOST_DOCCANNAVIGATE
Definition: dochost.c:32
void update_navigation_commands(DocHost *dochost)
Definition: dochost.c:106
void handle_navigation_error(DocHost *, HRESULT, BSTR, IHTMLWindow2 *) DECLSPEC_HIDDEN
Definition: navigate.c:315
void notify_download_state(DocHost *, BOOL) DECLSPEC_HIDDEN
Definition: navigate.c:153
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
static const WCHAR url[]
Definition: encode.c:1432
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
interface IHTMLWindow2 IHTMLWindow2
Definition: mshtmhst.idl:64
#define V_ARRAY(A)
Definition: oleauto.h:222
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
#define V_I4(A)
Definition: oleauto.h:247
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define TRACE(s)
Definition: solgame.cpp:4

◆ ClOleCommandTarget_QueryInterface()

static HRESULT WINAPI ClOleCommandTarget_QueryInterface ( IOleCommandTarget iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 634 of file dochost.c.

636{
638 return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
639}
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39

◆ ClOleCommandTarget_QueryStatus()

static HRESULT WINAPI ClOleCommandTarget_QueryStatus ( IOleCommandTarget iface,
const GUID pguidCmdGroup,
ULONG  cCmds,
OLECMD  prgCmds[],
OLECMDTEXT *  pCmdText 
)
static

Definition at line 653 of file dochost.c.

655{
657 ULONG i;
658
659 TRACE("(%p)->(%s %u %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds,
660 pCmdText);
661 for(i=0; prgCmds && i < cCmds; i++)
662 TRACE("unsupported command %u (%x)\n", prgCmds[i].cmdID, prgCmds[i].cmdf);
663
664 return E_NOTIMPL;
665}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
OLECMDF cmdf
Definition: olecmd.c:716
uint32_t ULONG
Definition: typedefs.h:59

◆ ClOleCommandTarget_Release()

static ULONG WINAPI ClOleCommandTarget_Release ( IOleCommandTarget iface)
static

Definition at line 647 of file dochost.c.

648{
650 return IOleClientSite_Release(&This->IOleClientSite_iface);
651}

◆ create_doc_view_hwnd()

void create_doc_view_hwnd ( DocHost This)

Definition at line 479 of file dochost.c.

480{
481 RECT rect;
482
483 static const WCHAR wszShell_DocObject_View[] =
484 {'S','h','e','l','l',' ','D','o','c','O','b','j','e','c','t',' ','V','i','e','w',0};
485
486 if(!doc_view_atom) {
487 static WNDCLASSEXW wndclass = {
488 sizeof(wndclass),
491 0, 0 /* native uses 4*/, NULL, NULL, NULL,
492 (HBRUSH)(COLOR_WINDOW + 1), NULL,
493 wszShell_DocObject_View,
494 NULL
495 };
496
497 wndclass.hInstance = ieframe_instance;
498
499 doc_view_atom = RegisterClassExW(&wndclass);
500 }
501
502 This->container_vtbl->get_docobj_rect(This, &rect);
503 This->hwnd = CreateWindowExW(0, wszShell_DocObject_View,
504 wszShell_DocObject_View,
506 rect.left, rect.top, rect.right, rect.bottom, This->frame_hwnd,
508}
#define NULL
Definition: types.h:112
static ATOM doc_view_atom
Definition: dochost.c:37
static LRESULT WINAPI doc_view_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dochost.c:364
HINSTANCE ieframe_instance
Definition: ieframe_main.c:32
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VISIBLE
Definition: pedump.c:620
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_CLIPCHILDREN
Definition: pedump.c:619
& rect
Definition: startmenu.cpp:1413
HINSTANCE hInstance
Definition: winuser.h:3220
#define COLOR_WINDOW
Definition: winuser.h:917
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define CS_PARENTDC
Definition: winuser.h:656
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by create_frame_hwnd(), and navigate_bsc_proc().

◆ deactivate_document()

void deactivate_document ( DocHost This)

Definition at line 510 of file dochost.c.

511{
513 IOleObject *oleobj = NULL;
514 IHlinkTarget *hlink = NULL;
516
517 if(!This->document) return;
518
519 if(This->doc_navigate) {
520 IUnknown_Release(This->doc_navigate);
521 This->doc_navigate = NULL;
522 }
523
524 if(This->is_prop_notif)
526
527 if(This->view)
528 IOleDocumentView_UIActivate(This->view, FALSE);
529
530 hres = IUnknown_QueryInterface(This->document, &IID_IOleInPlaceObjectWindowless,
531 (void**)&winobj);
532 if(SUCCEEDED(hres)) {
533 IOleInPlaceObjectWindowless_InPlaceDeactivate(winobj);
534 IOleInPlaceObjectWindowless_Release(winobj);
535 }
536
537 if(This->view) {
538 IOleDocumentView_Show(This->view, FALSE);
539 IOleDocumentView_CloseView(This->view, 0);
540 IOleDocumentView_SetInPlaceSite(This->view, NULL);
541 IOleDocumentView_Release(This->view);
542 This->view = NULL;
543 }
544
545 hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&oleobj);
546 if(SUCCEEDED(hres))
547 IOleObject_Close(oleobj, OLECLOSE_NOSAVE);
548
549 hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink);
550 if(SUCCEEDED(hres)) {
551 IHlinkTarget_SetBrowseContext(hlink, NULL);
552 IHlinkTarget_Release(hlink);
553 }
554
555 if(oleobj) {
557
558 IOleObject_GetClientSite(oleobj, &client_site);
559 if(client_site) {
560 if(client_site == &This->IOleClientSite_iface)
561 IOleObject_SetClientSite(oleobj, NULL);
562 IOleClientSite_Release(client_site);
563 }
564
565 IOleObject_Release(oleobj);
566 }
567
568 IUnknown_Release(This->document);
569 This->document = NULL;
570}
#define FALSE
Definition: types.h:117
static void advise_prop_notif(DocHost *This, BOOL set)
Definition: dochost.c:209
static IOleClientSite * client_site
Definition: activex.c:198
const GUID IID_IOleObject

Referenced by InternetExplorer_Release(), navigate_bsc(), OleObject_SetClientSite(), and release_extern_ref().

◆ DEFINE_OLEGUID()

DEFINE_OLEGUID ( CGID_DocHostCmdPriv  ,
0x000214D4L  ,
,
 
)

◆ doc_view_proc()

static LRESULT WINAPI doc_view_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 364 of file dochost.c.

365{
366 DocHost *This;
367
368 static const WCHAR wszTHIS[] = {'T','H','I','S',0};
369
370 if(msg == WM_CREATE) {
371 This = *(DocHost**)lParam;
372 SetPropW(hwnd, wszTHIS, This);
373 }else {
374 This = GetPropW(hwnd, wszTHIS);
375 }
376
377 switch(msg) {
378 case WM_SIZE:
380 }
381
383}
#define msg(x)
Definition: auth_time.c:54
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static LRESULT resize_document(DocHost *This, LONG width, LONG height)
Definition: dochost.c:352
#define LOWORD(l)
Definition: pedump.c:82
#define HIWORD(l)
Definition: typedefs.h:247
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1607
#define WM_SIZE
Definition: winuser.h:1610
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)

Referenced by create_doc_view_hwnd().

◆ DocHost_Init()

void DocHost_Init ( DocHost This,
IWebBrowser2 *  wb,
const IDocHostContainerVtbl container 
)

Definition at line 1106 of file dochost.c.

1107{
1108 This->IDocHostUIHandler2_iface.lpVtbl = &DocHostUIHandler2Vtbl;
1109 This->IOleCommandTarget_iface.lpVtbl = &OleCommandTargetVtbl;
1110 This->IPropertyNotifySink_iface.lpVtbl = &PropertyNotifySinkVtbl;
1111
1112 This->wb = wb;
1113 This->container_vtbl = container;
1114
1115 This->ready_state = READYSTATE_UNINITIALIZED;
1116 list_init(&This->task_queue);
1117
1118 This->travellog.loading_pos = -1;
1119
1122
1126}
static void list_init(struct list_entry *head)
Definition: list.h:51
void DocHost_ClientSite_Init(DocHost *This)
Definition: client.c:712
void ConnectionPointContainer_Init(ConnectionPointContainer *This, IUnknown *impl)
Definition: events.c:431
void DocHost_Frame_Init(DocHost *This)
Definition: frame.c:182
static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
Definition: dochost.c:1098
static const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
Definition: dochost.c:1016
static const IOleCommandTargetVtbl OleCommandTargetVtbl
Definition: dochost.c:782
void IEHTMLWindow_Init(DocHost *) DECLSPEC_HIDDEN
Definition: iehtmlwnd.c:692
void NewWindowManager_Init(DocHost *) DECLSPEC_HIDDEN

Referenced by create_ie(), and create_webbrowser().

◆ dochost_object_available()

HRESULT dochost_object_available ( DocHost This,
IUnknown doc 
)

Definition at line 304 of file dochost.c.

305{
306 READYSTATE ready_state;
307 task_header_t *task;
308 IOleObject *oleobj;
310
311 IUnknown_AddRef(doc);
312 This->document = doc;
313
314 hres = IUnknown_QueryInterface(doc, &IID_IOleObject, (void**)&oleobj);
315 if(SUCCEEDED(hres)) {
316 CLSID clsid;
317
318 hres = IOleObject_GetUserClassID(oleobj, &clsid);
319 if(SUCCEEDED(hres))
320 TRACE("Got clsid %s\n",
321 IsEqualGUID(&clsid, &CLSID_HTMLDocument) ? "CLSID_HTMLDocument" : debugstr_guid(&clsid));
322
323 hres = IOleObject_SetClientSite(oleobj, &This->IOleClientSite_iface);
324 if(FAILED(hres))
325 FIXME("SetClientSite failed: %08x\n", hres);
326
327 IOleObject_Release(oleobj);
328 }else {
329 FIXME("Could not get IOleObject iface: %08x\n", hres);
330 }
331
332 /* FIXME: Call SetAdvise */
333
334 task = heap_alloc(sizeof(*task));
336
337 hres = get_doc_ready_state(This, &ready_state);
338 if(SUCCEEDED(hres)) {
339 if(ready_state == READYSTATE_COMPLETE)
340 push_ready_state_task(This, READYSTATE_COMPLETE);
341 if(ready_state != READYSTATE_COMPLETE || This->doc_navigate)
343 }else if(!This->doc_navigate) {
344 /* If we can't get document's ready state, there is not much we can do.
345 * Assume that document is complete at this point. */
346 push_ready_state_task(This, READYSTATE_COMPLETE);
347 }
348
349 return S_OK;
350}
static void * heap_alloc(size_t len)
Definition: appwiz.h:66
#define FIXME(fmt,...)
Definition: debug.h:111
#define TRUE
Definition: types.h:120
static void push_ready_state_task(DocHost *This, READYSTATE ready_state)
Definition: dochost.c:283
static void object_available_task_destr(task_header_t *task)
Definition: dochost.c:294
void push_dochost_task(DocHost *This, task_header_t *task, task_proc_t proc, task_destr_t destr, BOOL send)
Definition: dochost.c:39
static void object_available_proc(DocHost *This, task_header_t *task)
Definition: dochost.c:299
static HRESULT get_doc_ready_state(DocHost *This, READYSTATE *ret)
Definition: dochost.c:179
REFCLSID clsid
Definition: msctf.c:82

Referenced by BindStatusCallback_OnObjectAvailable().

◆ DocHost_Release()

void DocHost_Release ( DocHost This)

Definition at line 1128 of file dochost.c.

1129{
1130 if(This->shell_ui_helper)
1131 IShellUIHelper2_Release(This->shell_ui_helper);
1132
1136
1138
1139 while(This->travellog.length)
1140 free_travellog_entry(This->travellog.log + --This->travellog.length);
1141 heap_free(This->travellog.log);
1142
1143 heap_free(This->url);
1144}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
void DocHost_ClientSite_Release(DocHost *This)
Definition: client.c:722
void ConnectionPointContainer_Destroy(ConnectionPointContainer *This)
Definition: events.c:442
void abort_dochost_tasks(DocHost *This, task_proc_t proc)
Definition: dochost.c:70
static void free_travellog_entry(travellog_entry_t *entry)
Definition: dochost.c:385
void release_dochost_client(DocHost *This)
Definition: dochost.c:601

Referenced by InternetExplorer_Release(), and WebBrowser_Release().

◆ DocHostUIHandler_AddRef()

static ULONG WINAPI DocHostUIHandler_AddRef ( IDocHostUIHandler2 iface)
static

Definition at line 802 of file dochost.c.

803{
805 return IOleClientSite_AddRef(&This->IOleClientSite_iface);
806}
static DocHost * impl_from_IDocHostUIHandler2(IDocHostUIHandler2 *iface)
Definition: dochost.c:790

◆ DocHostUIHandler_EnableModeless()

static HRESULT WINAPI DocHostUIHandler_EnableModeless ( IDocHostUIHandler2 iface,
BOOL  fEnable 
)
static

Definition at line 882 of file dochost.c.

884{
886 FIXME("(%p)->(%x)\n", This, fEnable);
887 return E_NOTIMPL;
888}

◆ DocHostUIHandler_FilterDataObject()

static HRESULT WINAPI DocHostUIHandler_FilterDataObject ( IDocHostUIHandler2 iface,
IDataObject pDO,
IDataObject **  ppDORet 
)
static

Definition at line 985 of file dochost.c.

987{
989 FIXME("(%p)->(%p %p)\n", This, pDO, ppDORet);
990 return E_NOTIMPL;
991}

◆ DocHostUIHandler_GetDropTarget()

static HRESULT WINAPI DocHostUIHandler_GetDropTarget ( IDocHostUIHandler2 iface,
IDropTarget pDropTarget,
IDropTarget **  ppDropTarget 
)
static

Definition at line 940 of file dochost.c.

942{
944 FIXME("(%p)\n", This);
945 return E_NOTIMPL;
946}

◆ DocHostUIHandler_GetExternal()

static HRESULT WINAPI DocHostUIHandler_GetExternal ( IDocHostUIHandler2 iface,
IDispatch **  ppDispatch 
)
static

Definition at line 948 of file dochost.c.

950{
952
953 TRACE("(%p)->(%p)\n", This, ppDispatch);
954
955 if(This->hostui)
956 return IDocHostUIHandler_GetExternal(This->hostui, ppDispatch);
957
958 if(!This->shell_ui_helper) {
960
961 hres = create_shell_ui_helper(&This->shell_ui_helper);
962 if(FAILED(hres))
963 return hres;
964 }
965
966 *ppDispatch = (IDispatch*)This->shell_ui_helper;
967 IDispatch_AddRef(*ppDispatch);
968 return S_OK;
969}
HRESULT create_shell_ui_helper(IShellUIHelper2 **) DECLSPEC_HIDDEN

◆ DocHostUIHandler_GetHostInfo()

static HRESULT WINAPI DocHostUIHandler_GetHostInfo ( IDocHostUIHandler2 iface,
DOCHOSTUIINFO *  pInfo 
)
static

Definition at line 833 of file dochost.c.

835{
838
839 TRACE("(%p)->(%p)\n", This, pInfo);
840
841 if(This->hostui) {
842 hres = IDocHostUIHandler_GetHostInfo(This->hostui, pInfo);
843 if(SUCCEEDED(hres))
844 return hres;
845 }
846
850 return S_OK;
851}
@ DOCHOSTUIFLAG_DISABLE_HELP_MENU
Definition: mshtmhst.idl:117
@ DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8
Definition: mshtmhst.idl:129
@ DOCHOSTUIFLAG_OPENNEWWIN
Definition: mshtmhst.idl:121
@ DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION
Definition: mshtmhst.idl:131
@ DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION
Definition: mshtmhst.idl:132

◆ DocHostUIHandler_GetOptionKeyPath()

static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath ( IDocHostUIHandler2 iface,
LPOLESTR pchKey,
DWORD  dw 
)
static

Definition at line 927 of file dochost.c.

929{
931
932 TRACE("(%p)->(%p %d)\n", This, pchKey, dw);
933
934 if(This->hostui)
935 return IDocHostUIHandler_GetOptionKeyPath(This->hostui, pchKey, dw);
936
937 return S_OK;
938}
REFIID LPVOID DWORD_PTR dw
Definition: atlbase.h:40

◆ DocHostUIHandler_GetOverrideKeyPath()

static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath ( IDocHostUIHandler2 iface,
LPOLESTR pchKey,
DWORD  dw 
)
static

Definition at line 993 of file dochost.c.

995{
999
1000 TRACE("(%p)->(%p %d)\n", This, pchKey, dw);
1001
1002 if(!This->hostui)
1003 return S_OK;
1004
1005 hres = IDocHostUIHandler_QueryInterface(This->hostui, &IID_IDocHostUIHandler2,
1006 (void**)&handler);
1007 if(SUCCEEDED(hres)) {
1008 hres = IDocHostUIHandler2_GetOverrideKeyPath(handler, pchKey, dw);
1009 IDocHostUIHandler2_Release(handler);
1010 return hres;
1011 }
1012
1013 return S_OK;
1014}
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7482

◆ DocHostUIHandler_HideUI()

static HRESULT WINAPI DocHostUIHandler_HideUI ( IDocHostUIHandler2 iface)
static

Definition at line 863 of file dochost.c.

864{
866 FIXME("(%p)\n", This);
867 return E_NOTIMPL;
868}

◆ DocHostUIHandler_OnDocWindowActivate()

static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate ( IDocHostUIHandler2 iface,
BOOL  fActivate 
)
static

Definition at line 890 of file dochost.c.

892{
894 FIXME("(%p)->(%x)\n", This, fActivate);
895 return E_NOTIMPL;
896}

◆ DocHostUIHandler_OnFrameWindowActivate()

static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate ( IDocHostUIHandler2 iface,
BOOL  fActivate 
)
static

Definition at line 898 of file dochost.c.

900{
902 FIXME("(%p)->(%x)\n", This, fActivate);
903 return E_NOTIMPL;
904}

◆ DocHostUIHandler_QueryInterface()

static HRESULT WINAPI DocHostUIHandler_QueryInterface ( IDocHostUIHandler2 iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 795 of file dochost.c.

797{
799 return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
800}

◆ DocHostUIHandler_Release()

static ULONG WINAPI DocHostUIHandler_Release ( IDocHostUIHandler2 iface)
static

Definition at line 808 of file dochost.c.

809{
811 return IOleClientSite_Release(&This->IOleClientSite_iface);
812}

◆ DocHostUIHandler_ResizeBorder()

static HRESULT WINAPI DocHostUIHandler_ResizeBorder ( IDocHostUIHandler2 iface,
LPCRECT  prcBorder,
IOleInPlaceUIWindow pUIWindow,
BOOL  fRameWindow 
)
static

Definition at line 906 of file dochost.c.

908{
910 FIXME("(%p)->(%p %p %X)\n", This, prcBorder, pUIWindow, fRameWindow);
911 return E_NOTIMPL;
912}

◆ DocHostUIHandler_ShowContextMenu()

static HRESULT WINAPI DocHostUIHandler_ShowContextMenu ( IDocHostUIHandler2 iface,
DWORD  dwID,
POINT ppt,
IUnknown pcmdtReserved,
IDispatch pdispReserved 
)
static

Definition at line 814 of file dochost.c.

816{
819
820 TRACE("(%p)->(%d %p %p %p)\n", This, dwID, ppt, pcmdtReserved, pdispReserved);
821
822 if(This->hostui) {
823 hres = IDocHostUIHandler_ShowContextMenu(This->hostui, dwID, ppt, pcmdtReserved,
824 pdispReserved);
825 if(hres == S_OK)
826 return S_OK;
827 }
828
829 FIXME("default action not implemented\n");
830 return E_NOTIMPL;
831}

◆ DocHostUIHandler_ShowUI()

static HRESULT WINAPI DocHostUIHandler_ShowUI ( IDocHostUIHandler2 iface,
DWORD  dwID,
IOleInPlaceActiveObject pActiveObject,
IOleCommandTarget pCommandTarget,
IOleInPlaceFrame pFrame,
IOleInPlaceUIWindow pDoc 
)
static

Definition at line 853 of file dochost.c.

856{
858 FIXME("(%p)->(%d %p %p %p %p)\n", This, dwID, pActiveObject, pCommandTarget,
859 pFrame, pDoc);
860 return E_NOTIMPL;
861}

◆ DocHostUIHandler_TranslateAccelerator()

static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator ( IDocHostUIHandler2 iface,
LPMSG  lpMsg,
const GUID pguidCmdGroup,
DWORD  nCmdID 
)
static

Definition at line 914 of file dochost.c.

916{
919 TRACE("(%p)->(%p %p %d)\n", This, lpMsg, pguidCmdGroup, nCmdID);
920
921 if(This->hostui)
922 hr = IDocHostUIHandler_TranslateAccelerator(This->hostui, lpMsg, pguidCmdGroup, nCmdID);
923
924 return hr;
925}
HRESULT hr
Definition: shlfolder.c:183
#define S_FALSE
Definition: winerror.h:2357

◆ DocHostUIHandler_TranslateUrl()

static HRESULT WINAPI DocHostUIHandler_TranslateUrl ( IDocHostUIHandler2 iface,
DWORD  dwTranslate,
OLECHAR pchURLIn,
OLECHAR **  ppchURLOut 
)
static

Definition at line 971 of file dochost.c.

973{
975
976 TRACE("(%p)->(%d %s %p)\n", This, dwTranslate, debugstr_w(pchURLIn), ppchURLOut);
977
978 if(This->hostui)
979 return IDocHostUIHandler_TranslateUrl(This->hostui, dwTranslate,
980 pchURLIn, ppchURLOut);
981
982 return S_FALSE;
983}
#define debugstr_w
Definition: kernel32.h:32

◆ DocHostUIHandler_UpdateUI()

static HRESULT WINAPI DocHostUIHandler_UpdateUI ( IDocHostUIHandler2 iface)
static

Definition at line 870 of file dochost.c.

871{
873
874 TRACE("(%p)\n", This);
875
876 if(!This->hostui)
877 return S_FALSE;
878
879 return IDocHostUIHandler_UpdateUI(This->hostui);
880}

◆ dump_travellog()

static void dump_travellog ( DocHost This)
static

Definition at line 414 of file dochost.c.

415{
416 unsigned i;
417
418 for(i=0; i < This->travellog.length; i++)
419 TRACE("%d: %s %s\n", i, i == This->travellog.position ? "=>" : " ", debugstr_w(This->travellog.log[i].url));
420 if(i == This->travellog.position)
421 TRACE("%d: =>\n", i);
422}

Referenced by update_travellog().

◆ free_travellog_entry()

static void free_travellog_entry ( travellog_entry_t entry)
static

Definition at line 385 of file dochost.c.

386{
387 if(entry->stream)
388 IStream_Release(entry->stream);
389 heap_free(entry->url);
390}

Referenced by DocHost_Release(), and update_travellog().

◆ get_doc_ready_state()

static HRESULT get_doc_ready_state ( DocHost This,
READYSTATE *  ret 
)
static

Definition at line 179 of file dochost.c.

180{
181 DISPPARAMS dp = {NULL,NULL,0,0};
182 IDispatch *disp;
183 EXCEPINFO ei;
184 VARIANT var;
186
187 hres = IUnknown_QueryInterface(This->document, &IID_IDispatch, (void**)&disp);
188 if(FAILED(hres))
189 return hres;
190
192 &dp, &var, &ei, NULL);
193 IDispatch_Release(disp);
194 if(FAILED(hres)) {
195 WARN("Invoke(DISPID_READYSTATE failed: %08x\n", hres);
196 return hres;
197 }
198
199 if(V_VT(&var) != VT_I4) {
200 WARN("V_VT(var) = %d\n", V_VT(&var));
202 return E_FAIL;
203 }
204
205 *ret = V_I4(&var);
206 return S_OK;
207}
#define WARN(fmt,...)
Definition: debug.h:112
#define E_FAIL
Definition: ddrawi.h:102
#define DISPID_READYSTATE
Definition: idispids.h:22
const char * var
Definition: shader.c:5666
struct stdole::DISPPARAMS DISPPARAMS
struct stdole::EXCEPINFO EXCEPINFO
#define LOCALE_SYSTEM_DEFAULT
#define DISPATCH_PROPERTYGET
Definition: oleauto.h:1007
const GUID IID_IDispatch
#define IID_NULL
Definition: guiddef.h:98
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
int ret

Referenced by dochost_object_available(), and PropertyNotifySink_OnChanged().

◆ get_travellog_stream()

static IStream * get_travellog_stream ( DocHost This)
static

Definition at line 392 of file dochost.c.

393{
394 IPersistHistory *persist_history;
397
398 hres = IUnknown_QueryInterface(This->document, &IID_IPersistHistory, (void**)&persist_history);
399 if(FAILED(hres))
400 return NULL;
401
403 if(SUCCEEDED(hres))
404 hres = IPersistHistory_SaveHistory(persist_history, stream);
405 IPersistHistory_Release(persist_history);
406 if(FAILED(hres)) {
407 IStream_Release(stream);
408 return NULL;
409 }
410
411 return stream;
412}
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
Definition: parse.h:23

Referenced by update_travellog().

◆ impl_from_IDocHostUIHandler2()

◆ impl_from_IOleCommandTarget()

static DocHost * impl_from_IOleCommandTarget ( IOleCommandTarget iface)
inlinestatic

◆ impl_from_IPropertyNotifySink()

static DocHost * impl_from_IPropertyNotifySink ( IPropertyNotifySink iface)
inlinestatic

◆ notif_complete()

static void notif_complete ( DocHost This,
DISPID  dispid 
)
static

Definition at line 114 of file dochost.c.

115{
116 DISPPARAMS dispparams;
118 VARIANT url;
119
120 dispparams.cArgs = 2;
121 dispparams.cNamedArgs = 0;
122 dispparams.rgdispidNamedArgs = NULL;
123 dispparams.rgvarg = params;
124
126 V_BYREF(params) = &url;
127
129 V_DISPATCH(params+1) = (IDispatch*)This->wb;
130
131 V_VT(&url) = VT_BSTR;
132 V_BSTR(&url) = SysAllocString(This->url);
133
134 TRACE("%d >>>\n", dispid);
135 call_sink(This->cps.wbe2, dispid, &dispparams);
136 TRACE("%d <<<\n", dispid);
137
139}
@ VT_BYREF
Definition: compat.h:2342
@ VT_VARIANT
Definition: compat.h:2307
@ VT_DISPATCH
Definition: compat.h:2304
void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
Definition: events.c:391
GLenum const GLfloat * params
Definition: glext.h:5645
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define V_BYREF(A)
Definition: oleauto.h:228
#define V_DISPATCH(A)
Definition: oleauto.h:239

Referenced by update_ready_state().

◆ object_available()

static void object_available ( DocHost This)
static

Definition at line 141 of file dochost.c.

142{
143 IHlinkTarget *hlink;
145
146 TRACE("(%p)\n", This);
147
148 if(!This->document) {
149 WARN("document == NULL\n");
150 return;
151 }
152
153 hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink);
154 if(SUCCEEDED(hres)) {
155 hres = IHlinkTarget_Navigate(hlink, 0, NULL);
156 IHlinkTarget_Release(hlink);
157 if(FAILED(hres))
158 FIXME("Navigate failed\n");
159 }else {
160 IOleObject *ole_object;
161 RECT rect;
162
163 TRACE("No IHlink iface\n");
164
165 hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&ole_object);
166 if(FAILED(hres)) {
167 FIXME("Could not get IOleObject iface: %08x\n", hres);
168 return;
169 }
170
171 GetClientRect(This->hwnd, &rect);
172 hres = IOleObject_DoVerb(ole_object, OLEIVERB_SHOW, NULL, &This->IOleClientSite_iface, -1, This->hwnd, &rect);
173 IOleObject_Release(ole_object);
174 if(FAILED(hres))
175 FIXME("DoVerb failed: %08x\n", hres);
176 }
177}
#define OLEIVERB_SHOW
Definition: ole2.h:39
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)

Referenced by object_available_proc().

◆ object_available_proc()

static void object_available_proc ( DocHost This,
task_header_t task 
)
static

Definition at line 299 of file dochost.c.

300{
302}
static void object_available(DocHost *This)
Definition: dochost.c:141

Referenced by dochost_object_available().

◆ object_available_task_destr()

static void object_available_task_destr ( task_header_t task)
static

Definition at line 294 of file dochost.c.

295{
296 heap_free(task);
297}

Referenced by dochost_object_available().

◆ on_commandstate_change()

void on_commandstate_change ( DocHost doc_host,
LONG  command,
BOOL  enable 
)

Definition at line 83 of file dochost.c.

84{
85 DISPPARAMS dispparams;
87
88 TRACE("command=%d enable=%d\n", command, enable);
89
90 dispparams.cArgs = 2;
91 dispparams.cNamedArgs = 0;
92 dispparams.rgdispidNamedArgs = NULL;
93 dispparams.rgvarg = params;
94
96 V_BOOL(params) = enable ? VARIANT_TRUE : VARIANT_FALSE;
97
98 V_VT(params+1) = VT_I4;
99 V_I4(params+1) = command;
100
101 call_sink(doc_host->cps.wbe2, DISPID_COMMANDSTATECHANGE, &dispparams);
102
104}
@ VT_BOOL
Definition: compat.h:2306
GLboolean enable
Definition: glext.h:11120
#define V_BOOL(A)
Definition: oleauto.h:224
ConnectionPoint * wbe2
Definition: ieframe.h:55
const IDocHostContainerVtbl * container_vtbl
Definition: ieframe.h:144
ConnectionPointContainer cps
Definition: ieframe.h:173
void(* on_command_state_change)(DocHost *, LONG, BOOL)
Definition: ieframe.h:115
#define DISPID_COMMANDSTATECHANGE
Definition: webchild.h:40

Referenced by navigate_bsc(), OleObject_SetClientSite(), and update_navigation_commands().

◆ process_dochost_tasks()

LRESULT process_dochost_tasks ( DocHost This)

Definition at line 55 of file dochost.c.

56{
57 task_header_t *task;
58
59 while(!list_empty(&This->task_queue)) {
60 task = LIST_ENTRY(This->task_queue.next, task_header_t, entry);
61 list_remove(&task->entry);
62
63 task->proc(This, task);
64 task->destr(task);
65 }
66
67 return 0;
68}
static int list_empty(struct list_entry *head)
Definition: list.h:58
#define LIST_ENTRY(type)
Definition: queue.h:175

Referenced by ie_window_proc(), and shell_embedding_proc().

◆ PropertyNotifySink_AddRef()

static ULONG WINAPI PropertyNotifySink_AddRef ( IPropertyNotifySink iface)
static

Definition at line 1050 of file dochost.c.

1051{
1053 return IOleClientSite_AddRef(&This->IOleClientSite_iface);
1054}
static DocHost * impl_from_IPropertyNotifySink(IPropertyNotifySink *iface)
Definition: dochost.c:1038

◆ PropertyNotifySink_OnChanged()

static HRESULT WINAPI PropertyNotifySink_OnChanged ( IPropertyNotifySink iface,
DISPID  dispID 
)
static

Definition at line 1062 of file dochost.c.

1063{
1065
1066 TRACE("(%p)->(%d)\n", This, dispID);
1067
1068 switch(dispID) {
1069 case DISPID_READYSTATE: {
1070 READYSTATE ready_state;
1071 HRESULT hres;
1072
1073 hres = get_doc_ready_state(This, &ready_state);
1074 if(FAILED(hres))
1075 return hres;
1076
1077 if(ready_state == READYSTATE_COMPLETE && !This->doc_navigate)
1079
1080 update_ready_state(This, ready_state);
1081 break;
1082 }
1083 default:
1084 FIXME("unimplemented dispid %d\n", dispID);
1085 return E_NOTIMPL;
1086 }
1087
1088 return S_OK;
1089}
static void update_ready_state(DocHost *This, READYSTATE ready_state)
Definition: dochost.c:241

◆ PropertyNotifySink_OnRequestEdit()

static HRESULT WINAPI PropertyNotifySink_OnRequestEdit ( IPropertyNotifySink iface,
DISPID  dispID 
)
static

Definition at line 1091 of file dochost.c.

1092{
1094 FIXME("(%p)->(%d)\n", This, dispID);
1095 return E_NOTIMPL;
1096}

◆ PropertyNotifySink_QueryInterface()

static HRESULT WINAPI PropertyNotifySink_QueryInterface ( IPropertyNotifySink iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1043 of file dochost.c.

1045{
1047 return IOleClientSite_QueryInterface(&This->IOleClientSite_iface, riid, ppv);
1048}

◆ PropertyNotifySink_Release()

static ULONG WINAPI PropertyNotifySink_Release ( IPropertyNotifySink iface)
static

Definition at line 1056 of file dochost.c.

1057{
1059 return IOleClientSite_Release(&This->IOleClientSite_iface);
1060}

◆ push_dochost_task()

void push_dochost_task ( DocHost This,
task_header_t task,
task_proc_t  proc,
task_destr_t  destr,
BOOL  send 
)

Definition at line 39 of file dochost.c.

40{
41 BOOL is_empty;
42
43 task->proc = proc;
44 task->destr = destr;
45
46 is_empty = list_empty(&This->task_queue);
47 list_add_tail(&This->task_queue, &task->entry);
48
49 if(send)
50 SendMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0);
51 else if(is_empty)
52 PostMessageW(This->frame_hwnd, WM_DOCHOSTTASK, 0, 0);
53}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
unsigned int BOOL
Definition: ntddk_ex.h:94
#define WM_DOCHOSTTASK
Definition: ieframe.h:293
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by async_doc_navigate(), dochost_object_available(), navigate_url(), and push_ready_state_task().

◆ push_ready_state_task()

static void push_ready_state_task ( DocHost This,
READYSTATE  ready_state 
)
static

Definition at line 283 of file dochost.c.

284{
286
287 IUnknown_AddRef(This->document);
288 task->doc = This->document;
289 task->ready_state = ready_state;
290
292}
static void ready_state_proc(DocHost *This, task_header_t *_task)
Definition: dochost.c:275
static void ready_state_task_destr(task_header_t *_task)
Definition: dochost.c:267
IUnknown * doc
Definition: dochost.c:263
task_header_t header
Definition: dochost.c:262
READYSTATE ready_state
Definition: dochost.c:264

Referenced by dochost_object_available().

◆ ready_state_proc()

static void ready_state_proc ( DocHost This,
task_header_t _task 
)
static

Definition at line 275 of file dochost.c.

276{
278
279 if(task->doc == This->document)
281}

Referenced by push_ready_state_task().

◆ ready_state_task_destr()

static void ready_state_task_destr ( task_header_t _task)
static

Definition at line 267 of file dochost.c.

268{
270
271 IUnknown_Release(task->doc);
272 heap_free(task);
273}

Referenced by push_ready_state_task().

◆ refresh_document()

HRESULT refresh_document ( DocHost This,
const VARIANT level 
)

Definition at line 572 of file dochost.c.

573{
574 IOleCommandTarget *cmdtrg;
575 VARIANT vin, vout;
577
578 if(level && (V_VT(level) != VT_I4 || V_I4(level) != REFRESH_NORMAL))
579 FIXME("Unsupported refresh level %s\n", debugstr_variant(level));
580
581 if(!This->document) {
582 FIXME("no document\n");
583 return E_FAIL;
584 }
585
586 hres = IUnknown_QueryInterface(This->document, &IID_IOleCommandTarget, (void**)&cmdtrg);
587 if(FAILED(hres))
588 return hres;
589
590 V_VT(&vin) = VT_EMPTY;
591 V_VT(&vout) = VT_EMPTY;
592 hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_REFRESH, OLECMDEXECOPT_PROMPTUSER, &vin, &vout);
593 IOleCommandTarget_Release(cmdtrg);
594 if(FAILED(hres))
595 return hres;
596
597 VariantClear(&vout);
598 return S_OK;
599}
@ VT_EMPTY
Definition: compat.h:2295
GLint level
Definition: gl.h:1546

Referenced by InternetExplorer_Refresh(), InternetExplorer_Refresh2(), WebBrowser_Refresh(), and WebBrowser_Refresh2().

◆ release_dochost_client()

void release_dochost_client ( DocHost This)

Definition at line 601 of file dochost.c.

602{
603 if(This->hwnd) {
604 DestroyWindow(This->hwnd);
605 This->hwnd = NULL;
606 }
607
608 if(This->hostui) {
609 IDocHostUIHandler_Release(This->hostui);
610 This->hostui = NULL;
611 }
612
613 if(This->client_disp) {
614 IDispatch_Release(This->client_disp);
615 This->client_disp = NULL;
616 }
617
618 if(This->frame) {
619 IOleInPlaceFrame_Release(This->frame);
620 This->frame = NULL;
621 }
622
623 if(This->olecmd) {
624 IOleCommandTarget_Release(This->olecmd);
625 This->olecmd = NULL;
626 }
627}
BOOL WINAPI DestroyWindow(_In_ HWND)

Referenced by DocHost_Release(), and release_client_site().

◆ resize_document()

static LRESULT resize_document ( DocHost This,
LONG  width,
LONG  height 
)
static

Definition at line 352 of file dochost.c.

353{
354 RECT rect = {0, 0, width, height};
355
356 TRACE("(%p)->(%d %d)\n", This, width, height);
357
358 if(This->view)
359 IOleDocumentView_SetRect(This->view, &rect);
360
361 return 0;
362}
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546

Referenced by doc_view_proc().

◆ set_doc_state()

void set_doc_state ( DocHost This,
READYSTATE  doc_state 
)

Definition at line 234 of file dochost.c.

235{
236 This->doc_state = doc_state;
237 if(doc_state > This->ready_state)
238 This->ready_state = doc_state;
239}

Referenced by html_window_navigate(), navigate_bsc(), navigate_url(), and update_ready_state().

◆ update_navigation_commands()

void update_navigation_commands ( DocHost dochost)

Definition at line 106 of file dochost.c.

107{
108 unsigned pos = dochost->travellog.loading_pos == -1 ? dochost->travellog.position : dochost->travellog.loading_pos;
109
110 on_commandstate_change(dochost, CSC_NAVIGATEBACK, pos > 0);
111 on_commandstate_change(dochost, CSC_NAVIGATEFORWARD, pos < dochost->travellog.length);
112}
void on_commandstate_change(DocHost *doc_host, LONG command, BOOL enable)
Definition: dochost.c:83
struct DocHost::@431 travellog

Referenced by ClOleCommandTarget_Exec(), DocObjectService_FireNavigateComplete2(), and navigate_history().

◆ update_ready_state()

static void update_ready_state ( DocHost This,
READYSTATE  ready_state 
)
static

Definition at line 241 of file dochost.c.

242{
243 if(ready_state > READYSTATE_LOADING && This->travellog.loading_pos != -1) {
244 WARN("histupdate not notified\n");
245 This->travellog.position = This->travellog.loading_pos;
246 This->travellog.loading_pos = -1;
247 }
248
249 if(ready_state > READYSTATE_LOADING && This->doc_state <= READYSTATE_LOADING && !This->browser_service /* FIXME */)
251
252 if(ready_state == READYSTATE_COMPLETE && This->doc_state < READYSTATE_COMPLETE) {
253 set_doc_state(This, READYSTATE_COMPLETE);
254 if(!This->browser_service) /* FIXME: Not fully correct */
256 }else {
257 set_doc_state(This, ready_state);
258 }
259}
void set_doc_state(DocHost *This, READYSTATE doc_state)
Definition: dochost.c:234
static void notif_complete(DocHost *This, DISPID dispid)
Definition: dochost.c:114
#define DISPID_NAVIGATECOMPLETE2
Definition: webchild.h:54
#define DISPID_DOCUMENTCOMPLETE
Definition: webchild.h:61

Referenced by PropertyNotifySink_OnChanged(), and ready_state_proc().

◆ update_travellog()

static void update_travellog ( DocHost This)
static

Definition at line 424 of file dochost.c.

425{
426 travellog_entry_t *new_entry;
427
428 static const WCHAR about_schemeW[] = {'a','b','o','u','t',':'};
429
430 if(This->url && !_wcsnicmp(This->url, about_schemeW, ARRAY_SIZE(about_schemeW))) {
431 TRACE("Skipping about URL\n");
432 return;
433 }
434
435 if(!This->travellog.log) {
436 This->travellog.log = heap_alloc(4 * sizeof(*This->travellog.log));
437 if(!This->travellog.log)
438 return;
439
440 This->travellog.size = 4;
441 }else if(This->travellog.size < This->travellog.position+1) {
442 travellog_entry_t *new_travellog;
443
444 new_travellog = heap_realloc(This->travellog.log, This->travellog.size*2*sizeof(*This->travellog.log));
445 if(!new_travellog)
446 return;
447
448 This->travellog.log = new_travellog;
449 This->travellog.size *= 2;
450 }
451
452 if(This->travellog.loading_pos == -1) {
453 /* Clear forward history. */
454 while(This->travellog.length > This->travellog.position)
455 free_travellog_entry(This->travellog.log + --This->travellog.length);
456 }
457
458 new_entry = This->travellog.log + This->travellog.position;
459
460 new_entry->url = heap_strdupW(This->url);
461 TRACE("Adding %s at %d\n", debugstr_w(This->url), This->travellog.position);
462 if(!new_entry->url)
463 return;
464
465 new_entry->stream = get_travellog_stream(This);
466
467 if(This->travellog.loading_pos == -1) {
468 This->travellog.position++;
469 }else {
470 This->travellog.position = This->travellog.loading_pos;
471 This->travellog.loading_pos = -1;
472 }
473 if(This->travellog.position > This->travellog.length)
474 This->travellog.length = This->travellog.position;
475
477}
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:71
#define ARRAY_SIZE(A)
Definition: main.h:33
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
static void dump_travellog(DocHost *This)
Definition: dochost.c:414
static IStream * get_travellog_stream(DocHost *This)
Definition: dochost.c:392
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
Definition: ieframe.h:104
WCHAR * url
Definition: ieframe.h:105
IStream * stream
Definition: ieframe.h:106

Referenced by ClOleCommandTarget_Exec().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ieframe  )

Variable Documentation

◆ doc_view_atom

ATOM doc_view_atom = 0
static

Definition at line 37 of file dochost.c.

Referenced by create_doc_view_hwnd().

◆ DocHostUIHandler2Vtbl

const IDocHostUIHandler2Vtbl DocHostUIHandler2Vtbl
static
Initial value:
= {
}
static HRESULT WINAPI DocHostUIHandler_ShowContextMenu(IDocHostUIHandler2 *iface, DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved)
Definition: dochost.c:814
static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
Definition: dochost.c:882
static HRESULT WINAPI DocHostUIHandler_ShowUI(IDocHostUIHandler2 *iface, DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc)
Definition: dochost.c:853
static HRESULT WINAPI DocHostUIHandler_HideUI(IDocHostUIHandler2 *iface)
Definition: dochost.c:863
static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
Definition: dochost.c:870
static ULONG WINAPI DocHostUIHandler_Release(IDocHostUIHandler2 *iface)
Definition: dochost.c:808
static HRESULT WINAPI DocHostUIHandler_ResizeBorder(IDocHostUIHandler2 *iface, LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow)
Definition: dochost.c:906
static HRESULT WINAPI DocHostUIHandler_TranslateAccelerator(IDocHostUIHandler2 *iface, LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID)
Definition: dochost.c:914
static HRESULT WINAPI DocHostUIHandler_GetExternal(IDocHostUIHandler2 *iface, IDispatch **ppDispatch)
Definition: dochost.c:948
static HRESULT WINAPI DocHostUIHandler_FilterDataObject(IDocHostUIHandler2 *iface, IDataObject *pDO, IDataObject **ppDORet)
Definition: dochost.c:985
static ULONG WINAPI DocHostUIHandler_AddRef(IDocHostUIHandler2 *iface)
Definition: dochost.c:802
static HRESULT WINAPI DocHostUIHandler_TranslateUrl(IDocHostUIHandler2 *iface, DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut)
Definition: dochost.c:971
static HRESULT WINAPI DocHostUIHandler_OnFrameWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: dochost.c:898
static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: dochost.c:927
static HRESULT WINAPI DocHostUIHandler_GetOverrideKeyPath(IDocHostUIHandler2 *iface, LPOLESTR *pchKey, DWORD dw)
Definition: dochost.c:993
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
Definition: dochost.c:890
static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface, REFIID riid, void **ppv)
Definition: dochost.c:795
static HRESULT WINAPI DocHostUIHandler_GetHostInfo(IDocHostUIHandler2 *iface, DOCHOSTUIINFO *pInfo)
Definition: dochost.c:833
static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface, IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
Definition: dochost.c:940

Definition at line 1016 of file dochost.c.

Referenced by DocHost_Init().

◆ OleCommandTargetVtbl

const IOleCommandTargetVtbl OleCommandTargetVtbl
static
Initial value:
= {
}
static ULONG WINAPI ClOleCommandTarget_AddRef(IOleCommandTarget *iface)
Definition: dochost.c:641
static HRESULT WINAPI ClOleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
Definition: dochost.c:653
static ULONG WINAPI ClOleCommandTarget_Release(IOleCommandTarget *iface)
Definition: dochost.c:647
static HRESULT WINAPI ClOleCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
Definition: dochost.c:667
static HRESULT WINAPI ClOleCommandTarget_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppv)
Definition: dochost.c:634

Definition at line 782 of file dochost.c.

Referenced by DocHost_Init().

◆ PropertyNotifySinkVtbl

const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl
static
Initial value:
= {
}
static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, DISPID dispID)
Definition: dochost.c:1062
static ULONG WINAPI PropertyNotifySink_AddRef(IPropertyNotifySink *iface)
Definition: dochost.c:1050
static HRESULT WINAPI PropertyNotifySink_OnRequestEdit(IPropertyNotifySink *iface, DISPID dispID)
Definition: dochost.c:1091
static ULONG WINAPI PropertyNotifySink_Release(IPropertyNotifySink *iface)
Definition: dochost.c:1056
static HRESULT WINAPI PropertyNotifySink_QueryInterface(IPropertyNotifySink *iface, REFIID riid, void **ppv)
Definition: dochost.c:1043

Definition at line 1098 of file dochost.c.

Referenced by DocHost_Init().