Module: wine Branch: master Commit: f35737a0885f4acd349f85b129aa39dd01a9bd85 URL: https://source.winehq.org/git/wine.git/?a=commit;h=f35737a0885f4acd349f85b12...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Mar 15 16:18:13 2021 +0100
mshtml: Initialize HTMLStyleSheet object with compat mode.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmldoc.c | 4 ++-- dlls/mshtml/htmlstyleelem.c | 7 ++++--- dlls/mshtml/htmlstylesheet.c | 30 ++++++++++++++++++++---------- dlls/mshtml/mshtml_private.h | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 54273f5a6e0..ad3ce941002 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -1733,8 +1733,8 @@ static HRESULT WINAPI HTMLDocument_createStyleSheet(IHTMLDocument2 *iface, BSTR
if(bstrHref && *bstrHref) { FIXME("semi-stub for href %s\n", debugstr_w(bstrHref)); - *ppnewStyleSheet = HTMLStyleSheet_Create(NULL); - return S_OK; + return create_style_sheet(NULL, dispex_compat_mode(&This->doc_node->node.event_target.dispex), + ppnewStyleSheet); }
hres = create_element(This->doc_node, L"style", &elem); diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c index 14fd8bc8f53..0cb6bac0710 100644 --- a/dlls/mshtml/htmlstyleelem.c +++ b/dlls/mshtml/htmlstyleelem.c @@ -198,10 +198,11 @@ static HRESULT WINAPI HTMLStyleElement_get_styleSheet(IHTMLStyleElement *iface, assert(nsres == NS_OK);
if(ss) { - This->style_sheet = HTMLStyleSheet_Create(ss); + HRESULT hres = create_style_sheet(ss, dispex_compat_mode(&This->element.node.event_target.dispex), + &This->style_sheet); nsIDOMStyleSheet_Release(ss); - if(!This->style_sheet) - return E_OUTOFMEMORY; + if(FAILED(hres)) + return hres; } }
diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c index a4e3254100b..8d535a657a9 100644 --- a/dlls/mshtml/htmlstylesheet.c +++ b/dlls/mshtml/htmlstylesheet.c @@ -517,7 +517,9 @@ static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection switch(V_VT(pvarIndex)) { case VT_I4: { nsIDOMStyleSheet *nsstylesheet; + IHTMLStyleSheet *stylesheet; nsresult nsres; + HRESULT hres;
TRACE("index=%d\n", V_I4(pvarIndex));
@@ -528,9 +530,12 @@ static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection return E_INVALIDARG; }
- V_VT(pvarResult) = VT_DISPATCH; - V_DISPATCH(pvarResult) = (IDispatch*)HTMLStyleSheet_Create(nsstylesheet); + hres = create_style_sheet(nsstylesheet, dispex_compat_mode(&This->dispex), &stylesheet); + if(FAILED(hres)) + return hres;
+ V_VT(pvarResult) = VT_DISPATCH; + V_DISPATCH(pvarResult) = (IDispatch*)stylesheet; return S_OK; }
@@ -938,23 +943,28 @@ static dispex_static_data_t HTMLStyleSheet_dispex = { HTMLStyleSheet_iface_tids };
-IHTMLStyleSheet *HTMLStyleSheet_Create(nsIDOMStyleSheet *nsstylesheet) +HRESULT create_style_sheet(nsIDOMStyleSheet *nsstylesheet, compat_mode_t compat_mode, IHTMLStyleSheet **ret) { - HTMLStyleSheet *ret = heap_alloc(sizeof(HTMLStyleSheet)); + HTMLStyleSheet *style_sheet; nsresult nsres;
- ret->IHTMLStyleSheet_iface.lpVtbl = &HTMLStyleSheetVtbl; - ret->ref = 1; - ret->nsstylesheet = NULL; + if(!(style_sheet = heap_alloc(sizeof(HTMLStyleSheet)))) + return E_OUTOFMEMORY;
- init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLStyleSheet_iface, &HTMLStyleSheet_dispex); + style_sheet->IHTMLStyleSheet_iface.lpVtbl = &HTMLStyleSheetVtbl; + style_sheet->ref = 1; + style_sheet->nsstylesheet = NULL; + + init_dispex_with_compat_mode(&style_sheet->dispex, (IUnknown*)&style_sheet->IHTMLStyleSheet_iface, + &HTMLStyleSheet_dispex, compat_mode);
if(nsstylesheet) { nsres = nsIDOMStyleSheet_QueryInterface(nsstylesheet, &IID_nsIDOMCSSStyleSheet, - (void**)&ret->nsstylesheet); + (void**)&style_sheet->nsstylesheet); if(NS_FAILED(nsres)) ERR("Could not get nsICSSStyleSheet interface: %08x\n", nsres); }
- return &ret->IHTMLStyleSheet_iface; + *ret = &style_sheet->IHTMLStyleSheet_iface; + return S_OK; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index be19d98637f..735f9279b04 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1019,7 +1019,7 @@ HRESULT get_readystate_string(READYSTATE,BSTR*) DECLSPEC_HIDDEN;
HRESULT HTMLSelectionObject_Create(HTMLDocumentNode*,nsISelection*,IHTMLSelectionObject**) DECLSPEC_HIDDEN; HRESULT HTMLTxtRange_Create(HTMLDocumentNode*,nsIDOMRange*,IHTMLTxtRange**) DECLSPEC_HIDDEN; -IHTMLStyleSheet *HTMLStyleSheet_Create(nsIDOMStyleSheet*) DECLSPEC_HIDDEN; +HRESULT create_style_sheet(nsIDOMStyleSheet*,compat_mode_t,IHTMLStyleSheet**) DECLSPEC_HIDDEN; IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList*) DECLSPEC_HIDDEN; HRESULT HTMLDOMRange_Create(nsIDOMRange*,IHTMLDOMRange**) DECLSPEC_HIDDEN; HRESULT create_markup_pointer(IMarkupPointer**) DECLSPEC_HIDDEN;