static HRESULT get_doc_string(HTMLDocumentNode *This, char **str) { nsIDOMNode *nsnode; LPCWSTR strw; nsAString nsstr; nsresult nsres; if(!This->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsres = nsIDOMHTMLDocument_QueryInterface(This->nsdoc, &IID_nsIDOMNode, (void**)&nsnode); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNode failed: %08x\n", nsres); return E_FAIL; } nsAString_Init(&nsstr, NULL); nsnode_to_nsstring(nsnode, &nsstr); nsIDOMNode_Release(nsnode); nsAString_GetData(&nsstr, &strw); TRACE("%s\n", debugstr_w(strw)); *str = heap_strdupWtoA(strw); nsAString_Finish(&nsstr); return S_OK; }
HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p) { nsIDOMCSSStyleDeclaration *nsstyle; nsIDOMDocumentView *nsdocview; nsIDOMAbstractView *nsview; nsIDOMViewCSS *nsviewcss; nsAString nsempty_str; HTMLCurrentStyle *ret; nsresult nsres; if(!elem->node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsres = nsIDOMHTMLDocument_QueryInterface(elem->node.doc->nsdoc, &IID_nsIDOMDocumentView, (void**)&nsdocview); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMDocumentView: %08x\n", nsres); return E_FAIL; } nsres = nsIDOMDocumentView_GetDefaultView(nsdocview, &nsview); nsIDOMDocumentView_Release(nsdocview); if(NS_FAILED(nsres)) { ERR("GetDefaultView failed: %08x\n", nsres); return E_FAIL; } nsres = nsIDOMAbstractView_QueryInterface(nsview, &IID_nsIDOMViewCSS, (void**)&nsviewcss); nsIDOMAbstractView_Release(nsview); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMViewCSS: %08x\n", nsres); return E_FAIL; } nsAString_Init(&nsempty_str, NULL); nsres = nsIDOMViewCSS_GetComputedStyle(nsviewcss, (nsIDOMElement*)elem->nselem, &nsempty_str, &nsstyle); nsIDOMViewCSS_Release(nsviewcss); nsAString_Finish(&nsempty_str); if(NS_FAILED(nsres)) { ERR("GetComputedStyle failed: %08x\n", nsres); return E_FAIL; } ret = heap_alloc_zero(sizeof(HTMLCurrentStyle)); if(!ret) { nsIDOMCSSStyleDeclaration_Release(nsstyle); return E_OUTOFMEMORY; } ret->lpIHTMLCurrentStyleVtbl = &HTMLCurrentStyleVtbl; ret->ref = 1; ret->nsstyle = nsstyle; init_dispex(&ret->dispex, (IUnknown*)HTMLCURSTYLE(ret), &HTMLCurrentStyle_dispex); *p = HTMLCURSTYLE(ret); return S_OK; }
void release_document_mutation(HTMLDocumentNode *doc) { nsIDocument *nsdoc; nsresult nsres; nsres = nsIDOMHTMLDocument_QueryInterface(doc->nsdoc, &IID_nsIDocument, (void**)&nsdoc); if(NS_FAILED(nsres)) { ERR("Could not get nsIDocument: %08x\n", nsres); return; } nsIContentUtils_RemoveDocumentObserver(content_utils, nsdoc, &doc->nsIDocumentObserver_iface); nsIDocument_Release(nsdoc); }
JSContext *get_context_from_document(nsIDOMHTMLDocument *nsdoc) { nsIDocument *doc; JSContext *ctx; nsresult nsres; nsres = nsIDOMHTMLDocument_QueryInterface(nsdoc, &IID_nsIDocument, (void**)&doc); assert(nsres == NS_OK); ctx = nsIContentUtils_GetContextFromDocument(content_utils, doc); nsIDocument_Release(doc); TRACE("ret %p\n", ctx); return ctx; }
static IHTMLEventObj *create_event(HTMLDOMNode *target, eventid_t eid, nsIDOMEvent *nsevent) { HTMLEventObj *ret; ret = heap_alloc(sizeof(*ret)); if(!ret) return NULL; ret->IHTMLEventObj_iface.lpVtbl = &HTMLEventObjVtbl; ret->ref = 1; ret->type = event_info+eid; ret->nsevent = nsevent; if(nsevent) { nsIDOMEvent_AddRef(nsevent); }else if(event_types[event_info[eid].type]) { nsIDOMDocumentEvent *doc_event; nsresult nsres; nsres = nsIDOMHTMLDocument_QueryInterface(target->doc->nsdoc, &IID_nsIDOMDocumentEvent, (void**)&doc_event); if(NS_SUCCEEDED(nsres)) { nsAString type_str; nsAString_InitDepend(&type_str, event_types[event_info[eid].type]); nsres = nsIDOMDocumentEvent_CreateEvent(doc_event, &type_str, &ret->nsevent); nsAString_Finish(&type_str); nsIDOMDocumentEvent_Release(doc_event); } if(NS_FAILED(nsres)) { ERR("Could not create event: %08x\n", nsres); IHTMLEventObj_Release(&ret->IHTMLEventObj_iface); return NULL; } } ret->target = target; IHTMLDOMNode_AddRef(&target->IHTMLDOMNode_iface); init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLEventObj_iface, &HTMLEventObj_dispex); return &ret->IHTMLEventObj_iface; }