static HRESULT create_function(script_ctx_t *ctx, const builtin_info_t *builtin_info, DWORD flags, BOOL funcprot, jsdisp_t *prototype, FunctionInstance **ret) { FunctionInstance *function; HRESULT hres; function = heap_alloc_zero(sizeof(FunctionInstance)); if(!function) return E_OUTOFMEMORY; if(funcprot) hres = init_dispex(&function->dispex, ctx, builtin_info, prototype); else if(builtin_info) hres = init_dispex_from_constr(&function->dispex, ctx, builtin_info, ctx->function_constr); else hres = init_dispex_from_constr(&function->dispex, ctx, &FunctionInst_info, ctx->function_constr); if(FAILED(hres)) { heap_free(function); return hres; } function->flags = flags; function->length = flags & PROPF_ARGMASK; *ret = function; return S_OK; }
HRESULT HTMLDOMTextNode_Create(HTMLDocumentNode *doc, nsIDOMNode *nsnode, HTMLDOMNode **node) { HTMLDOMTextNode *ret; nsresult nsres; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->node.vtbl = &HTMLDOMTextNodeImplVtbl; ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl; init_dispex(&ret->node.dispex, (IUnknown*)&ret->IHTMLDOMTextNode_iface, &HTMLDOMTextNode_dispex); HTMLDOMNode_Init(doc, &ret->node, nsnode); nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMText, (void**)&ret->nstext); assert(nsres == NS_OK && (nsIDOMNode*)ret->nstext == ret->node.nsnode); /* Share reference with nsnode */ nsIDOMNode_Release(ret->node.nsnode); *node = &ret->node; return S_OK; }
static HRESULT WINAPI HTMLXMLHttpRequestFactory_create(IHTMLXMLHttpRequestFactory *iface, IHTMLXMLHttpRequest **p) { HTMLXMLHttpRequestFactory *This = impl_from_IHTMLXMLHttpRequestFactory(iface); HTMLXMLHttpRequest *ret; nsIXMLHttpRequest *nsxhr; TRACE("(%p)->(%p)\n", This, p); nsxhr = create_nsxhr(This->window->base.outer_window->nswindow); if(!nsxhr) return E_FAIL; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) { nsIXMLHttpRequest_Release(nsxhr); return E_OUTOFMEMORY; } ret->nsxhr = nsxhr; ret->IHTMLXMLHttpRequest_iface.lpVtbl = &HTMLXMLHttpRequestVtbl; init_dispex(&ret->event_target.dispex, (IUnknown*)&ret->IHTMLXMLHttpRequest_iface, &HTMLXMLHttpRequest_dispex); ret->ref = 1; *p = &ret->IHTMLXMLHttpRequest_iface; return S_OK; }
HRESULT init_dispex_from_constr(DispatchEx *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, DispatchEx *constr) { DispatchEx *prot = NULL; dispex_prop_t *prop; HRESULT hres; static const WCHAR prototypeW[] = {'p','r','o','t','o','t','y','p','e',0}; hres = find_prop_name_prot(constr, prototypeW, FALSE, &prop); if(SUCCEEDED(hres) && prop) { jsexcept_t jsexcept; VARIANT var; V_VT(&var) = VT_EMPTY; memset(&jsexcept, 0, sizeof(jsexcept)); hres = prop_get(constr, prop, ctx->lcid, NULL, &var, &jsexcept, NULL/*FIXME*/); if(FAILED(hres)) { ERR("Could not get prototype\n"); return hres; } if(V_VT(&var) == VT_DISPATCH) prot = iface_to_jsdisp((IUnknown*)V_DISPATCH(&var)); VariantClear(&var); } hres = init_dispex(dispex, ctx, builtin_info, prot); if(prot) IDispatchEx_Release(_IDispatchEx_(prot)); return hres; }
HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p) { nsIDOMCSSStyleDeclaration *nsstyle; mozIDOMWindowProxy *nsview; nsIDOMWindow *nswindow; nsAString nsempty_str; HTMLCurrentStyle *ret; nsresult nsres; if(!elem->node.doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } nsres = nsIDOMHTMLDocument_GetDefaultView(elem->node.doc->nsdoc, &nsview); if(NS_FAILED(nsres)) { ERR("GetDefaultView failed: %08x\n", nsres); return E_FAIL; } nsres = mozIDOMWindowProxy_QueryInterface(nsview, &IID_nsIDOMWindow, (void**)&nswindow); mozIDOMWindowProxy_Release(nsview); assert(nsres == NS_OK); nsAString_Init(&nsempty_str, NULL); nsres = nsIDOMWindow_GetComputedStyle(nswindow, (nsIDOMElement*)elem->nselem, &nsempty_str, &nsstyle); nsAString_Finish(&nsempty_str); nsIDOMWindow_Release(nswindow); if(NS_FAILED(nsres)) { ERR("GetComputedStyle failed: %08x\n", nsres); return E_FAIL; } if(!nsstyle) { ERR("GetComputedStyle returned NULL nsstyle\n"); return E_FAIL; } ret = heap_alloc_zero(sizeof(HTMLCurrentStyle)); if(!ret) { nsIDOMCSSStyleDeclaration_Release(nsstyle); return E_OUTOFMEMORY; } ret->IHTMLCurrentStyle_iface.lpVtbl = &HTMLCurrentStyleVtbl; ret->IHTMLCurrentStyle2_iface.lpVtbl = &HTMLCurrentStyle2Vtbl; ret->IHTMLCurrentStyle3_iface.lpVtbl = &HTMLCurrentStyle3Vtbl; ret->IHTMLCurrentStyle4_iface.lpVtbl = &HTMLCurrentStyle4Vtbl; ret->ref = 1; ret->nsstyle = nsstyle; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLCurrentStyle_iface, &HTMLCurrentStyle_dispex); IHTMLElement_AddRef(&elem->IHTMLElement_iface); ret->elem = elem; *p = &ret->IHTMLCurrentStyle_iface; 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; }
IOmNavigator *OmNavigator_Create(void) { OmNavigator *ret; ret = heap_alloc_zero(sizeof(*ret)); ret->IOmNavigator_iface.lpVtbl = &OmNavigatorVtbl; ret->ref = 1; init_dispex(&ret->dispex, (IUnknown*)&ret->IOmNavigator_iface, &OmNavigator_dispex); return &ret->IOmNavigator_iface; }
HTMLLocation *HTMLLocation_Create(HTMLDocument *doc) { HTMLLocation *ret = heap_alloc(sizeof(*ret)); ret->lpHTMLLocationVtbl = &HTMLLocationVtbl; ret->ref = 1; ret->doc = doc; init_dispex(&ret->dispex, (IUnknown*)HTMLLOCATION(ret), &HTMLLocation_dispex); return ret; }
HTMLDOMNode *HTMLDOMTextNode_Create(nsIDOMNode *nsnode) { HTMLDOMTextNode *ret ; ret = heap_alloc_zero(sizeof(*ret)); ret->node.vtbl = &HTMLDOMTextNodeImplVtbl; ret->lpIHTMLDOMTextNodeVtbl = &HTMLDOMTextNodeVtbl; init_dispex(&ret->node.dispex, (IUnknown*)HTMLTEXT(ret), &HTMLDOMTextNode_dispex); return &ret->node; }
HTMLElement *HTMLCommentElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode) { HTMLCommentElement *ret = heap_alloc_zero(sizeof(*ret)); ret->element.node.vtbl = &HTMLCommentElementImplVtbl; ret->lpIHTMLCommentElementVtbl = &HTMLCommentElementVtbl; init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLCOMMENT(ret), &HTMLCommentElement_dispex); HTMLElement_Init(&ret->element); HTMLDOMNode_Init(doc, &ret->element.node, nsnode); return &ret->element; }
void init_xmlnode(xmlnode *This, xmlNodePtr node, IXMLDOMNode *node_iface, dispex_static_data_t *dispex_data) { if(node) { xmlnode_add_ref(node); xmldoc_add_ref(node->doc); } This->node = node; This->iface = node_iface; This->parent = NULL; init_dispex(&This->dispex, (IUnknown*)This->iface, dispex_data); }
IUnknown* create_doc_Implementation(void) { domimpl *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->IXMLDOMImplementation_iface.lpVtbl = &dimimpl_vtbl; This->ref = 1; init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMImplementation_iface, &dimimpl_dispex); return (IUnknown*)&This->IXMLDOMImplementation_iface; }
HRESULT MXWriter_create(MSXML_VERSION version, IUnknown *outer, void **ppObj) { static const WCHAR version10W[] = {'1','.','0',0}; mxwriter *This; HRESULT hr; TRACE("(%p, %p)\n", outer, ppObj); if (outer) FIXME("support aggregation, outer\n"); This = heap_alloc( sizeof (*This) ); if(!This) return E_OUTOFMEMORY; This->IMXWriter_iface.lpVtbl = &MXWriterVtbl; This->ISAXContentHandler_iface.lpVtbl = &mxwriter_saxcontent_vtbl; This->ref = 1; This->class_version = version; This->props[MXWriter_BOM] = VARIANT_TRUE; This->props[MXWriter_DisableEscaping] = VARIANT_FALSE; This->props[MXWriter_Indent] = VARIANT_FALSE; This->props[MXWriter_OmitXmlDecl] = VARIANT_FALSE; This->props[MXWriter_Standalone] = VARIANT_FALSE; This->prop_changed = FALSE; This->encoding = SysAllocString(utf16W); This->version = SysAllocString(version10W); This->xml_enc = XmlEncoding_UTF16; This->element = NULL; This->dest = NULL; This->dest_written = 0; hr = alloc_output_buffer(This->xml_enc, &This->buffer); if (hr != S_OK) { SysFreeString(This->encoding); SysFreeString(This->version); heap_free(This); return hr; } init_dispex(&This->dispex, (IUnknown*)&This->IMXWriter_iface, &mxwriter_dispex); *ppObj = &This->IMXWriter_iface; TRACE("returning iface %p\n", *ppObj); return S_OK; }
static HTMLEventObj *create_event(void) { HTMLEventObj *ret; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return NULL; ret->IHTMLEventObj_iface.lpVtbl = &HTMLEventObjVtbl; ret->ref = 1; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLEventObj_iface, &HTMLEventObj_dispex); return ret; }
HRESULT create_history(IOmHistory **ret) { OmHistory *history; history = heap_alloc_zero(sizeof(*history)); if(!history) return E_OUTOFMEMORY; init_dispex(&history->dispex, (IUnknown*)&history->IOmHistory_iface, &OmHistory_dispex); history->IOmHistory_iface.lpVtbl = &OmHistoryVtbl; history->ref = 1; *ret = &history->IOmHistory_iface; return S_OK; }
HTMLImageElementFactory *HTMLImageElementFactory_Create(HTMLWindow *window) { HTMLImageElementFactory *ret; ret = heap_alloc(sizeof(HTMLImageElementFactory)); ret->IHTMLImageElementFactory_iface.lpVtbl = &HTMLImageElementFactoryVtbl; ret->ref = 1; ret->window = window; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLImageElementFactory_iface, &HTMLImageElementFactory_dispex); return ret; }
static func_disp_t *create_func_disp(DispatchEx *obj, func_info_t *info) { func_disp_t *ret; ret = heap_alloc_zero(sizeof(func_disp_t)); if(!ret) return NULL; ret->IUnknown_iface.lpVtbl = &FunctionUnkVtbl; init_dispex(&ret->dispex, &ret->IUnknown_iface, &function_dispex); ret->obj = obj; ret->info = info; return ret; }
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, DispatchEx *prototype, DispatchEx **dispex) { DispatchEx *ret; HRESULT hres; ret = heap_alloc_zero(sizeof(DispatchEx)); if(!ret) return E_OUTOFMEMORY; hres = init_dispex(ret, ctx, builtin_info ? builtin_info : &dispex_info, prototype); if(FAILED(hres)) return hres; *dispex = ret; return S_OK; }
HRESULT HTMLScreen_Create(IHTMLScreen **ret) { HTMLScreen *screen; screen = heap_alloc_zero(sizeof(HTMLScreen)); if(!screen) return E_OUTOFMEMORY; screen->IHTMLScreen_iface.lpVtbl = &HTMLSreenVtbl; screen->ref = 1; init_dispex(&screen->dispex, (IUnknown*)&screen->IHTMLScreen_iface, &HTMLScreen_dispex); *ret = &screen->IHTMLScreen_iface; return S_OK; }
HRESULT HTMLScreen_Create(IHTMLScreen **ret) { HTMLScreen *screen; screen = heap_alloc_zero(sizeof(HTMLScreen)); if(!screen) return E_OUTOFMEMORY; screen->lpIHTMLScreenVtbl = &HTMLSreenVtbl; screen->ref = 1; init_dispex(&screen->dispex, (IUnknown*)HTMLSCREEN(screen), &HTMLScreen_dispex); *ret = HTMLSCREEN(screen); return S_OK; }
IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList *nslist) { HTMLStyleSheetsCollection *ret = heap_alloc(sizeof(HTMLStyleSheetsCollection)); ret->IHTMLStyleSheetsCollection_iface.lpVtbl = &HTMLStyleSheetsCollectionVtbl; ret->ref = 1; if(nslist) nsIDOMStyleSheetList_AddRef(nslist); ret->nslist = nslist; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLStyleSheetsCollection_iface, &HTMLStyleSheetsCollection_dispex); return &ret->IHTMLStyleSheetsCollection_iface; }
static IHTMLElementCollection *HTMLElementCollection_Create(HTMLElement **elems, DWORD len) { HTMLElementCollection *ret = heap_alloc_zero(sizeof(HTMLElementCollection)); ret->IHTMLElementCollection_iface.lpVtbl = &HTMLElementCollectionVtbl; ret->ref = 1; ret->elems = elems; ret->len = len; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLElementCollection_iface, &HTMLElementCollection_dispex); TRACE("ret=%p len=%d\n", ret, len); return &ret->IHTMLElementCollection_iface; }
static IHTMLDOMChildrenCollection *create_child_collection(HTMLDocumentNode *doc, nsIDOMNodeList *nslist) { HTMLDOMChildrenCollection *ret; ret = heap_alloc_zero(sizeof(*ret)); ret->IHTMLDOMChildrenCollection_iface.lpVtbl = &HTMLDOMChildrenCollectionVtbl; ret->ref = 1; nsIDOMNodeList_AddRef(nslist); ret->nslist = nslist; ret->doc = doc; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLDOMChildrenCollection_iface, &HTMLDOMChildrenCollection_dispex); return &ret->IHTMLDOMChildrenCollection_iface; }
HRESULT HTMLLocation_Create(HTMLInnerWindow *window, HTMLLocation **ret) { HTMLLocation *location; location = heap_alloc(sizeof(*location)); if(!location) return E_OUTOFMEMORY; location->IHTMLLocation_iface.lpVtbl = &HTMLLocationVtbl; location->ref = 1; location->window = window; init_dispex(&location->dispex, (IUnknown*)&location->IHTMLLocation_iface, &HTMLLocation_dispex); *ret = location; return S_OK; }
HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement *nselem) { HTMLImgElement *ret = heap_alloc_zero(sizeof(HTMLImgElement)); nsresult nsres; ret->lpHTMLImgElementVtbl = &HTMLImgElementVtbl; ret->element.node.vtbl = &HTMLImgElementImplVtbl; nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLImageElement, (void**)&ret->nsimg); if(NS_FAILED(nsres)) ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres); init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLIMG(ret), &HTMLImgElement_dispex); HTMLElement_Init(&ret->element); return &ret->element; }
HRESULT create_dom_implementation(IHTMLDOMImplementation **ret) { HTMLDOMImplementation *dom_implementation; dom_implementation = heap_alloc_zero(sizeof(*dom_implementation)); if(!dom_implementation) return E_OUTOFMEMORY; dom_implementation->IHTMLDOMImplementation_iface.lpVtbl = &HTMLDOMImplementationVtbl; dom_implementation->ref = 1; init_dispex(&dom_implementation->dispex, (IUnknown*)&dom_implementation->IHTMLDOMImplementation_iface, &HTMLDOMImplementation_dispex); *ret = &dom_implementation->IHTMLDOMImplementation_iface; return S_OK; }
IXMLDOMNodeList* create_children_nodelist( xmlNodePtr node ) { xmlnodelist *This; This = heap_alloc( sizeof *This ); if ( !This ) return NULL; This->IXMLDOMNodeList_iface.lpVtbl = &xmlnodelist_vtbl; This->ref = 1; This->parent = node; This->current = node->children; xmldoc_add_ref( node->doc ); init_dispex(&This->dispex, (IUnknown*)&This->IXMLDOMNodeList_iface, &xmlnodelist_dispex); return &This->IXMLDOMNodeList_iface; }
HRESULT HTMLImageElementFactory_Create(HTMLInnerWindow *window, HTMLImageElementFactory **ret_val) { HTMLImageElementFactory *ret; ret = heap_alloc(sizeof(HTMLImageElementFactory)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLImageElementFactory_iface.lpVtbl = &HTMLImageElementFactoryVtbl; ret->ref = 1; ret->window = window; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLImageElementFactory_iface, &HTMLImageElementFactory_dispex); *ret_val = ret; return S_OK; }
static HRESULT create_mime_types_collection(OmNavigator *navigator, HTMLMimeTypesCollection **ret) { HTMLMimeTypesCollection *col; col = heap_alloc_zero(sizeof(*col)); if(!col) return E_OUTOFMEMORY; col->IHTMLMimeTypesCollection_iface.lpVtbl = &HTMLMimeTypesCollectionVtbl; col->ref = 1; col->navigator = navigator; init_dispex(&col->dispex, (IUnknown*)&col->IHTMLMimeTypesCollection_iface, &HTMLMimeTypesCollection_dispex); *ret = col; return S_OK; }
HRESULT HTMLXMLHttpRequestFactory_Create(HTMLInnerWindow* window, HTMLXMLHttpRequestFactory **ret_ptr) { HTMLXMLHttpRequestFactory *ret; ret = heap_alloc(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLXMLHttpRequestFactory_iface.lpVtbl = &HTMLXMLHttpRequestFactoryVtbl; ret->ref = 1; ret->window = window; init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLXMLHttpRequestFactory_iface, &HTMLXMLHttpRequestFactory_dispex); *ret_ptr = ret; return S_OK; }