2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "mshtml_private.h"
21 struct HTMLStyleSheet
{
23 IHTMLStyleSheet IHTMLStyleSheet_iface
;
27 nsIDOMCSSStyleSheet
*nsstylesheet
;
30 struct HTMLStyleSheetsCollection
{
32 IHTMLStyleSheetsCollection IHTMLStyleSheetsCollection_iface
;
36 nsIDOMStyleSheetList
*nslist
;
39 struct HTMLStyleSheetRulesCollection
{
41 IHTMLStyleSheetRulesCollection IHTMLStyleSheetRulesCollection_iface
;
45 nsIDOMCSSRuleList
*nslist
;
48 static inline HTMLStyleSheetRulesCollection
*impl_from_IHTMLStyleSheetRulesCollection(IHTMLStyleSheetRulesCollection
*iface
)
50 return CONTAINING_RECORD(iface
, HTMLStyleSheetRulesCollection
, IHTMLStyleSheetRulesCollection_iface
);
53 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_QueryInterface(IHTMLStyleSheetRulesCollection
*iface
,
54 REFIID riid
, void **ppv
)
56 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
58 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
60 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
61 *ppv
= &This
->IHTMLStyleSheetRulesCollection_iface
;
62 }else if(IsEqualGUID(&IID_IHTMLStyleSheetRulesCollection
, riid
)) {
63 *ppv
= &This
->IHTMLStyleSheetRulesCollection_iface
;
64 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
65 return *ppv
? S_OK
: E_NOINTERFACE
;
68 FIXME("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
72 IUnknown_AddRef((IUnknown
*)*ppv
);
76 static ULONG WINAPI
HTMLStyleSheetRulesCollection_AddRef(IHTMLStyleSheetRulesCollection
*iface
)
78 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
79 LONG ref
= InterlockedIncrement(&This
->ref
);
81 TRACE("(%p) ref=%d\n", This
, ref
);
86 static ULONG WINAPI
HTMLStyleSheetRulesCollection_Release(IHTMLStyleSheetRulesCollection
*iface
)
88 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
89 LONG ref
= InterlockedDecrement(&This
->ref
);
91 TRACE("(%p) ref=%d\n", This
, ref
);
94 release_dispex(&This
->dispex
);
96 nsIDOMCSSRuleList_Release(This
->nslist
);
103 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_GetTypeInfoCount(
104 IHTMLStyleSheetRulesCollection
*iface
, UINT
*pctinfo
)
106 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
107 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
110 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_GetTypeInfo(IHTMLStyleSheetRulesCollection
*iface
,
111 UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
113 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
114 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
117 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_GetIDsOfNames(IHTMLStyleSheetRulesCollection
*iface
,
118 REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
120 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
121 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
125 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_Invoke(IHTMLStyleSheetRulesCollection
*iface
,
126 DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
127 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
129 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
130 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
,
131 pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
134 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_get_length(IHTMLStyleSheetRulesCollection
*iface
,
137 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
140 TRACE("(%p)->(%p)\n", This
, p
);
145 nsres
= nsIDOMCSSRuleList_GetLength(This
->nslist
, &len
);
147 ERR("GetLength failed: %08x\n", nsres
);
154 static HRESULT WINAPI
HTMLStyleSheetRulesCollection_item(IHTMLStyleSheetRulesCollection
*iface
,
155 LONG index
, IHTMLStyleSheetRule
**ppHTMLStyleSheetRule
)
157 HTMLStyleSheetRulesCollection
*This
= impl_from_IHTMLStyleSheetRulesCollection(iface
);
158 FIXME("(%p)->(%d %p)\n", This
, index
, ppHTMLStyleSheetRule
);
162 static const IHTMLStyleSheetRulesCollectionVtbl HTMLStyleSheetRulesCollectionVtbl
= {
163 HTMLStyleSheetRulesCollection_QueryInterface
,
164 HTMLStyleSheetRulesCollection_AddRef
,
165 HTMLStyleSheetRulesCollection_Release
,
166 HTMLStyleSheetRulesCollection_GetTypeInfoCount
,
167 HTMLStyleSheetRulesCollection_GetTypeInfo
,
168 HTMLStyleSheetRulesCollection_GetIDsOfNames
,
169 HTMLStyleSheetRulesCollection_Invoke
,
170 HTMLStyleSheetRulesCollection_get_length
,
171 HTMLStyleSheetRulesCollection_item
174 static const tid_t HTMLStyleSheetRulesCollection_iface_tids
[] = {
175 IHTMLStyleSheetRulesCollection_tid
,
178 static dispex_static_data_t HTMLStyleSheetRulesCollection_dispex
= {
180 DispHTMLStyleSheetRulesCollection_tid
,
182 HTMLStyleSheetRulesCollection_iface_tids
185 static IHTMLStyleSheetRulesCollection
*HTMLStyleSheetRulesCollection_Create(nsIDOMCSSRuleList
*nslist
)
187 HTMLStyleSheetRulesCollection
*ret
;
189 ret
= heap_alloc(sizeof(*ret
));
190 ret
->IHTMLStyleSheetRulesCollection_iface
.lpVtbl
= &HTMLStyleSheetRulesCollectionVtbl
;
192 ret
->nslist
= nslist
;
194 init_dispex(&ret
->dispex
, (IUnknown
*)&ret
->IHTMLStyleSheetRulesCollection_iface
, &HTMLStyleSheetRulesCollection_dispex
);
197 nsIDOMCSSRuleList_AddRef(nslist
);
199 return &ret
->IHTMLStyleSheetRulesCollection_iface
;
202 static inline HTMLStyleSheetsCollection
*impl_from_IHTMLStyleSheetsCollection(IHTMLStyleSheetsCollection
*iface
)
204 return CONTAINING_RECORD(iface
, HTMLStyleSheetsCollection
, IHTMLStyleSheetsCollection_iface
);
207 static HRESULT WINAPI
HTMLStyleSheetsCollection_QueryInterface(IHTMLStyleSheetsCollection
*iface
,
208 REFIID riid
, void **ppv
)
210 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
212 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
214 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
215 *ppv
= &This
->IHTMLStyleSheetsCollection_iface
;
216 }else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
217 *ppv
= &This
->IHTMLStyleSheetsCollection_iface
;
218 }else if(IsEqualGUID(&IID_IHTMLStyleSheetsCollection
, riid
)) {
219 *ppv
= &This
->IHTMLStyleSheetsCollection_iface
;
220 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
221 return *ppv
? S_OK
: E_NOINTERFACE
;
224 WARN("unsupported %s\n", debugstr_mshtml_guid(riid
));
225 return E_NOINTERFACE
;
228 IUnknown_AddRef((IUnknown
*)*ppv
);
232 static ULONG WINAPI
HTMLStyleSheetsCollection_AddRef(IHTMLStyleSheetsCollection
*iface
)
234 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
235 LONG ref
= InterlockedIncrement(&This
->ref
);
237 TRACE("(%p) ref=%d\n", This
, ref
);
242 static ULONG WINAPI
HTMLStyleSheetsCollection_Release(IHTMLStyleSheetsCollection
*iface
)
244 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
245 LONG ref
= InterlockedDecrement(&This
->ref
);
247 TRACE("(%p) ref=%d\n", This
, ref
);
250 release_dispex(&This
->dispex
);
252 nsIDOMStyleSheetList_Release(This
->nslist
);
259 static HRESULT WINAPI
HTMLStyleSheetsCollection_GetTypeInfoCount(IHTMLStyleSheetsCollection
*iface
,
262 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
263 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
266 static HRESULT WINAPI
HTMLStyleSheetsCollection_GetTypeInfo(IHTMLStyleSheetsCollection
*iface
,
267 UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
269 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
270 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
273 static HRESULT WINAPI
HTMLStyleSheetsCollection_GetIDsOfNames(IHTMLStyleSheetsCollection
*iface
,
274 REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
)
276 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
277 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
,
281 static HRESULT WINAPI
HTMLStyleSheetsCollection_Invoke(IHTMLStyleSheetsCollection
*iface
,
282 DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
283 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
285 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
286 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
,
287 wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
290 static HRESULT WINAPI
HTMLStyleSheetsCollection_get_length(IHTMLStyleSheetsCollection
*iface
,
293 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
296 TRACE("(%p)->(%p)\n", This
, p
);
299 nsIDOMStyleSheetList_GetLength(This
->nslist
, &len
);
305 static HRESULT WINAPI
HTMLStyleSheetsCollection_get__newEnum(IHTMLStyleSheetsCollection
*iface
,
308 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
309 FIXME("(%p)->(%p)\n", This
, p
);
313 static HRESULT WINAPI
HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection
*iface
,
314 VARIANT
*pvarIndex
, VARIANT
*pvarResult
)
316 HTMLStyleSheetsCollection
*This
= impl_from_IHTMLStyleSheetsCollection(iface
);
318 TRACE("(%p)->(%s %p)\n", This
, debugstr_variant(pvarIndex
), pvarResult
);
320 switch(V_VT(pvarIndex
)) {
322 nsIDOMStyleSheet
*nsstylesheet
;
325 TRACE("index=%d\n", V_I4(pvarIndex
));
327 nsres
= nsIDOMStyleSheetList_Item(This
->nslist
, V_I4(pvarIndex
), &nsstylesheet
);
328 if(NS_FAILED(nsres
) || !nsstylesheet
) {
329 WARN("Item failed: %08x\n", nsres
);
330 V_VT(pvarResult
) = VT_EMPTY
;
334 V_VT(pvarResult
) = VT_DISPATCH
;
335 V_DISPATCH(pvarResult
) = (IDispatch
*)HTMLStyleSheet_Create(nsstylesheet
);
341 FIXME("id=%s not implemented\n", debugstr_w(V_BSTR(pvarResult
)));
345 WARN("Invalid index %s\n", debugstr_variant(pvarIndex
));
351 static const IHTMLStyleSheetsCollectionVtbl HTMLStyleSheetsCollectionVtbl
= {
352 HTMLStyleSheetsCollection_QueryInterface
,
353 HTMLStyleSheetsCollection_AddRef
,
354 HTMLStyleSheetsCollection_Release
,
355 HTMLStyleSheetsCollection_GetTypeInfoCount
,
356 HTMLStyleSheetsCollection_GetTypeInfo
,
357 HTMLStyleSheetsCollection_GetIDsOfNames
,
358 HTMLStyleSheetsCollection_Invoke
,
359 HTMLStyleSheetsCollection_get_length
,
360 HTMLStyleSheetsCollection_get__newEnum
,
361 HTMLStyleSheetsCollection_item
364 static const tid_t HTMLStyleSheetsCollection_iface_tids
[] = {
365 IHTMLStyleSheetsCollection_tid
,
368 static dispex_static_data_t HTMLStyleSheetsCollection_dispex
= {
370 DispHTMLStyleSheetsCollection_tid
,
372 HTMLStyleSheetsCollection_iface_tids
375 IHTMLStyleSheetsCollection
*HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList
*nslist
)
377 HTMLStyleSheetsCollection
*ret
= heap_alloc(sizeof(HTMLStyleSheetsCollection
));
379 ret
->IHTMLStyleSheetsCollection_iface
.lpVtbl
= &HTMLStyleSheetsCollectionVtbl
;
383 nsIDOMStyleSheetList_AddRef(nslist
);
384 ret
->nslist
= nslist
;
386 init_dispex(&ret
->dispex
, (IUnknown
*)&ret
->IHTMLStyleSheetsCollection_iface
,
387 &HTMLStyleSheetsCollection_dispex
);
389 return &ret
->IHTMLStyleSheetsCollection_iface
;
392 static inline HTMLStyleSheet
*impl_from_IHTMLStyleSheet(IHTMLStyleSheet
*iface
)
394 return CONTAINING_RECORD(iface
, HTMLStyleSheet
, IHTMLStyleSheet_iface
);
397 static HRESULT WINAPI
HTMLStyleSheet_QueryInterface(IHTMLStyleSheet
*iface
, REFIID riid
, void **ppv
)
399 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
401 TRACE("(%p)->(%s %p)\n", This
, debugstr_mshtml_guid(riid
), ppv
);
403 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
404 *ppv
= &This
->IHTMLStyleSheet_iface
;
405 }else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
406 *ppv
= &This
->IHTMLStyleSheet_iface
;
407 }else if(IsEqualGUID(&IID_IHTMLStyleSheet
, riid
)) {
408 *ppv
= &This
->IHTMLStyleSheet_iface
;
409 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
)) {
410 return *ppv
? S_OK
: E_NOINTERFACE
;
413 WARN("unsupported %s\n", debugstr_mshtml_guid(riid
));
414 return E_NOINTERFACE
;
417 IUnknown_AddRef((IUnknown
*)*ppv
);
421 static ULONG WINAPI
HTMLStyleSheet_AddRef(IHTMLStyleSheet
*iface
)
423 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
424 LONG ref
= InterlockedIncrement(&This
->ref
);
426 TRACE("(%p) ref=%d\n", This
, ref
);
431 static ULONG WINAPI
HTMLStyleSheet_Release(IHTMLStyleSheet
*iface
)
433 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
434 LONG ref
= InterlockedDecrement(&This
->ref
);
436 TRACE("(%p) ref=%d\n", This
, ref
);
439 release_dispex(&This
->dispex
);
440 if(This
->nsstylesheet
)
441 nsIDOMCSSStyleSheet_Release(This
->nsstylesheet
);
448 static HRESULT WINAPI
HTMLStyleSheet_GetTypeInfoCount(IHTMLStyleSheet
*iface
, UINT
*pctinfo
)
450 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
451 TRACE("(%p)->(%p)\n", This
, pctinfo
);
452 return IDispatchEx_GetTypeInfoCount(&This
->dispex
.IDispatchEx_iface
, pctinfo
);
455 static HRESULT WINAPI
HTMLStyleSheet_GetTypeInfo(IHTMLStyleSheet
*iface
, UINT iTInfo
,
456 LCID lcid
, ITypeInfo
**ppTInfo
)
458 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
459 return IDispatchEx_GetTypeInfo(&This
->dispex
.IDispatchEx_iface
, iTInfo
, lcid
, ppTInfo
);
462 static HRESULT WINAPI
HTMLStyleSheet_GetIDsOfNames(IHTMLStyleSheet
*iface
, REFIID riid
,
463 LPOLESTR
*rgszNames
, UINT cNames
,
464 LCID lcid
, DISPID
*rgDispId
)
466 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
467 return IDispatchEx_GetIDsOfNames(&This
->dispex
.IDispatchEx_iface
, riid
, rgszNames
, cNames
, lcid
, rgDispId
);
470 static HRESULT WINAPI
HTMLStyleSheet_Invoke(IHTMLStyleSheet
*iface
, DISPID dispIdMember
,
471 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
472 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
474 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
475 return IDispatchEx_Invoke(&This
->dispex
.IDispatchEx_iface
, dispIdMember
, riid
, lcid
, wFlags
, pDispParams
,
476 pVarResult
, pExcepInfo
, puArgErr
);
479 static HRESULT WINAPI
HTMLStyleSheet_put_title(IHTMLStyleSheet
*iface
, BSTR v
)
481 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
482 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
486 static HRESULT WINAPI
HTMLStyleSheet_get_title(IHTMLStyleSheet
*iface
, BSTR
*p
)
488 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
489 FIXME("(%p)->(%p)\n", This
, p
);
493 static HRESULT WINAPI
HTMLStyleSheet_get_parentStyleSheet(IHTMLStyleSheet
*iface
,
496 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
497 FIXME("(%p)->(%p)\n", This
, p
);
501 static HRESULT WINAPI
HTMLStyleSheet_get_owningElement(IHTMLStyleSheet
*iface
, IHTMLElement
**p
)
503 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
504 FIXME("(%p)->(%p)\n", This
, p
);
508 static HRESULT WINAPI
HTMLStyleSheet_put_disabled(IHTMLStyleSheet
*iface
, VARIANT_BOOL v
)
510 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
511 FIXME("(%p)->(%x)\n", This
, v
);
515 static HRESULT WINAPI
HTMLStyleSheet_get_disabled(IHTMLStyleSheet
*iface
, VARIANT_BOOL
*p
)
517 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
518 FIXME("(%p)->(%p)\n", This
, p
);
522 static HRESULT WINAPI
HTMLStyleSheet_get_readOnly(IHTMLStyleSheet
*iface
, VARIANT_BOOL
*p
)
524 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
525 FIXME("(%p)->(%p)\n", This
, p
);
529 static HRESULT WINAPI
HTMLStyleSheet_get_imports(IHTMLStyleSheet
*iface
,
530 IHTMLStyleSheetsCollection
**p
)
532 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
533 FIXME("(%p)->(%p)\n", This
, p
);
537 static HRESULT WINAPI
HTMLStyleSheet_put_href(IHTMLStyleSheet
*iface
, BSTR v
)
539 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
540 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
544 static HRESULT WINAPI
HTMLStyleSheet_get_href(IHTMLStyleSheet
*iface
, BSTR
*p
)
546 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
550 TRACE("(%p)->(%p)\n", This
, p
);
552 nsAString_Init(&href_str
, NULL
);
553 nsres
= nsIDOMCSSStyleSheet_GetHref(This
->nsstylesheet
, &href_str
);
554 return return_nsstr(nsres
, &href_str
, p
);
557 static HRESULT WINAPI
HTMLStyleSheet_get_type(IHTMLStyleSheet
*iface
, BSTR
*p
)
559 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
560 FIXME("(%p)->(%p)\n", This
, p
);
564 static HRESULT WINAPI
HTMLStyleSheet_get_id(IHTMLStyleSheet
*iface
, BSTR
*p
)
566 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
567 FIXME("(%p)->(%p)\n", This
, p
);
571 static HRESULT WINAPI
HTMLStyleSheet_addImport(IHTMLStyleSheet
*iface
, BSTR bstrURL
,
572 LONG lIndex
, LONG
*plIndex
)
574 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
575 FIXME("(%p)->(%s %d %p)\n", This
, debugstr_w(bstrURL
), lIndex
, plIndex
);
579 static HRESULT WINAPI
HTMLStyleSheet_addRule(IHTMLStyleSheet
*iface
, BSTR bstrSelector
,
580 BSTR bstrStyle
, LONG lIndex
, LONG
*plIndex
)
582 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
583 FIXME("(%p)->(%s %s %d %p)\n", This
, debugstr_w(bstrSelector
), debugstr_w(bstrStyle
),
588 static HRESULT WINAPI
HTMLStyleSheet_removeImport(IHTMLStyleSheet
*iface
, LONG lIndex
)
590 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
591 FIXME("(%p)->(%d)\n", This
, lIndex
);
595 static HRESULT WINAPI
HTMLStyleSheet_removeRule(IHTMLStyleSheet
*iface
, LONG lIndex
)
597 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
598 FIXME("(%p)->(%d)\n", This
, lIndex
);
602 static HRESULT WINAPI
HTMLStyleSheet_put_media(IHTMLStyleSheet
*iface
, BSTR v
)
604 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
605 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
609 static HRESULT WINAPI
HTMLStyleSheet_get_media(IHTMLStyleSheet
*iface
, BSTR
*p
)
611 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
612 FIXME("(%p)->(%p)\n", This
, p
);
616 static HRESULT WINAPI
HTMLStyleSheet_put_cssText(IHTMLStyleSheet
*iface
, BSTR v
)
618 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
619 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
623 static HRESULT WINAPI
HTMLStyleSheet_get_cssText(IHTMLStyleSheet
*iface
, BSTR
*p
)
625 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
626 FIXME("(%p)->(%p)\n", This
, p
);
630 static HRESULT WINAPI
HTMLStyleSheet_get_rules(IHTMLStyleSheet
*iface
,
631 IHTMLStyleSheetRulesCollection
**p
)
633 HTMLStyleSheet
*This
= impl_from_IHTMLStyleSheet(iface
);
634 nsIDOMCSSRuleList
*nslist
= NULL
;
637 TRACE("(%p)->(%p)\n", This
, p
);
639 /* Gecko has buggy security checks and GetCssRules will fail. We have a correct
640 * implementation and it will work when the bug will be fixed in Gecko. */
641 nsres
= nsIDOMCSSStyleSheet_GetCssRules(This
->nsstylesheet
, &nslist
);
643 WARN("GetCssRules failed: %08x\n", nsres
);
645 *p
= HTMLStyleSheetRulesCollection_Create(nslist
);
649 static const IHTMLStyleSheetVtbl HTMLStyleSheetVtbl
= {
650 HTMLStyleSheet_QueryInterface
,
651 HTMLStyleSheet_AddRef
,
652 HTMLStyleSheet_Release
,
653 HTMLStyleSheet_GetTypeInfoCount
,
654 HTMLStyleSheet_GetTypeInfo
,
655 HTMLStyleSheet_GetIDsOfNames
,
656 HTMLStyleSheet_Invoke
,
657 HTMLStyleSheet_put_title
,
658 HTMLStyleSheet_get_title
,
659 HTMLStyleSheet_get_parentStyleSheet
,
660 HTMLStyleSheet_get_owningElement
,
661 HTMLStyleSheet_put_disabled
,
662 HTMLStyleSheet_get_disabled
,
663 HTMLStyleSheet_get_readOnly
,
664 HTMLStyleSheet_get_imports
,
665 HTMLStyleSheet_put_href
,
666 HTMLStyleSheet_get_href
,
667 HTMLStyleSheet_get_type
,
668 HTMLStyleSheet_get_id
,
669 HTMLStyleSheet_addImport
,
670 HTMLStyleSheet_addRule
,
671 HTMLStyleSheet_removeImport
,
672 HTMLStyleSheet_removeRule
,
673 HTMLStyleSheet_put_media
,
674 HTMLStyleSheet_get_media
,
675 HTMLStyleSheet_put_cssText
,
676 HTMLStyleSheet_get_cssText
,
677 HTMLStyleSheet_get_rules
680 static const tid_t HTMLStyleSheet_iface_tids
[] = {
684 static dispex_static_data_t HTMLStyleSheet_dispex
= {
686 DispHTMLStyleSheet_tid
,
688 HTMLStyleSheet_iface_tids
691 IHTMLStyleSheet
*HTMLStyleSheet_Create(nsIDOMStyleSheet
*nsstylesheet
)
693 HTMLStyleSheet
*ret
= heap_alloc(sizeof(HTMLStyleSheet
));
696 ret
->IHTMLStyleSheet_iface
.lpVtbl
= &HTMLStyleSheetVtbl
;
698 ret
->nsstylesheet
= NULL
;
700 init_dispex(&ret
->dispex
, (IUnknown
*)&ret
->IHTMLStyleSheet_iface
, &HTMLStyleSheet_dispex
);
703 nsres
= nsIDOMStyleSheet_QueryInterface(nsstylesheet
, &IID_nsIDOMCSSStyleSheet
,
704 (void**)&ret
->nsstylesheet
);
706 ERR("Could not get nsICSSStyleSheet interface: %08x\n", nsres
);
709 return &ret
->IHTMLStyleSheet_iface
;