Andrew Eikum : mshtml: Implement IHTMLFrameBase::get_name.
Alexandre Julliard
julliard at winehq.org
Tue Dec 8 11:10:40 CST 2009
Module: wine
Branch: master
Commit: 578881f600e20fbef51df2fdebc5ea641de6f24f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=578881f600e20fbef51df2fdebc5ea641de6f24f
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Mon Dec 7 16:28:12 2009 -0600
mshtml: Implement IHTMLFrameBase::get_name.
---
dlls/mshtml/htmlframebase.c | 38 ++++++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/dom.c | 34 +++++++++++++++++++++++++++-------
2 files changed, 63 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c
index 47aa9fb..7174298 100644
--- a/dlls/mshtml/htmlframebase.c
+++ b/dlls/mshtml/htmlframebase.c
@@ -149,8 +149,42 @@ static HRESULT WINAPI HTMLFrameBase_put_name(IHTMLFrameBase *iface, BSTR v)
static HRESULT WINAPI HTMLFrameBase_get_name(IHTMLFrameBase *iface, BSTR *p)
{
HTMLFrameBase *This = HTMLFRAMEBASE_THIS(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ nsAString nsstr;
+ const PRUnichar *strdata;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if(This->nsframe) {
+ nsAString_Init(&nsstr, NULL);
+ nsres = nsIDOMHTMLFrameElement_GetName(This->nsframe, &nsstr);
+ }else if(This->nsiframe) {
+ nsAString_Init(&nsstr, NULL);
+ nsres = nsIDOMHTMLIFrameElement_GetName(This->nsiframe, &nsstr);
+ }else {
+ ERR("No attached ns frame object\n");
+ return E_UNEXPECTED;
+ }
+
+ if(NS_FAILED(nsres)) {
+ ERR("GetName failed: 0x%08x\n", nsres);
+ nsAString_Finish(&nsstr);
+ return E_FAIL;
+ }
+
+ nsAString_GetData(&nsstr, &strdata);
+ if(*strdata) {
+ *p = SysAllocString(strdata);
+ if(!*p) {
+ nsAString_Finish(&nsstr);
+ return E_OUTOFMEMORY;
+ }
+ }else
+ *p = NULL;
+
+ nsAString_Finish(&nsstr);
+
+ return S_OK;
}
static HRESULT WINAPI HTMLFrameBase_put_border(IHTMLFrameBase *iface, VARIANT v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 0ede169..1c970c8 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -65,8 +65,9 @@ static const char cond_comment_str[] =
"<!--[if gte IE 4]> <br> <![endif]-->"
"</body></html>";
static const char frameset_str[] =
- "<html><head><title>frameset test</title></head><frameset rows=\"28, *\">"
+ "<html><head><title>frameset test</title></head><frameset rows=\"25, 25, *\">"
"<frame src=\"about:blank\" name=\"nm1\" id=\"fr1\"><frame src=\"about:blank\" name=\"nm2\" id=\"fr2\">"
+ "<frame src=\"about:blank\" id=\"fr3\">"
"</frameset></html>";
static WCHAR characterW[] = {'c','h','a','r','a','c','t','e','r',0};
@@ -5918,7 +5919,7 @@ static void test_frameset(IHTMLDocument2 *doc)
/* test result length */
hres = IHTMLFramesCollection2_get_length(frames, &length);
ok(hres == S_OK, "IHTMLFramesCollection2_get_length failed: 0x%08x\n", hres);
- ok(length == 2, "IHTMLFramesCollection2_get_length should have been 2, was: %d\n", length);
+ ok(length == 3, "IHTMLFramesCollection2_get_length should have been 3, was: %d\n", length);
/* test first frame */
V_VT(&index_var) = VT_I4;
@@ -5941,8 +5942,8 @@ static void test_frameset(IHTMLDocument2 *doc)
}
VariantClear(&result_var);
- /* fail on third frame */
- V_I4(&index_var) = 2;
+ /* fail on next frame */
+ V_I4(&index_var) = 3;
hres = IHTMLFramesCollection2_item(frames, &index_var, &result_var);
ok(hres == DISP_E_MEMBERNOTFOUND, "IHTMLFramesCollection2_item should have"
"failed with DISP_E_MEMBERNOTFOUND, instead: 0x%08x\n", hres);
@@ -5975,7 +5976,7 @@ static void test_frameset(IHTMLDocument2 *doc)
/* test result length */
hres = IHTMLWindow2_get_length(window, &length);
ok(hres == S_OK, "IHTMLWindow2_get_length failed: 0x%08x\n", hres);
- ok(length == 2, "IHTMLWindow2_get_length should have been 2, was: %d\n", length);
+ ok(length == 3, "IHTMLWindow2_get_length should have been 3, was: %d\n", length);
/* test first frame */
V_VT(&index_var) = VT_I4;
@@ -5998,8 +5999,8 @@ static void test_frameset(IHTMLDocument2 *doc)
}
VariantClear(&result_var);
- /* fail on third frame */
- V_I4(&index_var) = 2;
+ /* fail on next frame */
+ V_I4(&index_var) = 3;
hres = IHTMLWindow2_item(window, &index_var, &result_var);
ok(hres == DISP_E_MEMBERNOTFOUND, "IHTMLWindow2_item should have"
"failed with DISP_E_MEMBERNOTFOUND, instead: 0x%08x\n", hres);
@@ -6059,6 +6060,25 @@ static void test_frameset(IHTMLDocument2 *doc)
ok(!strcmp_wa(str, "no"), "get_scrolling should have given 'no', gave: %s\n", wine_dbgstr_w(str));
SysFreeString(str);
+ /* get_name */
+ hres = IHTMLFrameBase_get_name(fbase, &str);
+ ok(hres == S_OK, "IHTMLFrameBase_get_name failed: 0x%08x\n", hres);
+ ok(!strcmp_wa(str, "nm1"), "get_name should have given 'nm1', gave: %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ IHTMLFrameBase_Release(fbase);
+ IHTMLElement_Release(elem);
+
+ /* get_name with no name attr */
+ elem = get_doc_elem_by_id(doc, "fr3");
+ hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFrameBase, (void**)&fbase);
+ ok(hres == S_OK, "Could not get IHTMLFrameBase interface: 0x%08x\n", hres);
+
+ hres = IHTMLFrameBase_get_name(fbase, &str);
+ ok(hres == S_OK, "IHTMLFrameBase_get_name failed: 0x%08x\n", hres);
+ ok(str == NULL, "get_name should have given 'null', gave: %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
IHTMLFrameBase_Release(fbase);
IHTMLElement_Release(elem);
}
More information about the wine-cvs
mailing list