From: Zhenbo Li Subject: mshtml: Added IHTMLOptionElement::defaultSelected property implementation. Message-Id: <53D74EE8.6000604@gmail.com> Date: Tue, 29 Jul 2014 15:36:08 +0800 --- dlls/mshtml/htmloption.c | 27 +++++++++++++++++++++++---- dlls/mshtml/tests/dom.c | 22 ++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index 4738eb5..50bb86e 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -166,15 +166,34 @@ static HRESULT WINAPI HTMLOptionElement_get_value(IHTMLOptionElement *iface, BST static HRESULT WINAPI HTMLOptionElement_put_defaultSelected(IHTMLOptionElement *iface, VARIANT_BOOL v) { HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface); - FIXME("(%p)->(%x)\n", This, v); - return E_NOTIMPL; + nsresult nsres; + + TRACE("(%p)->(%x)\n", This, v); + + nsres = nsIDOMHTMLOptionElement_SetDefaultSelected(This->nsoption, v != VARIANT_FALSE); + if(NS_FAILED(nsres)) { + ERR("SetDefaultSelected failed: %08x\n", nsres); + return E_FAIL; + } + + return S_OK; } static HRESULT WINAPI HTMLOptionElement_get_defaultSelected(IHTMLOptionElement *iface, VARIANT_BOOL *p) { HTMLOptionElement *This = impl_from_IHTMLOptionElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsresult nsres; + cpp_bool selected; + + TRACE("(%p)->(%p)\n", This, p); + + nsres = nsIDOMHTMLOptionElement_GetDefaultSelected(This->nsoption, &selected); + if (NS_FAILED(nsres)) { + ERR("GetDefaultSelected failed: %08x\n", nsres); + return E_FAIL; + } + *p = selected? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; } static HRESULT WINAPI HTMLOptionElement_put_index(IHTMLOptionElement *iface, LONG v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 33645c8..7d888d5 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -1557,6 +1557,26 @@ static void _test_option_put_selected(unsigned line, IHTMLOptionElement *option, _test_option_selected(line, option, b); } +#define test_option_defaultSelected(o,s) _test_option_selected(__LINE__,o,s) +static void _test_option_defaultSelected(unsigned line, IHTMLOptionElement *option, VARIANT_BOOL ex) +{ + VARIANT_BOOL b = 0x100; + HRESULT hres; + + hres = IHTMLOptionElement_get_defaultSelected(option, &b); + ok_(__FILE__,line)(hres == S_OK, "get_defaultSelected failed: %08x\n", hres); + ok_(__FILE__,line)(b == ex, "defaultSelected = %x, expected %x\n", b, ex); +} + +#define test_option_put_defaultSelected(o, s) _test_option_put_defaultSelected(__LINE__,o,s) +static void _test_option_put_defaultSelected(unsigned line, IHTMLOptionElement *option, VARIANT_BOOL b) +{ + HRESULT hres; + hres = IHTMLOptionElement_put_defaultSelected(option, b); + ok_(__FILE__,line)(hres == S_OK, "put_defaultSelected failed: %08x\n", hres); + _test_option_defaultSelected(line, option, b); +} + #define test_textarea_value(t,v) _test_textarea_value(__LINE__,t,v) static void _test_textarea_value(unsigned line, IUnknown *unk, const char *exval) { @@ -4481,6 +4501,8 @@ static void test_create_option_elem(IHTMLDocument2 *doc) test_option_put_value(option, "new value"); test_option_put_selected(option, VARIANT_TRUE); test_option_put_selected(option, VARIANT_FALSE); + test_option_put_defaultSelected(option, VARIANT_TRUE); + test_option_put_defaultSelected(option, VARIANT_FALSE); IHTMLOptionElement_Release(option); }