HRESULT set_frame_doc(HTMLFrameBase *frame, nsIDOMDocument *nsdoc) { nsIDOMWindow *nswindow; HTMLOuterWindow *window; nsresult nsres; HRESULT hres = S_OK; if(frame->content_window) return S_OK; nsres = nsIDOMDocument_GetDefaultView(nsdoc, &nswindow); if(NS_FAILED(nsres) || !nswindow) return E_FAIL; window = nswindow_to_window(nswindow); if(!window) hres = HTMLOuterWindow_Create(frame->element.node.doc->basedoc.doc_obj, nswindow, frame->element.node.doc->basedoc.window, &window); nsIDOMWindow_Release(nswindow); if(FAILED(hres)) return hres; frame->content_window = window; window->frame_element = frame; return S_OK; }
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; }
void init_nsevents(NSContainer *This) { nsIDOMWindow *dom_window; nsIDOMEventTarget *target; nsresult nsres; static const PRUnichar wsz_blur[] = {'b','l','u','r',0}; static const PRUnichar wsz_focus[] = {'f','o','c','u','s',0}; static const PRUnichar wsz_keypress[] = {'k','e','y','p','r','e','s','s',0}; static const PRUnichar wsz_load[] = {'l','o','a','d',0}; static const PRUnichar DOMNodeInsertedW[] = {'D','O','M','N','o','d','e','I','n','s','e','r','t','e','d',0}; init_listener(&This->blur_listener, This, &blur_vtbl); init_listener(&This->focus_listener, This, &focus_vtbl); init_listener(&This->keypress_listener, This, &keypress_vtbl); init_listener(&This->load_listener, This, &load_vtbl); init_listener(&This->node_insert_listener, This, &node_insert_vtbl); init_listener(&This->htmlevent_listener, This, &htmlevent_vtbl); nsres = nsIWebBrowser_GetContentDOMWindow(This->webbrowser, &dom_window); if(NS_FAILED(nsres)) { ERR("GetContentDOMWindow failed: %08x\n", nsres); return; } nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target); nsIDOMWindow_Release(dom_window); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, wsz_blur, NSEVENTLIST(&This->blur_listener), TRUE); init_event(target, wsz_focus, NSEVENTLIST(&This->focus_listener), TRUE); init_event(target, wsz_keypress, NSEVENTLIST(&This->keypress_listener), FALSE); init_event(target, wsz_load, NSEVENTLIST(&This->load_listener), TRUE); init_event(target, DOMNodeInsertedW,NSEVENTLIST(&This->node_insert_listener),TRUE); nsIDOMEventTarget_Release(target); }
void add_nsevent_listener(NSContainer *container, LPCWSTR type) { nsIDOMWindow *dom_window; nsIDOMEventTarget *target; nsresult nsres; nsres = nsIWebBrowser_GetContentDOMWindow(container->webbrowser, &dom_window); if(NS_FAILED(nsres)) { ERR("GetContentDOMWindow failed: %08x\n", nsres); return; } nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target); nsIDOMWindow_Release(dom_window); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, type, NSEVENTLIST(&container->htmlevent_listener), TRUE); nsIDOMEventTarget_Release(target); }