Module: wine Branch: master Commit: a009157331320cc52482089fa5eedcd8d9d15bcd URL: http://source.winehq.org/git/wine.git/?a=commit;h=a009157331320cc52482089fa5...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Apr 17 22:53:31 2008 +0200
mshtml: Added IHTMLWindow3 stub implementation.
---
dlls/mshtml/htmlwindow.c | 181 ++++++++++++++++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/tests/dom.c | 8 ++ 3 files changed, 191 insertions(+), 0 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 0f57069..7ae121a 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -55,6 +55,9 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii }else if(IsEqualGUID(&IID_IHTMLWindow2, riid)) { TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv); *ppv = HTMLWINDOW2(This); + }else if(IsEqualGUID(&IID_IHTMLWindow3, riid)) { + TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv); + *ppv = HTMLWINDOW3(This); }
if(*ppv) { @@ -762,6 +765,183 @@ static const IHTMLWindow2Vtbl HTMLWindow2Vtbl = { HTMLWindow2_get_external };
+#define HTMLWINDOW3_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow3, iface) + +static HRESULT WINAPI HTMLWindow3_QueryInterface(IHTMLWindow3 *iface, REFIID riid, void **ppv) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv); +} + +static ULONG WINAPI HTMLWindow3_AddRef(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_AddRef(HTMLWINDOW2(This)); +} + +static ULONG WINAPI HTMLWindow3_Release(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + + return IHTMLWindow2_Release(HTMLWINDOW2(This)); +} + +static HRESULT WINAPI HTMLWindow3_GetTypeInfoCount(IHTMLWindow3 *iface, UINT *pctinfo) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_GetTypeInfo(IHTMLWindow3 *iface, UINT iTInfo, + LCID lcid, ITypeInfo **ppTInfo) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_GetIDsOfNames(IHTMLWindow3 *iface, REFIID riid, + LPOLESTR *rgszNames, UINT cNames, + LCID lcid, DISPID *rgDispId) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_Invoke(IHTMLWindow3 *iface, DISPID dispIdMember, + REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_screenLeft(IHTMLWindow3 *iface, long *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_screenTop(IHTMLWindow3 *iface, long *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_attachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp, VARIANT_BOOL *pfResult) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, long msec, + VARIANT *language, long *timerID) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p(%d) %ld %p %p)\n", This, expression, V_VT(expression), msec, language, timerID); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_setInterval(IHTMLWindow3 *iface, VARIANT *expression, long msec, + VARIANT *language, long *timerID) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p %ld %p %p)\n", This, expression, msec, language, timerID); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_print(IHTMLWindow3 *iface) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_put_onbeforeprint(IHTMLWindow3 *iface, VARIANT v) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_onbeforeprint(IHTMLWindow3 *iface, VARIANT *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_put_onafterprint(IHTMLWindow3 *iface, VARIANT v) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->()\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_onafterprint(IHTMLWindow3 *iface, VARIANT *p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_get_clipboardData(IHTMLWindow3 *iface, IHTMLDataTransfer **p) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%p)\n", This, p); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLWindow3_showModelessDialog(IHTMLWindow3 *iface, BSTR url, + VARIANT *varArgIn, VARIANT *options, IHTMLWindow2 **pDialog) +{ + HTMLWindow *This = HTMLWINDOW3_THIS(iface); + FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(url), varArgIn, options, pDialog); + return E_NOTIMPL; +} + +#undef HTMLWINDOW3_THIS + +static const IHTMLWindow3Vtbl HTMLWindow3Vtbl = { + HTMLWindow3_QueryInterface, + HTMLWindow3_AddRef, + HTMLWindow3_Release, + HTMLWindow3_GetTypeInfoCount, + HTMLWindow3_GetTypeInfo, + HTMLWindow3_GetIDsOfNames, + HTMLWindow3_Invoke, + HTMLWindow3_get_screenLeft, + HTMLWindow3_get_screenTop, + HTMLWindow3_attachEvent, + HTMLWindow3_detachEvent, + HTMLWindow3_setTimeout, + HTMLWindow3_setInterval, + HTMLWindow3_print, + HTMLWindow3_put_onbeforeprint, + HTMLWindow3_get_onbeforeprint, + HTMLWindow3_put_onafterprint, + HTMLWindow3_get_onafterprint, + HTMLWindow3_get_clipboardData, + HTMLWindow3_showModelessDialog +}; + static const char wineConfig_func[] = "window.__defineGetter__("external",function() {\n" " return window.__wineWindow__.external;\n" @@ -869,6 +1049,7 @@ HTMLWindow *HTMLWindow_Create(HTMLDocument *doc) HTMLWindow *ret = heap_alloc(sizeof(HTMLWindow));
ret->lpHTMLWindow2Vtbl = &HTMLWindow2Vtbl; + ret->lpHTMLWindow3Vtbl = &HTMLWindow3Vtbl; ret->ref = 1; ret->nswindow = NULL; ret->doc = doc; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index f7e1e1e..ce75611 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -73,6 +73,7 @@ void init_dispex(DispatchEx*,IUnknown*);
typedef struct { const IHTMLWindow2Vtbl *lpHTMLWindow2Vtbl; + const IHTMLWindow3Vtbl *lpHTMLWindow3Vtbl;
LONG ref;
@@ -296,6 +297,7 @@ typedef struct { } HTMLTextContainer;
#define HTMLWINDOW2(x) ((IHTMLWindow2*) &(x)->lpHTMLWindow2Vtbl) +#define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl)
#define HTMLDOC(x) ((IHTMLDocument2*) &(x)->lpHTMLDocument2Vtbl) #define HTMLDOC3(x) ((IHTMLDocument3*) &(x)->lpHTMLDocument3Vtbl) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index d041a2c..5e2acde 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -169,6 +169,13 @@ static REFIID const location_iids[] = { NULL };
+static REFIID const window_iids[] = { + &IID_IDispatch, + &IID_IHTMLWindow2, + &IID_IHTMLWindow3, + NULL +}; + typedef struct { const char *tag; REFIID *iids; @@ -1038,6 +1045,7 @@ static void test_navigator(IHTMLDocument2 *doc)
hres = IHTMLDocument2_get_parentWindow(doc, &window); ok(hres == S_OK, "parentWidnow failed: %08x\n", hres); + test_ifaces((IUnknown*)window, window_iids);
hres = IHTMLWindow2_get_navigator(window, &navigator); ok(hres == S_OK, "get_navigator failed: %08x\n", hres);