Jacek Caban : mshtml: Added Invoke(DISPID_READYSTATE) implementation.

Alexandre Julliard julliard at winehq.org
Fri Jan 4 07:12:44 CST 2008


Module: wine
Branch: master
Commit: c6ac960f4a044983ab3658aebf48b51213b8ba59
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c6ac960f4a044983ab3658aebf48b51213b8ba59

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan  4 01:49:05 2008 +0100

mshtml: Added Invoke(DISPID_READYSTATE) implementation.

---

 dlls/mshtml/htmldoc.c       |   20 ++++++++++++++++++--
 dlls/mshtml/tests/htmldoc.c |   20 +++++++++++++++++++-
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 4ce0381..2a04ef3 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -229,8 +229,24 @@ static HRESULT WINAPI HTMLDocument_Invoke(IHTMLDocument2 *iface, DISPID dispIdMe
                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 {
-    FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", iface, dispIdMember, debugstr_guid(riid),
-            lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+    HTMLDocument *This = HTMLDOC_THIS(iface);
+
+    TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+          lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+    switch(dispIdMember) {
+    case DISPID_READYSTATE:
+        if(!(wFlags & DISPATCH_PROPERTYGET))
+            return E_INVALIDARG;
+
+        V_VT(pVarResult) = VT_I4;
+        V_I4(pVarResult) = This->readystate;
+        return S_OK;
+
+    default:
+        FIXME("Unsupported dispid %d\n", dispIdMember);
+    }
+
     return E_NOTIMPL;
 }
 
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 6c662c0..d21b0c5 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -146,6 +146,7 @@ static int stream_read, protocol_read;
 static enum load_state_t {
     LD_DOLOAD,
     LD_LOADING,
+    LD_LOADED,
     LD_INTERACTIVE,
     LD_COMPLETE,
     LD_NO
@@ -2392,7 +2393,9 @@ static LRESULT WINAPI wnd_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
 static void _test_readyState(unsigned line, IUnknown *unk)
 {
     IHTMLDocument2 *htmldoc;
+    DISPPARAMS dispparams;
     BSTR state;
+    VARIANT out;
     HRESULT hres;
 
     static const WCHAR wszUninitialized[] = {'u','n','i','n','i','t','i','a','l','i','z','e','d',0};
@@ -2403,6 +2406,7 @@ static void _test_readyState(unsigned line, IUnknown *unk)
     static const LPCWSTR expected_state[] = {
         wszUninitialized,
         wszLoading,
+        NULL,
         wszInteractive,
         wszComplete,
         wszUninitialized
@@ -2426,7 +2430,21 @@ static void _test_readyState(unsigned line, IUnknown *unk)
          debugstr_w(state), load_state);
     SysFreeString(state);
 
-    IHTMLDocument_Release(htmldoc);
+    dispparams.cArgs = 0;
+    dispparams.cNamedArgs = 0;
+    dispparams.rgdispidNamedArgs = NULL;
+    dispparams.rgvarg = NULL;
+
+    VariantInit(&out);
+
+    hres = IHTMLDocument2_Invoke(htmldoc, DISPID_READYSTATE, &IID_NULL, 0, DISPATCH_PROPERTYGET,
+                                 &dispparams, &out, NULL, NULL);
+    ok(hres == S_OK, "Invoke(DISPID_READYSTATE) failed: %08x\n", hres);
+
+    ok_(__FILE__,line) (V_VT(&out) == VT_I4, "V_VT(out)=%d\n", V_VT(&out));
+    ok_(__FILE__,line) (V_I4(&out) == load_state%5, "VT_I4(out)=%d, expected %d\n", V_I4(&out), load_state%5);
+
+    IHTMLDocument2_Release(htmldoc);
 }
 
 static void test_ConnectionPoint(IConnectionPointContainer *container, REFIID riid)




More information about the wine-cvs mailing list