Signed-off-by: Gijs Vermeulen gijsvrm@gmail.com --- dlls/msscript.ocx/msscript.c | 19 ++++++++++++++----- dlls/msscript.ocx/tests/msscript.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c index e8cde9d26f..a020dd25eb 100644 --- a/dlls/msscript.ocx/msscript.c +++ b/dlls/msscript.ocx/msscript.c @@ -90,6 +90,7 @@ struct ScriptControl { SIZEL extent; LONG timeout; VARIANT_BOOL allow_ui; + VARIANT_BOOL use_safe_subset;
/* connection points */ ConnectionPoint *cp_list; @@ -838,15 +839,22 @@ static HRESULT WINAPI ScriptControl_put_AllowUI(IScriptControl *iface, VARIANT_B static HRESULT WINAPI ScriptControl_get_UseSafeSubset(IScriptControl *iface, VARIANT_BOOL *p) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, p); + + if(!p) + return E_POINTER; + + *p = This->use_safe_subset; + return S_OK; }
-static HRESULT WINAPI ScriptControl_put_UseSafeSubset(IScriptControl *iface, VARIANT_BOOL v) +static HRESULT WINAPI ScriptControl_put_UseSafeSubset(IScriptControl *iface, VARIANT_BOOL use_safe_subset) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + TRACE("(%p)->(%x)\n", This, use_safe_subset); + + This->use_safe_subset = use_safe_subset; + return S_OK; }
static HRESULT WINAPI ScriptControl_get_Modules(IScriptControl *iface, IScriptModuleCollection **p) @@ -1891,6 +1899,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow script_control->view_sink_flags = 0; script_control->view_sink = NULL; script_control->allow_ui = VARIANT_TRUE; + script_control->use_safe_subset = VARIANT_FALSE;
ConnectionPoint_Init(&script_control->cp_scsource, script_control, &DIID_DScriptControlSource); ConnectionPoint_Init(&script_control->cp_propnotif, script_control, &IID_IPropertyNotifySink); diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c index 576a6b1c79..f6630c3d21 100644 --- a/dlls/msscript.ocx/tests/msscript.c +++ b/dlls/msscript.ocx/tests/msscript.c @@ -1254,6 +1254,43 @@ static void test_AllowUI(void) IScriptControl_Release(sc); }
+static void test_UseSafeSubset(void) +{ + IScriptControl *sc; + VARIANT_BOOL use_safe_subset; + HRESULT hr; + BSTR str; + + hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IScriptControl, (void**)&sc); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IScriptControl_get_UseSafeSubset(sc, NULL); + ok(hr == E_POINTER, "got 0x%08x\n", hr); + + hr = IScriptControl_get_UseSafeSubset(sc, &use_safe_subset); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(use_safe_subset == VARIANT_FALSE, "got %d\n", use_safe_subset); + + hr = IScriptControl_put_UseSafeSubset(sc, VARIANT_TRUE); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IScriptControl_get_UseSafeSubset(sc, &use_safe_subset); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(use_safe_subset == VARIANT_TRUE, "got %d\n", use_safe_subset); + + str = SysAllocString(vbW); + hr = IScriptControl_put_Language(sc, str); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + + hr = IScriptControl_get_UseSafeSubset(sc, &use_safe_subset); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(use_safe_subset == VARIANT_TRUE, "got %d\n", use_safe_subset); + + IScriptControl_Release(sc); +} + START_TEST(msscript) { IUnknown *unk; @@ -1281,6 +1318,7 @@ START_TEST(msscript) test_Reset(); test_AddObject(); test_AllowUI(); + test_UseSafeSubset();
CoUninitialize(); }
Signed-off-by: Gijs Vermeulen gijsvrm@gmail.com --- dlls/msscript.ocx/msscript.c | 26 +++++++++++++++--- dlls/msscript.ocx/tests/msscript.c | 54 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 4 deletions(-)
diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c index a020dd25eb..746c2d3892 100644 --- a/dlls/msscript.ocx/msscript.c +++ b/dlls/msscript.ocx/msscript.c @@ -91,6 +91,7 @@ struct ScriptControl { LONG timeout; VARIANT_BOOL allow_ui; VARIANT_BOOL use_safe_subset; + ScriptControlStates state;
/* connection points */ ConnectionPoint *cp_list; @@ -761,15 +762,31 @@ static HRESULT WINAPI ScriptControl_put_Language(IScriptControl *iface, BSTR lan static HRESULT WINAPI ScriptControl_get_State(IScriptControl *iface, ScriptControlStates *p) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + TRACE("(%p)->(%p)\n", This, p); + + if(!p) + return E_POINTER; + + if(!This->host) + return E_FAIL; + + *p = This->state; + return S_OK; }
static HRESULT WINAPI ScriptControl_put_State(IScriptControl *iface, ScriptControlStates state) { ScriptControl *This = impl_from_IScriptControl(iface); - FIXME("(%p)->(%x)\n", This, state); - return E_NOTIMPL; + TRACE("(%p)->(%x)\n", This, state); + + if(!This->host) + return E_FAIL; + + if(state != Initialized && state != Connected) + return CTL_E_INVALIDPROPERTYVALUE; + + This->state = state; + return S_OK; }
static HRESULT WINAPI ScriptControl_put_SitehWnd(IScriptControl *iface, LONG hwnd) @@ -1900,6 +1917,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow script_control->view_sink = NULL; script_control->allow_ui = VARIANT_TRUE; script_control->use_safe_subset = VARIANT_FALSE; + script_control->state = Initialized;
ConnectionPoint_Init(&script_control->cp_scsource, script_control, &DIID_DScriptControlSource); ConnectionPoint_Init(&script_control->cp_propnotif, script_control, &IID_IPropertyNotifySink); diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c index f6630c3d21..3110ea278d 100644 --- a/dlls/msscript.ocx/tests/msscript.c +++ b/dlls/msscript.ocx/tests/msscript.c @@ -1291,6 +1291,59 @@ static void test_UseSafeSubset(void) IScriptControl_Release(sc); }
+static void test_State(void) +{ + IScriptControl *sc; + ScriptControlStates state; + HRESULT hr; + BSTR str; + + hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, + &IID_IScriptControl, (void**)&sc); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IScriptControl_get_State(sc, NULL); + ok(hr == E_POINTER, "got 0x%08x\n", hr); + + hr = IScriptControl_get_State(sc, &state); + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + hr = IScriptControl_put_State(sc, Connected); + ok(hr == E_FAIL, "got 0x%08x\n", hr); + + str = SysAllocString(vbW); + hr = IScriptControl_put_Language(sc, str); + ok(hr == S_OK, "got 0x%08x\n", hr); + SysFreeString(str); + + hr = IScriptControl_get_State(sc, &state); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(state == Initialized, "got %d\n", state); + + hr = IScriptControl_put_State(sc, Connected); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IScriptControl_get_State(sc, &state); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(state == Connected, "got %d\n", state); + + hr = IScriptControl_put_State(sc, 2); + ok(hr == CTL_E_INVALIDPROPERTYVALUE, "got 0x%08x\n", hr); + + hr = IScriptControl_get_State(sc, &state); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(state == Connected, "got %d\n", state); + + hr = IScriptControl_put_State(sc, -1); + ok(hr == CTL_E_INVALIDPROPERTYVALUE, "got 0x%08x\n", hr); + + hr = IScriptControl_get_State(sc, &state); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(state == Connected, "got %d\n", state); + + IScriptControl_Release(sc); +} + START_TEST(msscript) { IUnknown *unk; @@ -1319,6 +1372,7 @@ START_TEST(msscript) test_AddObject(); test_AllowUI(); test_UseSafeSubset(); + test_State();
CoUninitialize(); }