mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 21:04:55 +00:00
mshtml: Added DISPID_VALUE implementation for HTMLLocation object.
This commit is contained in:
parent
8b8e91a50f
commit
fc26a1c4bd
|
@ -303,6 +303,34 @@ static HRESULT WINAPI HTMLLocation_toString(IHTMLLocation *iface, BSTR *String)
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT HTMLLocation_value(IUnknown *iface, LCID lcid, WORD flags, DISPPARAMS *params,
|
||||
VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
|
||||
{
|
||||
HTMLLocation *This = HTMLLOCATION_THIS(iface);
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
switch(flags) {
|
||||
case DISPATCH_PROPERTYGET: {
|
||||
BSTR str;
|
||||
|
||||
hres = IHTMLLocation_get_href(HTMLLOCATION(This), &str);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
||||
V_VT(res) = VT_BSTR;
|
||||
V_BSTR(res) = str;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
FIXME("unimplemented flags %x\n", flags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#undef HTMLLOCATION_THIS
|
||||
|
||||
static const IHTMLLocationVtbl HTMLLocationVtbl = {
|
||||
|
@ -335,12 +363,18 @@ static const IHTMLLocationVtbl HTMLLocationVtbl = {
|
|||
HTMLLocation_toString
|
||||
};
|
||||
|
||||
static const dispex_static_data_vtbl_t HTMLLocation_dispex_vtbl = {
|
||||
HTMLLocation_value,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const tid_t HTMLLocation_iface_tids[] = {
|
||||
IHTMLLocation_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLLocation_dispex = {
|
||||
NULL,
|
||||
&HTMLLocation_dispex_vtbl,
|
||||
DispHTMLLocation_tid,
|
||||
NULL,
|
||||
HTMLLocation_iface_tids
|
||||
|
|
|
@ -469,23 +469,50 @@ static BOOL _test_get_dispid(unsigned line, IUnknown *unk, IID *iid)
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define test_disp(u,id) _test_disp(__LINE__,u,id)
|
||||
static void _test_disp(unsigned line, IUnknown *unk, const IID *diid)
|
||||
#define test_disp_value(u) _test_disp_value(__LINE__,u,v)
|
||||
static void _test_disp_value(unsigned line, IUnknown *unk, const char *val)
|
||||
{
|
||||
DISPPARAMS dp = {NULL,NULL,0,0};
|
||||
IDispatchEx *dispex;
|
||||
EXCEPINFO ei;
|
||||
VARIANT var;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IDispatchEx, (void**)&dispex);
|
||||
ok_(__FILE__,line)(hres == S_OK, "Could not get IDispatchEx interface: %08x\n", hres);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
hres = IDispatchEx_InvokeEx(dispex, DISPID_VALUE, 0, DISPATCH_PROPERTYGET, &dp, &var, &ei, NULL);
|
||||
IDispatchEx_Release(dispex);
|
||||
ok_(__FILE__,line)(hres == S_OK, "InvokeEx(DISPID_VALUE) returned: %08x\n", hres);
|
||||
|
||||
ok_(__FILE__,line)(V_VT(&var) == VT_BSTR, "V_VT(value) = %d\n", V_VT(&var));
|
||||
ok_(__FILE__,line)(!strcmp_wa(V_BSTR(&var), val), "value = %s, expected %s\n", wine_dbgstr_w(V_BSTR(&var)), val);
|
||||
VariantClear(&var);
|
||||
}
|
||||
|
||||
#define test_disp(u,id,v) _test_disp(__LINE__,u,id,v)
|
||||
static void _test_disp(unsigned line, IUnknown *unk, const IID *diid, const char *val)
|
||||
{
|
||||
IID iid;
|
||||
|
||||
if(_test_get_dispid(line, unk, &iid))
|
||||
ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
|
||||
|
||||
_test_disp_value(line, unk, val);
|
||||
}
|
||||
|
||||
#define test_disp2(u,id,id2) _test_disp2(__LINE__,u,id,id2)
|
||||
static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID *diid2)
|
||||
#define test_disp2(u,id,id2,v) _test_disp2(__LINE__,u,id,id2,v)
|
||||
static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID *diid2, const char *val)
|
||||
{
|
||||
IID iid;
|
||||
|
||||
if(_test_get_dispid(line, unk, &iid))
|
||||
ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)),
|
||||
"unexpected guid %s\n", dbgstr_guid(&iid));
|
||||
|
||||
_test_disp_value(line, unk, val);
|
||||
}
|
||||
|
||||
#define get_elem_iface(u) _get_elem_iface(__LINE__,u)
|
||||
|
@ -580,7 +607,7 @@ static void _test_elem_type(unsigned line, IUnknown *unk, elem_type_t type)
|
|||
_test_ifaces(line, unk, elem_type_infos[type].iids);
|
||||
|
||||
if(elem_type_infos[type].dispiid)
|
||||
_test_disp(line, unk, elem_type_infos[type].dispiid);
|
||||
_test_disp(line, unk, elem_type_infos[type].dispiid, "[object]");
|
||||
}
|
||||
|
||||
#define get_node_type(n) _get_node_type(__LINE__,n)
|
||||
|
@ -1022,7 +1049,7 @@ static void _test_elem_collection(unsigned line, IUnknown *unk,
|
|||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLElementCollection, (void**)&col);
|
||||
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElementCollection: %08x\n", hres);
|
||||
|
||||
test_disp((IUnknown*)col, &DIID_DispHTMLElementCollection);
|
||||
test_disp((IUnknown*)col, &DIID_DispHTMLElementCollection, "[object]");
|
||||
|
||||
hres = IHTMLElementCollection_get_length(col, &len);
|
||||
ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres);
|
||||
|
@ -2396,7 +2423,7 @@ static void test_location(IHTMLDocument2 *doc)
|
|||
IHTMLLocation_Release(location2);
|
||||
|
||||
test_ifaces((IUnknown*)location, location_iids);
|
||||
test_disp2((IUnknown*)location, &DIID_DispHTMLLocation, &IID_IHTMLLocation);
|
||||
test_disp2((IUnknown*)location, &DIID_DispHTMLLocation, &IID_IHTMLLocation, "about:blank");
|
||||
|
||||
hres = IHTMLLocation_get_pathname(location, &str);
|
||||
ok(hres == S_OK, "get_pathname failed: %08x\n", hres);
|
||||
|
@ -2429,7 +2456,7 @@ static void test_navigator(IHTMLDocument2 *doc)
|
|||
hres = IHTMLWindow2_get_navigator(window, &navigator);
|
||||
ok(hres == S_OK, "get_navigator failed: %08x\n", hres);
|
||||
ok(navigator != NULL, "navigator == NULL\n");
|
||||
test_disp2((IUnknown*)navigator, &DIID_DispHTMLNavigator, &IID_IOmNavigator);
|
||||
test_disp2((IUnknown*)navigator, &DIID_DispHTMLNavigator, &IID_IOmNavigator, "[object]");
|
||||
|
||||
hres = IHTMLWindow2_get_navigator(window, &navigator2);
|
||||
ok(hres == S_OK, "get_navigator failed: %08x\n", hres);
|
||||
|
@ -2475,7 +2502,7 @@ static void test_current_style(IHTMLCurrentStyle *current_style)
|
|||
HRESULT hres;
|
||||
VARIANT v;
|
||||
|
||||
test_disp((IUnknown*)current_style, &DIID_DispHTMLCurrentStyle);
|
||||
test_disp((IUnknown*)current_style, &DIID_DispHTMLCurrentStyle, "[object]");
|
||||
test_ifaces((IUnknown*)current_style, cstyle_iids);
|
||||
|
||||
hres = IHTMLCurrentStyle_get_display(current_style, &str);
|
||||
|
@ -2744,7 +2771,7 @@ static void test_default_style(IHTMLStyle *style)
|
|||
BSTR sDefault;
|
||||
VARIANT vDefault;
|
||||
|
||||
test_disp((IUnknown*)style, &DIID_DispHTMLStyle);
|
||||
test_disp((IUnknown*)style, &DIID_DispHTMLStyle, "[object]");
|
||||
test_ifaces((IUnknown*)style, style_iids);
|
||||
|
||||
test_style_csstext(style, NULL);
|
||||
|
@ -3928,7 +3955,7 @@ static void test_window(IHTMLDocument2 *doc)
|
|||
hres = IHTMLDocument2_get_parentWindow(doc, &window);
|
||||
ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres);
|
||||
test_ifaces((IUnknown*)window, window_iids);
|
||||
test_disp((IUnknown*)window, &DIID_DispHTMLWindow2);
|
||||
test_disp((IUnknown*)window, &DIID_DispHTMLWindow2, "[object]");
|
||||
|
||||
hres = IHTMLWindow2_get_document(window, &doc2);
|
||||
ok(hres == S_OK, "get_document failed: %08x\n", hres);
|
||||
|
@ -4591,7 +4618,7 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
ok(node != NULL, "node == NULL\n");
|
||||
if(node) {
|
||||
test_ifaces((IUnknown*)node, text_iids);
|
||||
test_disp((IUnknown*)node, &DIID_DispHTMLDOMTextNode);
|
||||
test_disp((IUnknown*)node, &DIID_DispHTMLDOMTextNode, "[object]");
|
||||
|
||||
node2 = get_first_child((IUnknown*)node);
|
||||
ok(!node2, "node2 != NULL\n");
|
||||
|
@ -4611,7 +4638,7 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
if(child_col) {
|
||||
LONG length = 0;
|
||||
|
||||
test_disp((IUnknown*)child_col, &DIID_DispDOMChildrenCollection);
|
||||
test_disp((IUnknown*)child_col, &DIID_DispDOMChildrenCollection, "[object]");
|
||||
|
||||
hres = IHTMLDOMChildrenCollection_get_length(child_col, &length);
|
||||
ok(hres == S_OK, "get_length failed: %08x\n", hres);
|
||||
|
@ -4734,7 +4761,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
|
|||
type = get_node_type((IUnknown*)elem);
|
||||
ok(type == 1, "type=%d\n", type);
|
||||
test_ifaces((IUnknown*)elem, elem_iids);
|
||||
test_disp((IUnknown*)elem, &DIID_DispHTMLGenericElement);
|
||||
test_disp((IUnknown*)elem, &DIID_DispHTMLGenericElement, "[object]");
|
||||
|
||||
hres = IHTMLDocument2_get_body(doc, &body);
|
||||
ok(hres == S_OK, "get_body failed: %08x\n", hres);
|
||||
|
@ -4763,7 +4790,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
|
|||
|
||||
node = test_create_text(doc, "test");
|
||||
test_ifaces((IUnknown*)node, text_iids);
|
||||
test_disp((IUnknown*)node, &DIID_DispHTMLDOMTextNode);
|
||||
test_disp((IUnknown*)node, &DIID_DispHTMLDOMTextNode, "[object]");
|
||||
|
||||
V_VT(&var) = VT_NULL;
|
||||
node2 = test_node_insertbefore((IUnknown*)body, node, &var);
|
||||
|
|
Loading…
Reference in a new issue