Jacek Caban : mshtml: Added get_styleSheets implementation.
Alexandre Julliard
julliard at winehq.org
Wed Sep 19 08:16:25 CDT 2007
Module: wine
Branch: master
Commit: ebd918eb485d98f962276cfe75f765275a34cb6b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ebd918eb485d98f962276cfe75f765275a34cb6b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 19 13:09:35 2007 +0200
mshtml: Added get_styleSheets implementation.
---
dlls/mshtml/htmldoc.c | 36 +++++++++-
dlls/mshtml/htmlstylesheet.c | 152 +++++++++++++++++++++++++++++++++++++++++-
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/nsiface.idl | 22 ++++++
4 files changed, 207 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 5e9f0ff..5ef1e13 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -951,10 +951,40 @@ static HRESULT WINAPI HTMLDocument_get_parentWindow(IHTMLDocument2 *iface, IHTML
}
static HRESULT WINAPI HTMLDocument_get_styleSheets(IHTMLDocument2 *iface,
- IHTMLStyleSheetsCollection **p)
+ IHTMLStyleSheetsCollection **p)
{
- FIXME("(%p)->(%p)\n", iface, p);
- return E_NOTIMPL;
+ HTMLDocument *This = HTMLDOC_THIS(iface);
+ nsIDOMStyleSheetList *nsstylelist;
+ nsIDOMDocumentStyle *nsdocstyle;
+ nsIDOMDocument *nsdoc;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ *p = NULL;
+
+ if(!This->nscontainer)
+ return S_OK;
+
+ nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
+ if(NS_FAILED(nsres)) {
+ ERR("GetDocument failed: %08x\n", nsres);
+ return S_OK;
+ }
+
+ if(NS_FAILED(nsres) || !nsdoc)
+ return S_OK;
+
+ nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMDocumentStyle, (void**)&nsdocstyle);
+ nsIDOMDocument_Release(nsdoc);
+
+ nsIDOMDocumentStyle_GetStyleSheets(nsdocstyle, &nsstylelist);
+ nsIDOMDocumentStyle_Release(nsdocstyle);
+
+ *p = HTMLStyleSheetsCollection_Create(nsstylelist);
+ nsIDOMDocumentStyle_Release(nsstylelist);
+
+ return S_OK;
}
static HRESULT WINAPI HTMLDocument_put_onbeforeupdate(IHTMLDocument2 *iface, VARIANT v)
diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c
index 0f0ef12..00a71f6 100644
--- a/dlls/mshtml/htmlstylesheet.c
+++ b/dlls/mshtml/htmlstylesheet.c
@@ -41,7 +41,157 @@ typedef struct {
LONG ref;
} HTMLStyleSheet;
-#define HTMLSTYLESHEET(x) ((IHTMLStyleSheet*) &(x)->lpHTMLStyleSheetVtbl);
+typedef struct {
+ const IHTMLStyleSheetsCollectionVtbl *lpHTMLStyleSheetsCollectionVtbl;
+
+ LONG ref;
+
+ nsIDOMStyleSheetList *nslist;
+} HTMLStyleSheetsCollection;
+
+#define HTMLSTYLESHEET(x) ((IHTMLStyleSheet*) &(x)->lpHTMLStyleSheetVtbl);
+#define HTMLSTYLESHEETSCOL(x) ((IHTMLStyleSheetsCollection*) &(x)->lpHTMLStyleSheetsCollectionVtbl);
+
+#define HTMLSTYLESHEETSCOL_THIS(iface) \
+ DEFINE_THIS(HTMLStyleSheetsCollection, HTMLStyleSheetsCollection, iface)
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_QueryInterface(IHTMLStyleSheetsCollection *iface,
+ REFIID riid, void **ppv)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+
+ *ppv = NULL;
+
+ if(IsEqualGUID(&IID_IUnknown, riid)) {
+ TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
+ *ppv = HTMLSTYLESHEETSCOL(This);
+ }else if(IsEqualGUID(&IID_IDispatch, riid)) {
+ TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
+ *ppv = HTMLSTYLESHEETSCOL(This);
+ }else if(IsEqualGUID(&IID_IHTMLStyleSheetsCollection, riid)) {
+ TRACE("(%p)->(IID_IHTMLStyleSheetsCollection %p)\n", This, ppv);
+ *ppv = HTMLSTYLESHEETSCOL(This);
+ }
+
+ if(*ppv) {
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+ }
+
+ WARN("unsupported %s\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI HTMLStyleSheetsCollection_AddRef(IHTMLStyleSheetsCollection *iface)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ LONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI HTMLStyleSheetsCollection_Release(IHTMLStyleSheetsCollection *iface)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ LONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p) ref=%d\n", This, ref);
+
+ if(!ref)
+ mshtml_free(This);
+
+ return ref;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_GetTypeInfoCount(IHTMLStyleSheetsCollection *iface,
+ UINT *pctinfo)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, pctinfo);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_GetTypeInfo(IHTMLStyleSheetsCollection *iface,
+ UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_GetIDsOfNames(IHTMLStyleSheetsCollection *iface,
+ REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
+ lcid, rgDispId);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_Invoke(IHTMLStyleSheetsCollection *iface,
+ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
+ VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_get_length(IHTMLStyleSheetsCollection *iface,
+ long *p)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, p);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_get__newEnum(IHTMLStyleSheetsCollection *iface,
+ IUnknown **p)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%p)\n", This, p);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection *iface,
+ VARIANT *pvarIndex, VARIANT *pvarResult)
+{
+ HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
+ FIXME("(%p)->(%p %p)\n", This, pvarIndex, pvarResult);
+ return E_NOTIMPL;
+}
+
+#undef HTMLSTYLESHEETSCOL_THIS
+
+static const IHTMLStyleSheetsCollectionVtbl HTMLStyleSheetsCollectionVtbl = {
+ HTMLStyleSheetsCollection_QueryInterface,
+ HTMLStyleSheetsCollection_AddRef,
+ HTMLStyleSheetsCollection_Release,
+ HTMLStyleSheetsCollection_GetTypeInfoCount,
+ HTMLStyleSheetsCollection_GetTypeInfo,
+ HTMLStyleSheetsCollection_GetIDsOfNames,
+ HTMLStyleSheetsCollection_Invoke,
+ HTMLStyleSheetsCollection_get_length,
+ HTMLStyleSheetsCollection_get__newEnum,
+ HTMLStyleSheetsCollection_item
+};
+
+IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList *nslist)
+{
+ HTMLStyleSheetsCollection *ret = mshtml_alloc(sizeof(HTMLStyleSheetsCollection));
+
+ ret->lpHTMLStyleSheetsCollectionVtbl = &HTMLStyleSheetsCollectionVtbl;
+ ret->ref = 1;
+
+ if(nslist)
+ nsIDOMStyleSheetList_AddRef(nslist);
+ ret->nslist = nslist;
+
+ return HTMLSTYLESHEETSCOL(ret);
+}
#define HTMLSTYLESHEET_THIS(iface) DEFINE_THIS(HTMLStyleSheet, HTMLStyleSheet, iface)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index e560ef1..b07476f 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -406,6 +406,7 @@ IHTMLSelectionObject *HTMLSelectionObject_Create(HTMLDocument*,nsISelection*);
IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument*,nsIDOMRange*);
IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration*);
IHTMLStyleSheet *HTMLStyleSheet_Create(void);
+IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList*);
void detach_selection(HTMLDocument*);
void detach_ranges(HTMLDocument*);
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index 4a3347d..c79b17e 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -123,6 +123,7 @@ typedef nsISupports nsIPrincipal;
typedef nsISupports nsIAtom;
typedef nsISupports nsISupportsArray;
typedef nsISupports nsIContentFilter;
+typedef nsISupports nsIDOMStyleSheet;
[
object,
@@ -571,6 +572,17 @@ interface nsIDOMCSSStyleDeclaration : nsISupports
[
object,
+ uuid(a6cf9081-15b3-11d2-932e-00805f8add32)
+ /* FROZEN */
+]
+interface nsIDOMStyleSheetList : nsISupports
+{
+ nsresult GetLength(PRUint32 *aLength);
+ nsresult Item(PRUint32 index, nsIDOMStyleSheet **_retval);
+}
+
+[
+ object,
uuid(a6cf907d-15b3-11d2-932e-00805f8add32)
/* FROZEN */
]
@@ -824,6 +836,16 @@ interface nsIDOMHTMLDocument : nsIDOMDocument
[
object,
+ uuid(3d9f4973-dd2e-48f5-b5f7-2634e09eadd9)
+ /* FROZEN */
+]
+interface nsIDOMDocumentStyle : nsISupports
+{
+ nsresult GetStyleSheets(nsIDOMStyleSheetList **aStyleSheets);
+}
+
+[
+ object,
uuid(a6cf90ce-15b3-11d2-932e-00805f8add32)
/* FROZEN */
]
More information about the wine-cvs
mailing list