static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; nsIDOMHTMLDocument *nshtmldoc; nsIDOMHTMLElement *nsbody = NULL; nsIDOMDocument *nsdoc; task_t *task; TRACE("(%p)\n", This); if(!This->doc) return NS_OK; connect_scripts(This->doc); setup_nswindow(This->doc->window); if(This->editor_controller) { nsIController_Release(This->editor_controller); This->editor_controller = NULL; } if(This->doc->usermode == EDITMODE) handle_edit_load(This->doc); task = heap_alloc(sizeof(task_t)); task->doc = This->doc; task->task_id = TASK_PARSECOMPLETE; task->next = NULL; /* * This should be done in the worker thread that parses HTML, * but we don't have such thread (Gecko parses HTML for us). */ push_task(task); nsIWebNavigation_GetDocument(This->navigation, &nsdoc); nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc); nsIDOMDocument_Release(nsdoc); nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody); nsIDOMHTMLDocument_Release(nshtmldoc); if(nsbody) { fire_event(This->doc, EVENTID_LOAD, (nsIDOMNode*)nsbody); nsIDOMHTMLElement_Release(nsbody); } return NS_OK; }
static HRESULT WINAPI HTMLBodyElement_createTextRange(IHTMLBodyElement *iface, IHTMLTxtRange **range) { HTMLBodyElement *This = impl_from_IHTMLBodyElement(iface); nsIDOMDocumentRange *nsdocrange; nsIDOMRange *nsrange = NULL; nsresult nsres; HRESULT hres; TRACE("(%p)->(%p)\n", This, range); if(!This->textcont.element.node.doc->nsdoc) { WARN("No nsdoc\n"); return E_UNEXPECTED; } nsres = nsIDOMDocument_QueryInterface(This->textcont.element.node.doc->nsdoc, &IID_nsIDOMDocumentRange, (void**)&nsdocrange); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMDocumentRabge iface: %08x\n", nsres); return E_FAIL; } nsres = nsIDOMDocumentRange_CreateRange(nsdocrange, &nsrange); if(NS_SUCCEEDED(nsres)) { nsres = nsIDOMRange_SelectNodeContents(nsrange, This->textcont.element.node.nsnode); if(NS_FAILED(nsres)) ERR("SelectNodeContents failed: %08x\n", nsres); }else { ERR("CreateRange failed: %08x\n", nsres); } nsIDOMDocumentRange_Release(nsdocrange); hres = HTMLTxtRange_Create(This->textcont.element.node.doc->basedoc.doc_node, nsrange, range); nsIDOMRange_Release(nsrange); return hres; }