Jacek Caban : mshtml: Create script element in IHTMLDocument:: createStyleSheet.
Alexandre Julliard
julliard at winehq.org
Thu Oct 11 15:25:16 CDT 2012
Module: wine
Branch: master
Commit: 163970c336e888874b2ef7e27863c6546cca1704
URL: http://source.winehq.org/git/wine.git/?a=commit;h=163970c336e888874b2ef7e27863c6546cca1704
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Oct 11 14:08:03 2012 +0200
mshtml: Create script element in IHTMLDocument::createStyleSheet.
---
dlls/mshtml/htmldoc.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 986397c..0a41522 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1442,11 +1442,55 @@ static HRESULT WINAPI HTMLDocument_createStyleSheet(IHTMLDocument2 *iface, BSTR
LONG lIndex, IHTMLStyleSheet **ppnewStyleSheet)
{
HTMLDocument *This = impl_from_IHTMLDocument2(iface);
+ nsIDOMHTMLHeadElement *head_elem;
+ IHTMLStyleElement *style_elem;
+ HTMLElement *elem;
+ nsresult nsres;
+ HRESULT hres;
- FIXME("(%p)->(%s %d %p) semi-stub\n", This, debugstr_w(bstrHref), lIndex, ppnewStyleSheet);
+ static const WCHAR styleW[] = {'s','t','y','l','e',0};
- *ppnewStyleSheet = HTMLStyleSheet_Create(NULL);
- return S_OK;
+ TRACE("(%p)->(%s %d %p)\n", This, debugstr_w(bstrHref), lIndex, ppnewStyleSheet);
+
+ if(!This->doc_node->nsdoc) {
+ FIXME("not a real doc object\n");
+ return E_NOTIMPL;
+ }
+
+ if(lIndex != -1)
+ FIXME("Unsupported lIndex %d\n", lIndex);
+
+ if(bstrHref) {
+ FIXME("semi-stub for href %s\n", debugstr_w(bstrHref));
+ *ppnewStyleSheet = HTMLStyleSheet_Create(NULL);
+ return S_OK;
+ }
+
+ hres = create_element(This->doc_node, styleW, &elem);
+ if(FAILED(hres))
+ return hres;
+
+ nsres = nsIDOMHTMLDocument_GetHead(This->doc_node->nsdoc, &head_elem);
+ if(NS_SUCCEEDED(nsres)) {
+ nsIDOMNode *tmp_node;
+
+ nsres = nsIDOMHTMLHeadElement_AppendChild(head_elem, (nsIDOMNode*)elem->nselem, &tmp_node);
+ nsIDOMHTMLHeadElement_Release(head_elem);
+ if(NS_SUCCEEDED(nsres) && tmp_node)
+ nsIDOMNode_Release(tmp_node);
+ }
+ if(NS_FAILED(nsres)) {
+ IHTMLElement_Release(&elem->IHTMLElement_iface);
+ return E_FAIL;
+ }
+
+ hres = IHTMLElement_QueryInterface(&elem->IHTMLElement_iface, &IID_IHTMLStyleElement, (void**)&style_elem);
+ assert(hres == S_OK);
+ IHTMLElement_Release(&elem->IHTMLElement_iface);
+
+ hres = IHTMLStyleElement_get_styleSheet(style_elem, ppnewStyleSheet);
+ IHTMLStyleElement_Release(style_elem);
+ return hres;
}
static const IHTMLDocument2Vtbl HTMLDocumentVtbl = {
More information about the wine-cvs
mailing list