Jacek Caban : mshtml: Added IHTMLTitleElement stub implementation.

Alexandre Julliard julliard at winehq.org
Tue Jun 21 12:25:43 CDT 2011


Module: wine
Branch: master
Commit: ff7e0417164f7267bcdb0c3296218c83cf6d7865
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ff7e0417164f7267bcdb0c3296218c83cf6d7865

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jun 21 13:48:00 2011 +0200

mshtml: Added IHTMLTitleElement stub implementation.

---

 dlls/mshtml/htmlelem.c       |    2 +
 dlls/mshtml/htmlhead.c       |  144 ++++++++++++++++++++++++++++++++++++++++++
 dlls/mshtml/mshtml_private.h |    1 +
 dlls/mshtml/tests/dom.c      |    9 +++-
 4 files changed, 155 insertions(+), 1 deletions(-)

diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 24d7b08..40c8ff5 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -53,6 +53,7 @@ static const WCHAR selectW[]   = {'S','E','L','E','C','T',0};
 static const WCHAR styleW[]    = {'S','T','Y','L','E',0};
 static const WCHAR tableW[]    = {'T','A','B','L','E',0};
 static const WCHAR textareaW[] = {'T','E','X','T','A','R','E','A',0};
+static const WCHAR title_tagW[]= {'T','I','T','L','E',0};
 static const WCHAR trW[]       = {'T','R',0};
 
 typedef struct {
@@ -77,6 +78,7 @@ static const tag_desc_t tag_descs[] = {
     {styleW,     HTMLStyleElement_Create},
     {tableW,     HTMLTable_Create},
     {textareaW,  HTMLTextAreaElement_Create},
+    {title_tagW, HTMLTitleElement_Create},
     {trW,        HTMLTableRow_Create}
 };
 
diff --git a/dlls/mshtml/htmlhead.c b/dlls/mshtml/htmlhead.c
index eacbcd4..181d0dd 100644
--- a/dlls/mshtml/htmlhead.c
+++ b/dlls/mshtml/htmlhead.c
@@ -34,6 +34,150 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 typedef struct {
     HTMLElement element;
 
+    IHTMLTitleElement IHTMLTitleElement_iface;
+} HTMLTitleElement;
+
+static inline HTMLTitleElement *impl_from_IHTMLTitleElement(IHTMLTitleElement *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLTitleElement, IHTMLTitleElement_iface);
+}
+
+static HRESULT WINAPI HTMLTitleElement_QueryInterface(IHTMLTitleElement *iface,
+                                                         REFIID riid, void **ppv)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv);
+}
+
+static ULONG WINAPI HTMLTitleElement_AddRef(IHTMLTitleElement *iface)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IHTMLDOMNode_AddRef(&This->element.node.IHTMLDOMNode_iface);
+}
+
+static ULONG WINAPI HTMLTitleElement_Release(IHTMLTitleElement *iface)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface);
+}
+
+static HRESULT WINAPI HTMLTitleElement_GetTypeInfoCount(IHTMLTitleElement *iface, UINT *pctinfo)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI HTMLTitleElement_GetTypeInfo(IHTMLTitleElement *iface, UINT iTInfo,
+        LCID lcid, ITypeInfo **ppTInfo)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
+            ppTInfo);
+}
+
+static HRESULT WINAPI HTMLTitleElement_GetIDsOfNames(IHTMLTitleElement *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
+            cNames, lcid, rgDispId);
+}
+
+static HRESULT WINAPI HTMLTitleElement_Invoke(IHTMLTitleElement *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+        VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+
+    return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
+            lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI HTMLTitleElement_put_text(IHTMLTitleElement *iface, BSTR v)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLTitleElement_get_text(IHTMLTitleElement *iface, BSTR *p)
+{
+    HTMLTitleElement *This = impl_from_IHTMLTitleElement(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IHTMLTitleElementVtbl HTMLTitleElementVtbl = {
+    HTMLTitleElement_QueryInterface,
+    HTMLTitleElement_AddRef,
+    HTMLTitleElement_Release,
+    HTMLTitleElement_GetTypeInfoCount,
+    HTMLTitleElement_GetTypeInfo,
+    HTMLTitleElement_GetIDsOfNames,
+    HTMLTitleElement_Invoke,
+    HTMLTitleElement_put_text,
+    HTMLTitleElement_get_text
+};
+
+static inline HTMLTitleElement *HTMLTitleElement_from_HTMLDOMNode(HTMLDOMNode *iface)
+{
+    return CONTAINING_RECORD(iface, HTMLTitleElement, element.node);
+}
+
+static HRESULT HTMLTitleElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
+{
+    HTMLTitleElement *This = HTMLTitleElement_from_HTMLDOMNode(iface);
+
+    if(IsEqualGUID(&IID_IHTMLTitleElement, riid)) {
+        TRACE("(%p)->(IID_IHTMLTitleElement %p)\n", This, ppv);
+        *ppv = &This->IHTMLTitleElement_iface;
+    }else {
+        return HTMLElement_QI(&This->element.node, riid, ppv);
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
+}
+
+static void HTMLTitleElement_destructor(HTMLDOMNode *iface)
+{
+    HTMLTitleElement *This = HTMLTitleElement_from_HTMLDOMNode(iface);
+
+    HTMLElement_destructor(&This->element.node);
+}
+
+static const NodeImplVtbl HTMLTitleElementImplVtbl = {
+    HTMLTitleElement_QI,
+    HTMLTitleElement_destructor,
+    HTMLElement_clone,
+};
+
+HRESULT HTMLTitleElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem)
+{
+    HTMLTitleElement *ret;
+
+    ret = heap_alloc_zero(sizeof(*ret));
+    if(!ret)
+        return E_OUTOFMEMORY;
+
+    ret->IHTMLTitleElement_iface.lpVtbl = &HTMLTitleElementVtbl;
+    ret->element.node.vtbl = &HTMLTitleElementImplVtbl;
+
+    HTMLElement_Init(&ret->element, doc, nselem, NULL);
+
+    *elem = &ret->element;
+    return S_OK;
+}
+
+typedef struct {
+    HTMLElement element;
+
     IHTMLHeadElement IHTMLHeadElement_iface;
 } HTMLHeadElement;
 
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 0b0b6b0..1e6b139 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -793,6 +793,7 @@ HRESULT HTMLSelectElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElemen
 HRESULT HTMLTable_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
 HRESULT HTMLTableRow_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
 HRESULT HTMLTextAreaElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
+HRESULT HTMLTitleElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
 HRESULT HTMLGenericElement_Create(HTMLDocumentNode*,nsIDOMHTMLElement*,HTMLElement**) DECLSPEC_HIDDEN;
 
 void HTMLDOMNode_Init(HTMLDocumentNode*,HTMLDOMNode*,nsIDOMNode*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index a637a3f..da890a0 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -288,6 +288,13 @@ static const IID * const head_iids[] = {
     NULL
 };
 
+static const IID * const title_iids[] = {
+    ELEM_IFACES,
+    &IID_IHTMLTitleElement,
+    &IID_IConnectionPointContainer,
+    NULL
+};
+
 static const IID * const object_iids[] = {
     ELEM_IFACES,
     &IID_IHTMLObjectElement,
@@ -369,7 +376,7 @@ static const elem_type_info_t elem_type_infos[] = {
     {"",          none_iids,        NULL},
     {"HTML",      elem_iids,        NULL},
     {"HEAD",      head_iids,        &DIID_DispHTMLHeadElement},
-    {"TITLE",     elem_iids,        NULL},
+    {"TITLE",     title_iids,       NULL},
     {"BODY",      body_iids,        &DIID_DispHTMLBody},
     {"A",         anchor_iids,      &DIID_DispHTMLAnchorElement},
     {"INPUT",     input_iids,       &DIID_DispHTMLInputElement},




More information about the wine-cvs mailing list