mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 20:28:26 +00:00
mshtml: Implement HTMLAreaElement's href prop.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com> Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ec665f1c7d
commit
2412a04d84
|
@ -129,15 +129,43 @@ static HRESULT WINAPI HTMLAreaElement_get_coords(IHTMLAreaElement *iface, BSTR *
|
|||
static HRESULT WINAPI HTMLAreaElement_put_href(IHTMLAreaElement *iface, BSTR v)
|
||||
{
|
||||
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString nsstr;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_InitDepend(&nsstr, v);
|
||||
nsres = nsIDOMHTMLAreaElement_SetHref(This->nsarea, &nsstr);
|
||||
nsAString_Finish(&nsstr);
|
||||
if(NS_FAILED(nsres))
|
||||
return E_FAIL;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLAreaElement_get_href(IHTMLAreaElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLAreaElement *This = impl_from_IHTMLAreaElement(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsAString href_str;
|
||||
nsresult nsres;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsAString_Init(&href_str, NULL);
|
||||
nsres = nsIDOMHTMLAreaElement_GetHref(This->nsarea, &href_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
const PRUnichar *href;
|
||||
|
||||
nsAString_GetData(&href_str, &href);
|
||||
hres = nsuri_to_url(href, TRUE, p);
|
||||
}else {
|
||||
ERR("GetHref failed: %08x\n", nsres);
|
||||
hres = E_FAIL;
|
||||
}
|
||||
|
||||
nsAString_Finish(&href_str);
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLAreaElement_put_target(IHTMLAreaElement *iface, BSTR v)
|
||||
|
|
|
@ -77,6 +77,7 @@ static const char elem_test_str[] =
|
|||
"<script id=\"sc\" type=\"text/javascript\"><!--\nfunction Testing() {}\n// -->\n</script>"
|
||||
"<test /><object id=\"objid\" name=\"objname\" vspace=100></object><embed />"
|
||||
"<img id=\"imgid\" name=\"WineImg\"/>"
|
||||
"<area id=\"area\" href=\"http://test\">"
|
||||
"<iframe src=\"about:blank\" id=\"ifr\"></iframe>"
|
||||
"<form id=\"frm\"></form>"
|
||||
"<div id=\"attr\" attr1=\"attr1\" attr2 attr3=\"attr3\"></div>"
|
||||
|
@ -918,6 +919,17 @@ static IHTMLAnchorElement *_get_anchor_iface(unsigned line, IUnknown *unk)
|
|||
return anchor;
|
||||
}
|
||||
|
||||
#define get_area_iface(u) _get_area_iface(__LINE__,u)
|
||||
static IHTMLAreaElement *_get_area_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
IHTMLAreaElement *area;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IUnknown_QueryInterface(unk, &IID_IHTMLAreaElement, (void**)&area);
|
||||
ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLAreaElement: %08x\n", hres);
|
||||
return area;
|
||||
}
|
||||
|
||||
#define get_textarea_iface(u) _get_textarea_iface(__LINE__,u)
|
||||
static IHTMLTextAreaElement *_get_textarea_iface(unsigned line, IUnknown *unk)
|
||||
{
|
||||
|
@ -1704,6 +1716,36 @@ static void _test_anchor_hash(unsigned line, IHTMLElement *elem, const WCHAR *ex
|
|||
SysFreeString(str);
|
||||
}
|
||||
|
||||
#define test_area_href(a,h) _test_area_href(__LINE__,a,h)
|
||||
static void _test_area_href(unsigned line, IUnknown *unk, const WCHAR *exhref)
|
||||
{
|
||||
IHTMLAreaElement *area = _get_area_iface(line, unk);
|
||||
BSTR str;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLAreaElement_get_href(area, &str);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_href failed: %08x\n", hres);
|
||||
ok_(__FILE__,line)(!lstrcmpW(str, exhref), "href = %s, expected %s\n", wine_dbgstr_w(str), wine_dbgstr_w(exhref));
|
||||
SysFreeString(str);
|
||||
|
||||
_test_disp_value(line, unk, exhref);
|
||||
}
|
||||
|
||||
#define test_area_put_href(a,h) _test_area_put_href(__LINE__,a,h)
|
||||
static void _test_area_put_href(unsigned line, IUnknown *unk, const WCHAR *exhref)
|
||||
{
|
||||
IHTMLAreaElement *area = _get_area_iface(line, unk);
|
||||
BSTR str;
|
||||
HRESULT hres;
|
||||
|
||||
str = SysAllocString(exhref);
|
||||
hres = IHTMLAreaElement_put_href(area, str);
|
||||
ok_(__FILE__,line)(hres == S_OK, "get_href failed: %08x\n", hres);
|
||||
SysFreeString(str);
|
||||
|
||||
_test_disp_value(line, unk, exhref);
|
||||
}
|
||||
|
||||
#define test_option_text(o,t) _test_option_text(__LINE__,o,t)
|
||||
static void _test_option_text(unsigned line, IHTMLOptionElement *option, const WCHAR *text)
|
||||
{
|
||||
|
@ -8763,6 +8805,7 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
ET_OBJECT,
|
||||
ET_EMBED,
|
||||
ET_IMG,
|
||||
ET_AREA,
|
||||
ET_IFRAME,
|
||||
ET_FORM,
|
||||
ET_DIV
|
||||
|
@ -8803,8 +8846,8 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
ok(hres == S_OK, "get_links failed: %08x\n", hres);
|
||||
if(hres == S_OK)
|
||||
{
|
||||
static const elem_type_t images_types[] = {ET_A};
|
||||
test_elem_collection((IUnknown*)collection, images_types, 1);
|
||||
static const elem_type_t link_types[] = {ET_A,ET_AREA};
|
||||
test_elem_collection((IUnknown*)collection, link_types, 2);
|
||||
|
||||
IHTMLElementCollection_Release(collection);
|
||||
}
|
||||
|
@ -9211,6 +9254,21 @@ static void test_elems(IHTMLDocument2 *doc)
|
|||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
elem = get_elem_by_id(doc, L"area", TRUE);
|
||||
if(elem) {
|
||||
test_area_href((IUnknown*)elem, L"http://test/");
|
||||
|
||||
/* Change the href */
|
||||
test_area_put_href((IUnknown*)elem, L"http://test1/");
|
||||
test_area_href((IUnknown*)elem, L"http://test1/");
|
||||
|
||||
/* Restore the href */
|
||||
test_area_put_href((IUnknown*)elem, L"http://test/");
|
||||
test_area_href((IUnknown*)elem, L"http://test/");
|
||||
|
||||
IHTMLElement_Release(elem);
|
||||
}
|
||||
|
||||
elem = get_doc_elem_by_id(doc, L"metaid");
|
||||
if(elem) {
|
||||
test_meta_name((IUnknown*)elem, L"meta name");
|
||||
|
|
Loading…
Reference in a new issue