Jacek Caban : jscript: Added SCRIPTSTATE_STARTED implementation.

Alexandre Julliard julliard at winehq.org
Fri Sep 5 06:57:56 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Sep  5 02:38:17 2008 +0200

jscript: Added SCRIPTSTATE_STARTED implementation.

---

 dlls/jscript/jscript.c       |   32 ++++++++++++++++++++++++++++++--
 dlls/jscript/tests/jscript.c |    7 +++++++
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index adfd73c..2bd9f12 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -116,6 +116,16 @@ static void clear_script_queue(JScript *This)
     This->queue_head = This->queue_tail = NULL;
 }
 
+static void exec_queued_code(JScript *This)
+{
+    parser_ctx_t *iter;
+
+    for(iter = This->queue_head; iter; iter = iter->next)
+        exec_global_code(This, iter);
+
+    clear_script_queue(This);
+}
+
 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
 
 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
@@ -235,8 +245,26 @@ static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
 {
     JScript *This = ACTSCRIPT_THIS(iface);
-    FIXME("(%p)->(%d)\n", This, ss);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%d)\n", This, ss);
+
+    if(!This->ctx || GetCurrentThreadId() != This->thread_id)
+        return E_UNEXPECTED;
+
+    switch(ss) {
+    case SCRIPTSTATE_STARTED:
+        if(This->ctx->state == SCRIPTSTATE_CLOSED)
+            return E_UNEXPECTED;
+
+        exec_queued_code(This);
+        break;
+    default:
+        FIXME("unimplemented state %d\n", ss);
+        return E_NOTIMPL;
+    }
+
+    change_state(This, ss);
+    return S_OK;
 }
 
 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
diff --git a/dlls/jscript/tests/jscript.c b/dlls/jscript/tests/jscript.c
index d923f33..b0c532f 100644
--- a/dlls/jscript/tests/jscript.c
+++ b/dlls/jscript/tests/jscript.c
@@ -317,6 +317,13 @@ static void test_jscript(void)
 
     test_script_dispatch(script, TRUE);
 
+    SET_EXPECT(OnStateChange_STARTED);
+    hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
+    ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres);
+    CHECK_CALLED(OnStateChange_STARTED);
+
+    test_state(script, SCRIPTSTATE_STARTED);
+
     SET_EXPECT(OnStateChange_CLOSED);
     hres = IActiveScript_Close(script);
     ok(hres == S_OK, "Close failed: %08x\n", hres);




More information about the wine-cvs mailing list