From dfc60ddbc83df77c89f4d3a1978639a94d714417 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 30 Mar 2016 11:31:08 +0200 Subject: [PATCH] ieframe: Add ITargetFrame stub. Signed-off-by: Piotr Caban Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/ieframe/client.c | 5 ++ dlls/ieframe/ieframe.h | 1 + dlls/ieframe/navigate.c | 149 +++++++++++++++++++++++++++++++++++++++- dlls/ieframe/tests/webbrowser.c | 6 ++ 4 files changed, 160 insertions(+), 1 deletion(-) diff --git a/dlls/ieframe/client.c b/dlls/ieframe/client.c index d82195f6c76..4846e28a050 100644 --- a/dlls/ieframe/client.c +++ b/dlls/ieframe/client.c @@ -668,6 +668,11 @@ static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, RE return IWebBrowser2_QueryInterface(This->wb, riid, ppv); } + if(IsEqualGUID(&IID_ITargetFrame, guidService)) { + TRACE("(%p)->(IID_ITargetFrame %s %p)\n", This, debugstr_guid(riid), ppv); + return IWebBrowser2_QueryInterface(This->wb, riid, ppv); + } + if(IsEqualGUID(&IID_IWebBrowserApp, guidService)) { TRACE("IWebBrowserApp service\n"); return IWebBrowser2_QueryInterface(This->wb, riid, ppv); diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h index 371cb030257..3880354d411 100644 --- a/dlls/ieframe/ieframe.h +++ b/dlls/ieframe/ieframe.h @@ -55,6 +55,7 @@ typedef struct { typedef struct { IHlinkFrame IHlinkFrame_iface; + ITargetFrame ITargetFrame_iface; ITargetFrame2 ITargetFrame2_iface; ITargetFramePriv2 ITargetFramePriv2_iface; IWebBrowserPriv2IE9 IWebBrowserPriv2IE9_iface; diff --git a/dlls/ieframe/navigate.c b/dlls/ieframe/navigate.c index 88bc7e63a60..296ed19a387 100644 --- a/dlls/ieframe/navigate.c +++ b/dlls/ieframe/navigate.c @@ -1241,6 +1241,149 @@ static const IHlinkFrameVtbl HlinkFrameVtbl = { HlinkFrame_UpdateHlink }; +static inline HlinkFrame *impl_from_ITargetFrame(ITargetFrame *iface) +{ + return CONTAINING_RECORD(iface, HlinkFrame, ITargetFrame_iface); +} + +static HRESULT WINAPI TargetFrame_QueryInterface(ITargetFrame *iface, REFIID riid, void **ppv) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + return IUnknown_QueryInterface(This->outer, riid, ppv); +} + +static ULONG WINAPI TargetFrame_AddRef(ITargetFrame *iface) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + return IUnknown_AddRef(This->outer); +} + +static ULONG WINAPI TargetFrame_Release(ITargetFrame *iface) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + return IUnknown_Release(This->outer); +} + +static HRESULT WINAPI TargetFrame_SetFrameName(ITargetFrame *iface, LPCWSTR pszFrameName) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(pszFrameName)); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetFrameName(ITargetFrame *iface, LPWSTR *ppszFrameName) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, ppszFrameName); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetParentFrame(ITargetFrame *iface, IUnknown **ppunkParent) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, ppunkParent); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_FindFrame(ITargetFrame *iface, LPCWSTR pszTargetName, + IUnknown *ppunkContextFrame, DWORD dwFlags, IUnknown **ppunkTargetFrame) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%s %p %x %p)\n", This, debugstr_w(pszTargetName), + ppunkContextFrame, dwFlags, ppunkTargetFrame); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_SetFrameSrc(ITargetFrame *iface, LPCWSTR pszFrameSrc) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%s)\n", This, debugstr_w(pszFrameSrc)); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetFrameSrc(ITargetFrame *iface, LPWSTR *ppszFrameSrc) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, ppszFrameSrc); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetFramesContainer(ITargetFrame *iface, IOleContainer **ppContainer) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, ppContainer); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_SetFrameOptions(ITargetFrame *iface, DWORD dwFlags) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%x)\n", This, dwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetFrameOptions(ITargetFrame *iface, DWORD *pdwFlags) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, pdwFlags); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_SetFrameMargins(ITargetFrame *iface, DWORD dwWidth, DWORD dwHeight) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%d %d)\n", This, dwWidth, dwHeight); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_GetFrameMargins(ITargetFrame *iface, DWORD *pdwWidth, DWORD *pdwHeight) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p %p)\n", This, pdwWidth, pdwHeight); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_RemoteNavigate(ITargetFrame *iface, ULONG cLength, ULONG *pulData) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%u %p)\n", This, cLength, pulData); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_OnChildFrameActivate(ITargetFrame *iface, IUnknown *pUnkChildFrame) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, pUnkChildFrame); + return E_NOTIMPL; +} + +static HRESULT WINAPI TargetFrame_OnChildFrameDeactivate(ITargetFrame *iface, IUnknown *pUnkChildFrame) +{ + HlinkFrame *This = impl_from_ITargetFrame(iface); + FIXME("(%p)->(%p)\n", This, pUnkChildFrame); + return E_NOTIMPL; +} + +static const ITargetFrameVtbl TargetFrameVtbl = { + TargetFrame_QueryInterface, + TargetFrame_AddRef, + TargetFrame_Release, + TargetFrame_SetFrameName, + TargetFrame_GetFrameName, + TargetFrame_GetParentFrame, + TargetFrame_FindFrame, + TargetFrame_SetFrameSrc, + TargetFrame_GetFrameSrc, + TargetFrame_GetFramesContainer, + TargetFrame_SetFrameOptions, + TargetFrame_GetFrameOptions, + TargetFrame_SetFrameMargins, + TargetFrame_GetFrameMargins, + TargetFrame_RemoteNavigate, + TargetFrame_OnChildFrameActivate, + TargetFrame_OnChildFrameDeactivate +}; + static inline HlinkFrame *impl_from_ITargetFrame2(ITargetFrame2 *iface) { return CONTAINING_RECORD(iface, HlinkFrame, ITargetFrame2_iface); @@ -1517,6 +1660,9 @@ BOOL HlinkFrame_QI(HlinkFrame *This, REFIID riid, void **ppv) if(IsEqualGUID(&IID_IHlinkFrame, riid)) { TRACE("(%p)->(IID_IHlinkFrame %p)\n", This, ppv); *ppv = &This->IHlinkFrame_iface; + }else if(IsEqualGUID(&IID_ITargetFrame, riid)) { + TRACE("(%p)->(IID_ITargetFrame %p)\n", This, ppv); + *ppv = &This->ITargetFrame_iface; }else if(IsEqualGUID(&IID_ITargetFrame2, riid)) { TRACE("(%p)->(IID_ITargetFrame2 %p)\n", This, ppv); *ppv = &This->ITargetFrame2_iface; @@ -1539,7 +1685,8 @@ BOOL HlinkFrame_QI(HlinkFrame *This, REFIID riid, void **ppv) void HlinkFrame_Init(HlinkFrame *This, IUnknown *outer, DocHost *doc_host) { - This->IHlinkFrame_iface.lpVtbl = &HlinkFrameVtbl; + This->IHlinkFrame_iface.lpVtbl = &HlinkFrameVtbl; + This->ITargetFrame_iface.lpVtbl = &TargetFrameVtbl; This->ITargetFrame2_iface.lpVtbl = &TargetFrame2Vtbl; This->ITargetFramePriv2_iface.lpVtbl = &TargetFramePriv2Vtbl; This->IWebBrowserPriv2IE9_iface.lpVtbl = &WebBrowserPriv2IE9Vtbl; diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c index b2bbebd1926..4d280733f23 100644 --- a/dlls/ieframe/tests/webbrowser.c +++ b/dlls/ieframe/tests/webbrowser.c @@ -29,6 +29,7 @@ #include "ole2.h" #include "exdisp.h" #include "htiframe.h" +#include "htiface.h" #include "mshtmhst.h" #include "mshtmcid.h" #include "mshtml.h" @@ -3547,6 +3548,11 @@ static void test_dochost_qs(IWebBrowser2 *webbrowser) ok(iface_cmp(service, (IUnknown*)webbrowser), "service != unk\n"); IUnknown_Release(service); + hres = IServiceProvider_QueryService(serv_prov, &IID_ITargetFrame, &IID_ITargetFrame, (void**)&service); + ok(hres == S_OK, "QueryService failed: %08x\n", hres); + ok(iface_cmp(service, (IUnknown*)webbrowser), "service != unk\n"); + IUnknown_Release(service); + hres = IServiceProvider_QueryService(serv_prov, &IID_IShellBrowser, &IID_IShellBrowser, (void**)&service); ok(hres == S_OK, "QueryService failed: %08x\n", hres); IUnknown_Release(service); -- 2.11.4.GIT