diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c index 6c0dd40a5e8..b474a34cbf3 100644 --- a/dlls/mshtml/htmlframebase.c +++ b/dlls/mshtml/htmlframebase.c @@ -242,11 +242,154 @@ static const IHTMLFrameBaseVtbl HTMLFrameBaseVtbl = { HTMLFrameBase_get_scrolling }; +#define HTMLFRAMEBASE2_THIS(iface) DEFINE_THIS(HTMLFrameBase, IHTMLFrameBase2, iface) + +static HRESULT WINAPI HTMLFrameBase2_QueryInterface(IHTMLFrameBase2 *iface, REFIID riid, void **ppv) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + + return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv); +} + +static ULONG WINAPI HTMLFrameBase2_AddRef(IHTMLFrameBase2 *iface) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + + return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node)); +} + +static ULONG WINAPI HTMLFrameBase2_Release(IHTMLFrameBase2 *iface) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + + return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node)); +} + +static HRESULT WINAPI HTMLFrameBase2_GetTypeInfoCount(IHTMLFrameBase2 *iface, UINT *pctinfo) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_GetTypeInfo(IHTMLFrameBase2 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_GetIDsOfNames(IHTMLFrameBase2 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_Invoke(IHTMLFrameBase2 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface, IHTMLWindow2 **p) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + + TRACE("(%p)->(%p)\n", This, p); + + if(This->content_window) { + IHTMLWindow2_AddRef(HTMLWINDOW2(This->content_window)); + *p = HTMLWINDOW2(This->content_window); + }else { + WARN("NULL content window\n"); + *p = NULL; + } + return S_OK; +} + +static HRESULT WINAPI HTMLFrameBase2_put_onload(IHTMLFrameBase2 *iface, VARIANT v) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_get_onload(IHTMLFrameBase2 *iface, VARIANT *p) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_put_onreadystatechange(IHTMLFrameBase2 *iface, VARIANT v) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_get_onreadystatechange(IHTMLFrameBase2 *iface, VARIANT *p) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_get_readyState(IHTMLFrameBase2 *iface, BSTR *p) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_put_allowTransparency(IHTMLFrameBase2 *iface, VARIANT_BOOL v) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLFrameBase2_get_allowTransparency(IHTMLFrameBase2 *iface, VARIANT_BOOL *p) +{ + HTMLFrameBase *This = HTMLFRAMEBASE2_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +#undef HTMLFRAMEBASE2_THIS + +static const IHTMLFrameBase2Vtbl HTMLFrameBase2Vtbl = { + HTMLFrameBase2_QueryInterface, + HTMLFrameBase2_AddRef, + HTMLFrameBase2_Release, + HTMLFrameBase2_GetTypeInfoCount, + HTMLFrameBase2_GetTypeInfo, + HTMLFrameBase2_GetIDsOfNames, + HTMLFrameBase2_Invoke, + HTMLFrameBase2_get_contentWindow, + HTMLFrameBase2_put_onload, + HTMLFrameBase2_get_onload, + HTMLFrameBase2_put_onreadystatechange, + HTMLFrameBase2_get_onreadystatechange, + HTMLFrameBase2_get_readyState, + HTMLFrameBase2_put_allowTransparency, + HTMLFrameBase2_get_allowTransparency +}; + HRESULT HTMLFrameBase_QI(HTMLFrameBase *This, REFIID riid, void **ppv) { if(IsEqualGUID(&IID_IHTMLFrameBase, riid)) { TRACE("(%p)->(IID_IHTMLFrameBase %p)\n", This, ppv); *ppv = HTMLFRAMEBASE(This); + }else if(IsEqualGUID(&IID_IHTMLFrameBase2, riid)) { + TRACE("(%p)->(IID_IHTMLFrameBase2 %p)\n", This, ppv); + *ppv = HTMLFRAMEBASE2(This); }else { return HTMLElement_QI(&This->element.node, riid, ppv); } @@ -269,6 +412,7 @@ void HTMLFrameBase_Init(HTMLFrameBase *This, HTMLDocumentNode *doc, nsIDOMHTMLEl HTMLWindow *content_window, dispex_static_data_t *dispex_data) { This->lpIHTMLFrameBaseVtbl = &HTMLFrameBaseVtbl; + This->lpIHTMLFrameBase2Vtbl = &HTMLFrameBase2Vtbl; HTMLElement_Init(&This->element, doc, nselem, dispex_data); diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c index daef946c94d..218638bb8bf 100644 --- a/dlls/mshtml/htmliframe.c +++ b/dlls/mshtml/htmliframe.c @@ -33,172 +33,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml); typedef struct { HTMLFrameBase framebase; - const IHTMLFrameBase2Vtbl *lpIHTMLFrameBase2Vtbl; LONG ref; nsIDOMHTMLIFrameElement *nsiframe; } HTMLIFrame; -#define HTMLFRAMEBASE2(x) (&(x)->lpIHTMLFrameBase2Vtbl) - -#define HTMLFRAMEBASE2_THIS(iface) DEFINE_THIS(HTMLIFrame, IHTMLFrameBase2, iface) - -static HRESULT WINAPI HTMLIFrameBase2_QueryInterface(IHTMLFrameBase2 *iface, REFIID riid, void **ppv) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - - return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->framebase.element.node), riid, ppv); -} - -static ULONG WINAPI HTMLIFrameBase2_AddRef(IHTMLFrameBase2 *iface) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - - return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->framebase.element.node)); -} - -static ULONG WINAPI HTMLIFrameBase2_Release(IHTMLFrameBase2 *iface) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - - return IHTMLDOMNode_Release(HTMLDOMNODE(&This->framebase.element.node)); -} - -static HRESULT WINAPI HTMLIFrameBase2_GetTypeInfoCount(IHTMLFrameBase2 *iface, UINT *pctinfo) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_GetTypeInfo(IHTMLFrameBase2 *iface, UINT iTInfo, - LCID lcid, ITypeInfo **ppTInfo) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_GetIDsOfNames(IHTMLFrameBase2 *iface, REFIID riid, - LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_Invoke(IHTMLFrameBase2 *iface, DISPID dispIdMember, - REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, - VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)\n", This); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface, IHTMLWindow2 **p) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - - TRACE("(%p)->(%p)\n", This, p); - - if(This->framebase.content_window) { - IHTMLWindow2_AddRef(HTMLWINDOW2(This->framebase.content_window)); - *p = HTMLWINDOW2(This->framebase.content_window); - }else { - WARN("NULL content window\n"); - *p = NULL; - } - return S_OK; -} - -static HRESULT WINAPI HTMLIFrameBase2_put_onload(IHTMLFrameBase2 *iface, VARIANT v) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_get_onload(IHTMLFrameBase2 *iface, VARIANT *p) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_put_onreadystatechange(IHTMLFrameBase2 *iface, VARIANT v) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_get_onreadystatechange(IHTMLFrameBase2 *iface, VARIANT *p) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_get_readyState(IHTMLFrameBase2 *iface, BSTR *p) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_put_allowTransparency(IHTMLFrameBase2 *iface, VARIANT_BOOL v) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; -} - -static HRESULT WINAPI HTMLIFrameBase2_get_allowTransparency(IHTMLFrameBase2 *iface, VARIANT_BOOL *p) -{ - HTMLIFrame *This = HTMLFRAMEBASE2_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; -} - -#undef HTMLFRAMEBASE2_THIS - -static const IHTMLFrameBase2Vtbl HTMLIFrameBase2Vtbl = { - HTMLIFrameBase2_QueryInterface, - HTMLIFrameBase2_AddRef, - HTMLIFrameBase2_Release, - HTMLIFrameBase2_GetTypeInfoCount, - HTMLIFrameBase2_GetTypeInfo, - HTMLIFrameBase2_GetIDsOfNames, - HTMLIFrameBase2_Invoke, - HTMLIFrameBase2_get_contentWindow, - HTMLIFrameBase2_put_onload, - HTMLIFrameBase2_get_onload, - HTMLIFrameBase2_put_onreadystatechange, - HTMLIFrameBase2_get_onreadystatechange, - HTMLIFrameBase2_get_readyState, - HTMLIFrameBase2_put_allowTransparency, - HTMLIFrameBase2_get_allowTransparency -}; - #define HTMLIFRAME_NODE_THIS(iface) DEFINE_THIS2(HTMLIFrame, framebase.element.node, iface) static HRESULT HTMLIFrame_QI(HTMLDOMNode *iface, REFIID riid, void **ppv) { HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); - *ppv = NULL; - - if(IsEqualGUID(&IID_IHTMLFrameBase2, riid)) { - TRACE("(%p)->(IID_IHTMLFrameBase2 %p)\n", This, ppv); - *ppv = HTMLFRAMEBASE2(This); - }else { - return HTMLFrameBase_QI(&This->framebase, riid, ppv); - } - - IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; + return HTMLFrameBase_QI(&This->framebase, riid, ppv); } static void HTMLIFrame_destructor(HTMLDOMNode *iface) @@ -274,7 +121,6 @@ HTMLElement *HTMLIFrame_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, ret = heap_alloc_zero(sizeof(HTMLIFrame)); - ret->lpIHTMLFrameBase2Vtbl = &HTMLIFrameBase2Vtbl; ret->framebase.element.node.vtbl = &HTMLIFrameImplVtbl; nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLIFrameElement, (void**)&ret->nsiframe); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 8e5f9016d3c..d1fe9f83eba 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -485,7 +485,8 @@ typedef struct { struct HTMLFrameBase { HTMLElement element; - const IHTMLFrameBaseVtbl *lpIHTMLFrameBaseVtbl; + const IHTMLFrameBaseVtbl *lpIHTMLFrameBaseVtbl; + const IHTMLFrameBase2Vtbl *lpIHTMLFrameBase2Vtbl; HTMLWindow *content_window; }; @@ -589,6 +590,7 @@ struct HTMLDocumentNode { #define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl) #define HTMLFRAMEBASE(x) ((IHTMLFrameBase*) &(x)->lpIHTMLFrameBaseVtbl) +#define HTMLFRAMEBASE2(x) ((IHTMLFrameBase2*) &(x)->lpIHTMLFrameBase2Vtbl) #define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl) #define HTMLIMGFACTORY(x) ((IHTMLImageElementFactory*) &(x)->lpHTMLImageElementFactoryVtbl)