mshtml: Added function object default value getter implementation.
This commit is contained in:
parent
bc4ceca951
commit
6262492252
|
@ -717,6 +717,37 @@ static HRESULT function_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPAR
|
|||
return E_UNEXPECTED;
|
||||
hres = typeinfo_invoke(This->obj, This->info, flags, params, res, ei);
|
||||
break;
|
||||
case DISPATCH_PROPERTYGET: {
|
||||
unsigned name_len;
|
||||
WCHAR *ptr;
|
||||
BSTR str;
|
||||
|
||||
static const WCHAR func_prefixW[] =
|
||||
{'\n','f','u','n','c','t','i','o','n',' '};
|
||||
static const WCHAR func_suffixW[] =
|
||||
{'(',')',' ','{','\n',' ',' ',' ',' ','[','n','a','t','i','v','e',' ','c','o','d','e',']','\n','}','\n'};
|
||||
|
||||
/* FIXME: This probably should be more generic. Also we should try to get IID_IActiveScriptSite and SID_GetCaller. */
|
||||
if(!caller)
|
||||
return E_ACCESSDENIED;
|
||||
|
||||
name_len = SysStringLen(This->info->name);
|
||||
ptr = str = SysAllocStringLen(NULL, name_len + (sizeof(func_prefixW)+sizeof(func_suffixW))/sizeof(WCHAR));
|
||||
if(!str)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
memcpy(ptr, func_prefixW, sizeof(func_prefixW));
|
||||
ptr += sizeof(func_prefixW)/sizeof(WCHAR);
|
||||
|
||||
memcpy(ptr, This->info->name, name_len*sizeof(WCHAR));
|
||||
ptr += name_len;
|
||||
|
||||
memcpy(ptr, func_suffixW, sizeof(func_suffixW));
|
||||
|
||||
V_VT(res) = VT_BSTR;
|
||||
V_BSTR(res) = str;
|
||||
return S_OK;
|
||||
}
|
||||
default:
|
||||
FIXME("Unimplemented flags %x\n", flags);
|
||||
hres = E_NOTIMPL;
|
||||
|
|
|
@ -165,6 +165,9 @@ function test_override_functions() {
|
|||
|
||||
var tmp = div.addBehavior();
|
||||
ok(tmp === "test", "div.addBehavior() = " + tmp);
|
||||
|
||||
tmp = String(div.attachEvent);
|
||||
ok(tmp == "\nfunction attachEvent() {\n [native code]\n}\n", "String(div.attachEvent) = " + tmp);
|
||||
}
|
||||
|
||||
function test_forin() {
|
||||
|
|
|
@ -132,6 +132,8 @@ DEFINE_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx_caller_secmgr);
|
|||
DEFINE_EXPECT(AXSetInterfaceSafetyOptions_IDispatchEx_caller);
|
||||
DEFINE_EXPECT(external_success);
|
||||
DEFINE_EXPECT(QS_VariantConversion);
|
||||
DEFINE_EXPECT(QS_IActiveScriptSite);
|
||||
DEFINE_EXPECT(QS_GetCaller);
|
||||
DEFINE_EXPECT(ChangeType);
|
||||
|
||||
#define TESTSCRIPT_CLSID "{178fc163-f585-4e24-9c13-4bb7faf80746}"
|
||||
|
@ -162,6 +164,9 @@ static HRESULT ax_getopt_hres = S_OK, ax_setopt_dispex_hres = S_OK;
|
|||
static HRESULT ax_setopt_disp_caller_hres = S_OK, ax_setopt_disp_data_hres = S_OK;
|
||||
static BOOL skip_loadobject_tests;
|
||||
|
||||
static IActiveScriptSite *site;
|
||||
static SCRIPTSTATE state;
|
||||
|
||||
static int strcmp_wa(LPCWSTR strw, const char *stra)
|
||||
{
|
||||
CHAR buf[512];
|
||||
|
@ -332,6 +337,19 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
if(IsEqualGUID(guidService, &IID_IActiveScriptSite)) {
|
||||
CHECK_EXPECT(QS_IActiveScriptSite);
|
||||
ok(IsEqualGUID(riid, &IID_IOleCommandTarget), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
|
||||
return IActiveScriptSite_QueryInterface(site, riid, ppv);
|
||||
}
|
||||
|
||||
if(IsEqualGUID(guidService, &SID_GetCaller)) {
|
||||
CHECK_EXPECT(QS_GetCaller);
|
||||
ok(IsEqualGUID(riid, &IID_IServiceProvider), "uenxpected riid %s\n", wine_dbgstr_guid(riid));
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ok(0, "unexpected service %s\n", wine_dbgstr_guid(guidService));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
@ -1280,9 +1298,6 @@ static void load_doc(IHTMLDocument2 *doc, const char *str)
|
|||
IHTMLElement_Release(body);
|
||||
}
|
||||
|
||||
static IActiveScriptSite *site;
|
||||
static SCRIPTSTATE state;
|
||||
|
||||
static HRESULT WINAPI ObjectSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
*ppv = NULL;
|
||||
|
@ -1902,6 +1917,22 @@ static void test_func(IDispatchEx *obj)
|
|||
hres = dispex_propput(obj, id, 0, &var, NULL);
|
||||
ok(hres == E_NOTIMPL, "InvokeEx failed: %08x\n", hres);
|
||||
|
||||
hres = dispex_propget(dispex, DISPID_VALUE, &var, NULL);
|
||||
ok(hres == E_ACCESSDENIED, "InvokeEx returned: %08x, expected E_ACCESSDENIED\n", hres);
|
||||
if(SUCCEEDED(hres))
|
||||
VariantClear(&var);
|
||||
|
||||
SET_EXPECT(QS_IActiveScriptSite);
|
||||
SET_EXPECT(QS_GetCaller);
|
||||
hres = dispex_propget(dispex, DISPID_VALUE, &var, &caller_sp);
|
||||
ok(hres == S_OK, "InvokeEx returned: %08x, expected S_OK\n", hres);
|
||||
ok(V_VT(&var) == VT_BSTR, "V_VT(var) = %d\n", V_VT(&var));
|
||||
ok(!strcmp_wa(V_BSTR(&var), "\nfunction toString() {\n [native code]\n}\n"),
|
||||
"V_BSTR(var) = %s\n", wine_dbgstr_w(V_BSTR(&var)));
|
||||
VariantClear(&var);
|
||||
todo_wine CHECK_CALLED(QS_IActiveScriptSite);
|
||||
todo_wine CHECK_CALLED(QS_GetCaller);
|
||||
|
||||
IDispatchEx_Release(dispex);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue