Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/mshtml/htmldoc.c | 43 ++++++++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/tests/dom.c | 2 ++ 3 files changed, 46 insertions(+)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 665e7ffdcb..492216b426 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -4974,6 +4974,46 @@ static const IMarkupServicesVtbl MarkupServicesVtbl = { markupsvcs_EndUndoUnit };
+/********************************************************** + * IMarkupContainer implementation + */ +static inline HTMLDocument *impl_from_IMarkupContainer(IMarkupContainer *iface) +{ + return CONTAINING_RECORD(iface, HTMLDocument, IMarkupContainer_iface); +} + +static HRESULT WINAPI markupcontainer_QueryInterface(IMarkupContainer *iface, REFIID riid, void **ppvObject) +{ + HTMLDocument *This = impl_from_IMarkupContainer(iface); + return htmldoc_query_interface(This, riid, ppvObject); +} + +static ULONG WINAPI markupcontainer_AddRef(IMarkupContainer *iface) +{ + HTMLDocument *This = impl_from_IMarkupContainer(iface); + return htmldoc_addref(This); +} + +static ULONG WINAPI markupcontainer_Release(IMarkupContainer *iface) +{ + HTMLDocument *This = impl_from_IMarkupContainer(iface); + return htmldoc_release(This); +} + +static HRESULT WINAPI markupcontainer_OwningDoc(IMarkupContainer *iface, IHTMLDocument2 **ppDoc) +{ + HTMLDocument *This = impl_from_IMarkupContainer(iface); + FIXME("(%p)->(%p)\n", This, ppDoc); + return E_NOTIMPL; +} + +static const IMarkupContainerVtbl MarkupContainerVtbl = { + markupcontainer_QueryInterface, + markupcontainer_AddRef, + markupcontainer_Release, + markupcontainer_OwningDoc +}; + static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) { *ppv = NULL; @@ -5054,6 +5094,8 @@ static BOOL htmldoc_qi(HTMLDocument *This, REFIID riid, void **ppv) *ppv = &This->IProvideMultipleClassInfo_iface; else if(IsEqualGUID(&IID_IMarkupServices, riid)) *ppv = &This->IMarkupServices_iface; + else if(IsEqualGUID(&IID_IMarkupContainer, riid)) + *ppv = &This->IMarkupContainer_iface; else if(IsEqualGUID(&CLSID_CMarkup, riid)) { FIXME("(%p)->(CLSID_CMarkup %p)\n", This, ppv); *ppv = NULL; @@ -5102,6 +5144,7 @@ static void init_doc(HTMLDocument *doc, IUnknown *outer, IDispatchEx *dispex) doc->ISupportErrorInfo_iface.lpVtbl = &SupportErrorInfoVtbl; doc->IProvideMultipleClassInfo_iface.lpVtbl = &ProvideMultipleClassInfoVtbl; doc->IMarkupServices_iface.lpVtbl = &MarkupServicesVtbl; + doc->IMarkupContainer_iface.lpVtbl = &MarkupContainerVtbl;
doc->outer_unk = outer; doc->dispex = dispex; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 9ed2e5f4e6..7dc9367493 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -624,6 +624,7 @@ struct HTMLDocument { IObjectSafety IObjectSafety_iface; IProvideMultipleClassInfo IProvideMultipleClassInfo_iface; IMarkupServices IMarkupServices_iface; + IMarkupContainer IMarkupContainer_iface;
IUnknown *outer_unk; IDispatchEx *dispex; diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index d4ef42e94e..8a08282957 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -175,6 +175,7 @@ static const IID * const doc_node_iids[] = { &IID_IDispatchEx, &IID_IConnectionPointContainer, &IID_IInternetHostSecurityManager, + &IID_IMarkupContainer, &IID_IMarkupServices, &IID_IOleContainer, &IID_IObjectSafety, @@ -192,6 +193,7 @@ static const IID * const doc_obj_iids[] = { &IID_IDispatchEx, &IID_IConnectionPointContainer, &IID_ICustomDoc, + &IID_IMarkupContainer, &IID_IMarkupServices, &IID_IOleContainer, &IID_IObjectSafety,