Jacek Caban : mshtml: Added IHTMLObjectElement::get_vspace implementation.
Alexandre Julliard
julliard at winehq.org
Fri Nov 12 11:22:35 CST 2010
Module: wine
Branch: master
Commit: 6e796da74852e58c25c0642dca5340ab617dc312
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6e796da74852e58c25c0642dca5340ab617dc312
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Nov 12 12:30:49 2010 +0100
mshtml: Added IHTMLObjectElement::get_vspace implementation.
---
dlls/mshtml/htmlobject.c | 26 ++++++++++++++++++++++++--
dlls/mshtml/nsiface.idl | 45 +++++++++++++++++++++++++++++++++++++++++++++
dlls/mshtml/tests/dom.c | 34 +++++++++++++++++++++++++++++++++-
3 files changed, 102 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c
index 09890cb..2af4faa 100644
--- a/dlls/mshtml/htmlobject.c
+++ b/dlls/mshtml/htmlobject.c
@@ -36,6 +36,8 @@ typedef struct {
HTMLElement element;
const IHTMLObjectElementVtbl *lpIHTMLObjectElementVtbl;
+
+ nsIDOMHTMLObjectElement *nsobject;
} HTMLObjectElement;
#define HTMLOBJECT(x) (&(x)->lpIHTMLObjectElementVtbl)
@@ -314,8 +316,19 @@ static HRESULT WINAPI HTMLObjectElement_put_vspace(IHTMLObjectElement *iface, LO
static HRESULT WINAPI HTMLObjectElement_get_vspace(IHTMLObjectElement *iface, LONG *p)
{
HTMLObjectElement *This = HTMLOBJECT_THIS(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ PRInt32 vspace;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ nsres = nsIDOMHTMLObjectElement_GetVspace(This->nsobject, &vspace);
+ if(NS_FAILED(nsres)) {
+ ERR("GetVspace failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ *p = vspace;
+ return S_OK;
}
static HRESULT WINAPI HTMLObjectElement_put_hspace(IHTMLObjectElement *iface, LONG v)
@@ -405,6 +418,9 @@ static void HTMLObjectElement_destructor(HTMLDOMNode *iface)
{
HTMLObjectElement *This = HTMLOBJECT_NODE_THIS(iface);
+ if(This->nsobject)
+ nsIDOMHTMLObjectElement_Release(This->nsobject);
+
HTMLElement_destructor(&This->element.node);
}
@@ -430,10 +446,16 @@ static dispex_static_data_t HTMLObjectElement_dispex = {
HTMLElement *HTMLObjectElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem)
{
HTMLObjectElement *ret = heap_alloc_zero(sizeof(*ret));
+ nsresult nsres;
ret->lpIHTMLObjectElementVtbl = &HTMLObjectElementVtbl;
ret->element.node.vtbl = &HTMLObjectElementImplVtbl;
HTMLElement_Init(&ret->element, doc, nselem, &HTMLObjectElement_dispex);
+
+ nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLObjectElement, (void**)&ret->nsobject);
+ if(NS_FAILED(nsres))
+ ERR("Could not get nsIDOMHTMLObjectElement iface: %08x\n", nsres);
+
return &ret->element;
}
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index c7aaf88..0d82d7c 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -1640,6 +1640,51 @@ interface nsIDOMHTMLFrameElement : nsIDOMHTMLElement
[
object,
+ uuid(a6cf90ac-15b3-11d2-932e-00805f8add32),
+ local
+]
+interface nsIDOMHTMLObjectElement : nsIDOMHTMLElement
+{
+ nsresult GetForm(nsIDOMHTMLFormElement **aForm);
+ nsresult GetCode(nsAString *aCode);
+ nsresult SetCode(const nsAString *aCode);
+ nsresult GetAlign(nsAString *aAlign);
+ nsresult SetAlign(const nsAString *aAlign);
+ nsresult GetArchive(nsAString *aArchive);
+ nsresult SetArchive(const nsAString *aArchive);
+ nsresult GetBorder(nsAString *aBorder);
+ nsresult SetBorder(const nsAString *aBorder);
+ nsresult GetCodeBase(nsAString *aCodeBase);
+ nsresult SetCodeBase(const nsAString *aCodeBase);
+ nsresult GetCodeType(nsAString *aCodeType);
+ nsresult SetCodeType(const nsAString *aCodeType);
+ nsresult GetData(nsAString *aData);
+ nsresult SetData(const nsAString *aData);
+ nsresult GetDeclare(PRBool *aDeclare);
+ nsresult SetDeclare(PRBool aDeclare);
+ nsresult GetHeight(nsAString *aHeight);
+ nsresult SetHeight(const nsAString *aHeight);
+ nsresult GetHspace(PRInt32 *aHspace);
+ nsresult SetHspace(PRInt32 aHspace);
+ nsresult GetName(nsAString *aName);
+ nsresult SetName(const nsAString *aName);
+ nsresult GetStandby(nsAString *aStandby);
+ nsresult SetStandby(const nsAString *aStandby);
+ nsresult GetTabIndex(PRInt32 *aTabIndex);
+ nsresult SetTabIndex(PRInt32 aTabIndex);
+ nsresult GetType(nsAString *aType);
+ nsresult SetType(const nsAString *aType);
+ nsresult GetUseMap(nsAString *aUseMap);
+ nsresult SetUseMap(const nsAString *aUseMap);
+ nsresult GetVspace(PRInt32 *aVspace);
+ nsresult SetVspace(PRInt32 aVspace);
+ nsresult GetWidth(nsAString *aWidth);
+ nsresult SetWidth(const nsAString *aWidth);
+ nsresult GetContentDocument(nsIDOMDocument **aContentDocument);
+}
+
+[
+ object,
uuid(94928ab3-8b63-11d3-989d-001083010e9b),
local
]
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index c1110ba..9ba45ce 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -48,7 +48,7 @@ static const char elem_test_str[] =
"<textarea id=\"X\">text text</textarea>"
"<table id=\"tbl\"><tbody><tr></tr><tr id=\"row2\"><td>td1 text</td><td>td2 text</td></tr></tbody></table>"
"<script id=\"sc\" type=\"text/javascript\"><!--\nfunction Testing() {}\n// -->\n</script>"
- "<test /><object></object><embed />"
+ "<test /><object id=\"objid\" vspace=100></object><embed />"
"<img id=\"imgid\" name=\"WineImg\"/>"
"<iframe src=\"about:blank\" id=\"ifr\"></iframe>"
"<form id=\"frm\"></form>"
@@ -756,6 +756,17 @@ static IHTMLCommentElement *_get_comment_iface(unsigned line, IUnknown *unk)
return comment;
}
+#define get_object_iface(u) _get_object_iface(__LINE__,u)
+static IHTMLObjectElement *_get_object_iface(unsigned line, IUnknown *unk)
+{
+ IHTMLObjectElement *obj;
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IHTMLObjectElement, (void**)&obj);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLObjectElement: %08x\n", hres);
+ return obj;
+}
+
#define test_node_name(u,n) _test_node_name(__LINE__,u,n)
static void _test_node_name(unsigned line, IUnknown *unk, const char *exname)
{
@@ -1284,6 +1295,20 @@ static void _test_comment_text(unsigned line, IUnknown *unk, const char *extext)
SysFreeString(text);
}
+#define test_object_vspace(u,s) _test_object_vspace(__LINE__,u,s)
+static void _test_object_vspace(unsigned line, IUnknown *unk, LONG exl)
+{
+ IHTMLObjectElement *object = _get_object_iface(line, unk);
+ LONG l;
+ HRESULT hres;
+
+ l = 0xdeadbeef;
+ hres = IHTMLObjectElement_get_vspace(object, &l);
+ ok_(__FILE__,line)(hres == S_OK, "get_vspace failed: %08x\n", hres);
+ ok_(__FILE__,line)(l == exl, "vspace=%d, expected %d\n", l, exl);
+ IHTMLObjectElement_Release(object);
+}
+
#define create_option_elem(d,t,v) _create_option_elem(__LINE__,d,t,v)
static IHTMLOptionElement *_create_option_elem(unsigned line, IHTMLDocument2 *doc,
const char *txt, const char *val)
@@ -6224,6 +6249,13 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
}
+ elem = get_doc_elem_by_id(doc, "objid");
+ ok(elem != NULL, "elem == NULL\n");
+ if(elem) {
+ test_object_vspace((IUnknown*)elem, 100);
+ IHTMLElement_Release(elem);
+ }
+
elem = get_elem_by_id(doc, "a", TRUE);
if(elem) {
test_anchor_href((IUnknown*)elem, "http://test/");
More information about the wine-cvs
mailing list