diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index bc7450910b..9c12693125 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -112,11 +112,34 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t return E_NOTIMPL; } -static HRESULT WINAPI HTMLDocument3_documentElement(IHTMLDocument3 *iface, IHTMLElement **p) +static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p) { HTMLDocument *This = HTMLDOC3_THIS(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsIDOMDocument *nsdoc; + HTMLDOMNode *node; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + if(!This->nscontainer) { + *p = NULL; + return S_OK; + } + + nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc); + if(NS_FAILED(nsres)) + ERR("GetDocument failed: %08lx\n", nsres); + + if(nsdoc) { + node = get_node(This, (nsIDOMNode*)nsdoc); + nsIDOMDocument_Release(nsdoc); + + IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p); + }else { + *p = NULL; + } + + return S_OK; } static HRESULT WINAPI HTMLDocument3_uniqueID(IHTMLDocument3 *iface, BSTR *p) @@ -402,7 +425,7 @@ static const IHTMLDocument3Vtbl HTMLDocument3Vtbl = { HTMLDocument3_releaseCapture, HTMLDocument3_recalc, HTMLDocument3_createTextNode, - HTMLDocument3_documentElement, + HTMLDocument3_get_documentElement, HTMLDocument3_uniqueID, HTMLDocument3_attachEvent, HTMLDocument3_detachEvent, diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl index fabe6bb5b8..7aa4acdb11 100644 --- a/dlls/mshtml/nsiface.idl +++ b/dlls/mshtml/nsiface.idl @@ -55,6 +55,7 @@ typedef nsStringContainer nsAString; interface nsIWebBrowserChrome; interface nsILoadGroup; interface nsIDOMNode; +interface nsIDOMDocument; [ object, @@ -69,7 +70,6 @@ interface nsISupports /* Currently we don't need a full declaration of these interfaces */ typedef nsISupports nsIWeakReference; -typedef nsISupports nsIDOMDocument; typedef nsISupports nsISHistory; typedef nsISupports nsISimpleEnumerator; typedef nsISupports nsIWidget; @@ -86,6 +86,14 @@ typedef nsISupports nsIPrompt; typedef nsISupports nsIAuthPrompt; typedef nsISupports nsIDOMNamedNodeMap; typedef nsISupports nsIDOMAttr; +typedef nsISupports nsIDOMDocumentType; +typedef nsISupports nsIDOMDOMImplementation; +typedef nsISupports nsIDOMDocumentFragment; +typedef nsISupports nsIDOMText; +typedef nsISupports nsIDOMComment; +typedef nsISupports nsIDOMCDATASection; +typedef nsISupports nsIDOMProcessingInstruction; +typedef nsISupports nsIDOMEntityReference; [ object, @@ -392,6 +400,35 @@ interface nsIDOMHTMLElement : nsIDOMElement nsresult SetClassName(const nsAString *aClassName); } +[ + object, + uuid(a6cf9075-15b3-11d2-932e-00805f8add32) +] +interface nsIDOMDocument : nsIDOMNode +{ + nsresult GetDoctype(nsIDOMDocumentType **aDoctype); + nsresult GetImplementation(nsIDOMDOMImplementation **aImplementation); + nsresult GetDocumentElement(nsIDOMElement **aDocumentElement); + nsresult CreateElement(const nsAString *tagName, nsIDOMElement **_retval); + nsresult CreateDocumentFragment(nsIDOMDocumentFragment **_retval); + nsresult CreateTextNode(const nsAString *data, nsIDOMText **_retval); + nsresult CreateComment(const nsAString *data, nsIDOMComment **_retval); + nsresult CreateCDATASection(const nsAString *data, nsIDOMCDATASection **_retval); + nsresult CreateProcessingInstruction(const nsAString *target, const nsAString *data, + nsIDOMProcessingInstruction **_retval); + nsresult CreateAttribute(const nsAString *name, nsIDOMAttr **_retval); + nsresult CreateEntityReference(const nsAString *name, nsIDOMEntityReference **_retval); + nsresult GetElementsByTagName(const nsAString *tagname, nsIDOMNodeList **_retval); + nsresult ImportNode(nsIDOMNode *importedNode, PRBool deep, nsIDOMNode **_retval); + nsresult CreateElementNS(const nsAString *namespaceURI, const nsAString *qualifiedName, + nsIDOMElement **_retval); + nsresult CreateAttributeNS(const nsAString *namespaceURI, const nsAString *qualifiedName, + nsIDOMAttr **_retval); + nsresult GetElementsByTagNameNS(const nsAString *namespaceURI, const nsAString *localName, + nsIDOMNodeList **_retval); + nsresult GetElementById(const nsAString *elementId, nsIDOMElement **_retval); +} + [ object, uuid(a6cf906b-15b3-11d2-932e-00805f8add32)