diff --git a/dlls/mshtml/htmltable.c b/dlls/mshtml/htmltable.c
index 0f6433067a..e7991daccc 100644
--- a/dlls/mshtml/htmltable.c
+++ b/dlls/mshtml/htmltable.c
@@ -869,15 +869,35 @@ static HRESULT WINAPI HTMLTable3_Invoke(IHTMLTable3 *iface, DISPID dispIdMember,
static HRESULT WINAPI HTMLTable3_put_summary(IHTMLTable3 *iface, BSTR v)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_w(v));
- return E_NOTIMPL;
+ nsAString str;
+ nsresult nsres;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_w(v));
+
+ nsAString_InitDepend(&str, v);
+
+ nsres = nsIDOMHTMLTableElement_SetSummary(This->nstable, &str);
+
+ nsAString_Finish(&str);
+ if (NS_FAILED(nsres)) {
+ ERR("Set summary(%s) failed: %08x\n", debugstr_w(v), nsres);
+ return E_FAIL;
+ }
+ return S_OK;
}
static HRESULT WINAPI HTMLTable3_get_summary(IHTMLTable3 *iface, BSTR * p)
{
HTMLTable *This = impl_from_IHTMLTable3(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsAString str;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ nsAString_Init(&str, NULL);
+ nsres = nsIDOMHTMLTableElement_GetSummary(This->nstable, &str);
+
+ return return_nsstr(nsres, &str, p);
}
static const IHTMLTable3Vtbl HTMLTable3Vtbl = {
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 941e87b828..532bbfb8c6 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -5930,6 +5930,7 @@ static void test_table_elem(IHTMLElement *elem)
{
IHTMLElementCollection *col;
IHTMLTable *table;
+ IHTMLTable3 *table3;
IHTMLDOMNode *node;
VARIANT v;
HRESULT hres;
@@ -5945,6 +5946,11 @@ static void test_table_elem(IHTMLElement *elem)
if(FAILED(hres))
return;
+ hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLTable3, (void**)&table3);
+ ok(hres == S_OK, "Could not get IHTMLTable3 iface: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
col = NULL;
hres = IHTMLTable_get_rows(table, &col);
ok(hres == S_OK, "get_rows failed: %08x\n", hres);
@@ -6082,6 +6088,17 @@ static void test_table_elem(IHTMLElement *elem)
ok(!strcmp_wa(V_BSTR(&v), "11"), "Expected 11, got %s\n", wine_dbgstr_w(V_BSTR(&v)));
VariantClear(&v);
+ bstr = a2bstr("summary");
+ hres = IHTMLTable3_put_summary(table3, bstr);
+ ok(hres == S_OK, "put_summary = %08x\n", hres);
+ SysFreeString(bstr);
+
+ hres = IHTMLTable3_get_summary(table3, &bstr);
+ ok(hres == S_OK, "get_summary = %08x\n", hres);
+ ok(!strcmp_wa(bstr, "summary"), "Expected summary, got %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+
+ IHTMLTable3_Release(table3);
IHTMLTable_Release(table);
}